GunSpec

Firearms

Browse, search, compare and retrieve detailed specifications for 8,500+ firearms, variants included.

Auth RequiredBuilder+

Returns the free recoil of each of up to 5 firearms firing a load: the velocity the firearm is pushed back at, the energy it takes and the impulse, by the free recoil formula the Sporting Arms and Ammunition Manufacturers' Institute (SAAMI) publishes.

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
2,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.