GunSpec

Firearms

Resource class for interacting with the GunSpec Firearms API. Wraps all /v1/firearms endpoints. Instantiated internally by the GunSpec client and exposed as client.firearms.

Auth RequiredBuilder+

Compare the free recoil of each of up to 5 firearms firing a load. Builder. By the free recoil formula SAAMI publishes: the bullet's momentum, and the powder gas's at SAAMI's gas velocity factor for the class of firearm, over the firearm's recorded mass. The muzzle velocity is the one computed for each firearm's own barrel. The catalogue holds no powder charge: without powder_charge_g only the bullet is counted and every figure is a lower bound (recoil.lowerBound). Free recoil, not felt recoil.

recoil(params: RecoilParams): Promise<APIResponse<RecoilComparison>>
GET/v1/firearms/recoil

  • stringheaderrequired

    Your API key. Authorization: Bearer <key> is accepted in its place.

  • stringrequired

    Comma-separated firearm slugs, maximum 5.

    Example
  • string

    The load every firearm fires. Without it, each fires the load its ballistic profile uses.

    Example
  • stringdefaultloaded

    Which recorded weight the firearm recoils with: loaded or empty.

    Accepts
    Example
  • number

    The load's powder charge in grams. Needs ammo_id. Without it the figures are a lower bound.

    Range
    0 – 100
  • string

    The SAAMI class whose gas velocity factor applies, in place of the one read from each firearm's category: rifle (high powered rifles, 1.75), shotgun (shotguns (average length), 1.5), shotgun_long_barrel (shotguns (long barrel), 1.25), handgun (pistol & revolvers, 1.5).

    Accepts

  • object

    The response payload.

  • object

    The formula behind every figure in the answer.

  • string

    The method the figures were computed with.

  • string

    The method by name.

  • string

    The equation as written, with its units, so the figures can be reproduced.

  • object[]

    Where the formula and its factors are from.

  • object

    SAAMI's gas velocity factor for each class, as a multiple of the muzzle velocity.

  • object

    The shot every firearm was answered for.

  • string

    Which recorded weight was asked for.

  • number | null

    The powder charge given, in grams. Null when none was.

  • string | null

    The class given in the query. Null when each firearm's class came from its category.

  • boolean

    True when no powder charge was given, so every figure is a lower bound.

  • string[]

    The query parameters not sent, answered from their defaults.

  • object[]

    One result per firearm, in the order their ids were given.

  • object

    The firearm this result is for.

  • object | null

    The load fired: the one named by ammo_id, or the one /v1/firearms/{id}/load fires this firearm with. Null when there is none.

  • object

    The mass that recoils.

  • number | null

    The load's muzzle velocity from this firearm's barrel, in m/s.

  • object

    The powder gas term.

  • object | null

    The free recoil. Null when a figure it needs is not recorded; error says which.

  • object | null

    Against the option with the least recoil energy. Null on that option, on a lone firearm, and where no recoil was computed.

  • string[]

    What an answer assumed in place of a missing figure, or why the gas was not counted.

  • string | null

    Why this firearm could not be answered. Null when it was.

  • 400VALIDATION_ERRORValidation error
  • 401UNAUTHORIZEDAPI key required
  • 403FORBIDDENValid key, not permitted
  • 404NOT_FOUNDResource not found
  • 429RATE_LIMITEDRate limit exceeded
  • 500INTERNAL_ERRORUnexpected server error

Minimum tier
Builder+
Monthly quota
25,000/mo
Rate limit
60/min
Daily cap
5,000

Figures shown are for this endpoint's minimum tier. Higher tiers raise every limit.

This read answers conditional requests. Keep the ETag from a response and send it back as If-None-Match: an unchanged record returns 304 Not Modified with no body, which counts toward your per-minute rate limit but not your daily allowance.