GunSpec

Firearms

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

Auth RequiredBuilder+

Returns firearms carrying a given feature, e.g. threaded barrel. Each row names the drawn icon for every one of its features (featureIcons), so a list of matches can show the pictures without a second call per firearm.

GET/v1/firearms/by-feature

  • stringheaderrequired

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

  • stringrequired

    Feature name as stored, e.g. threaded barrel. The vocabulary is features on /v1/firearms/filter-options

    Example
  • string

    Restrict to a category slug

    Example
  • integerdefault1

    Page number, from 1 to 10,000

    Range
    1 – 10000
    Example
  • integerdefault20

    Items per page (max 100)

    Range
    1 – 100
    Example

  • object[]

    One page of results

  • string

    Slug of the firearm.

  • string

    Display name, as the maker writes it.

  • string | null

    Slug of the manufacturer that makes it. Resolve against /v1/manufacturers/{id}.

  • string | null

    Slug of the category it belongs to. Resolve against /v1/categories.

  • string[]

    Every feature this firearm carries, not only the one filtered on.

  • string | null[]

    The drawn icon each of features borrows, as its URL on the assets CDN (a WebP that loads without a key), in the same order, or null for a feature no drawing fits. Null where features is.

  • number

    Current page number

  • number

    Items per page

  • number

    Total matching records (Builder and above)

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

Requires Builder tier or higher.

Common features: suppressor_ready, ambidextrous, picatinny_rail, threaded_barrel, adjustable_stock, folding_stock, free_float_barrel, match_trigger.

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.