GunSpec

Manufacturers

Retrieve information about firearms manufacturers, their history, headquarters, and full product catalogs.

Auth RequiredExplorer+

Returns a paginated list of firearm manufacturers.

GET/v1/manufacturers

  • stringheaderrequired

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

  • integerdefault1

    Page number, from 1 to 10,000

    Range
    1 – 10000
    Example
  • integerdefault20

    Items per page (max 100)

    Range
    1 – 100
    Example
  • string

    Filter by ISO 3166-1 alpha-2 country code

    Example
  • string

    Substring match on manufacturer name

    Example

  • Manufacturer[]

    One page of results

  • string

    URL-safe slug identifying the manufacturer, e.g. glock.

  • string

    Display name, as the maker writes it.

  • string | null

    ISO 3166-1 alpha-2 code of where the company is based.

  • integer | null

    Year the company was founded.

  • string | null

    Whether the company still trades. Much of this catalog is historical, and null means nobody has established which.

  • integer | null

    Year the company ceased trading, where that is established. Null while it still trades, and also null where the closing year is simply unknown, so an absent value is never read as "still trading".

  • boolean | null

    Government owned. Null is not false: it means nobody has established it, and a consumer treating null as false would report every unchecked company as private.

  • boolean | null

    Builds the products this catalog lists, as against importing, rebranding or customising them. Scope is the catalog rather than a legal definition: air rifles are listed here as rifles and pistols, so their makers are true. Null means unestablished.

  • string | null

    The manufacturer that owns this one today.

  • string | null

    The manufacturer this one succeeded, which is not the same as being owned by it: U.S. Repeating Arms followed Winchester without Winchester owning it.

  • string | null

    Official website, where one is known.

  • string | null

    Absolute URL of the logo, or null where none is on file.

  • string | null

    Prose summary of the record, where one has been written.

  • string

    When the record was first added, YYYY-MM-DD HH:MM:SS in UTC.

  • string

    When a field we serve last changed. Maintained by the database rather than by whatever wrote the row, so it moves for a corrected specification and does not move for a re-run of the importer.

  • string | null

    Opaque fingerprint of this record. It changes when and only when a field we serve changes, so a client holding the same value already has the record and need not fetch it. Equality is the only supported operation: do not parse it, and do not assume how it is computed. Null means the record has not been written since versioning began, not that it is unchanged.

  • 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

Minimum tier
Explorer+
Monthly quota
200/mo
Rate limit
10/min
Daily cap
50

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.

Auth RequiredExplorer+

Returns a single manufacturer with its founding details and website.

GET/v1/manufacturers/{id}

  • stringheaderrequired

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

  • stringrequired

    Manufacturer slug

    Accepts
    a lowercase slug: letters, digits and hyphens
    Example

  • Manufacturer

    The response payload

  • string

    URL-safe slug identifying the manufacturer, e.g. glock.

  • string

    Display name, as the maker writes it.

  • string | null

    ISO 3166-1 alpha-2 code of where the company is based.

  • integer | null

    Year the company was founded.

  • string | null

    Whether the company still trades. Much of this catalog is historical, and null means nobody has established which.

  • integer | null

    Year the company ceased trading, where that is established. Null while it still trades, and also null where the closing year is simply unknown, so an absent value is never read as "still trading".

  • boolean | null

    Government owned. Null is not false: it means nobody has established it, and a consumer treating null as false would report every unchecked company as private.

  • boolean | null

    Builds the products this catalog lists, as against importing, rebranding or customising them. Scope is the catalog rather than a legal definition: air rifles are listed here as rifles and pistols, so their makers are true. Null means unestablished.

  • string | null

    The manufacturer that owns this one today.

  • string | null

    The manufacturer this one succeeded, which is not the same as being owned by it: U.S. Repeating Arms followed Winchester without Winchester owning it.

  • string | null

    Official website, where one is known.

  • string | null

    Absolute URL of the logo, or null where none is on file.

  • string | null

    Prose summary of the record, where one has been written.

  • string

    When the record was first added, YYYY-MM-DD HH:MM:SS in UTC.

  • string

    When a field we serve last changed. Maintained by the database rather than by whatever wrote the row, so it moves for a corrected specification and does not move for a re-run of the importer.

  • string | null

    Opaque fingerprint of this record. It changes when and only when a field we serve changes, so a client holding the same value already has the record and need not fetch it. Equality is the only supported operation: do not parse it, and do not assume how it is computed. Null means the record has not been written since versioning began, not that it is unchanged.

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

Minimum tier
Explorer+
Monthly quota
200/mo
Rate limit
10/min
Daily cap
50

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.

Auth RequiredExplorer+

Returns the firearms produced by a manufacturer.

GET/v1/manufacturers/{id}/firearms

  • stringheaderrequired

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

  • stringrequired

    Manufacturer slug

    Accepts
    a lowercase slug: letters, digits and hyphens
    Example

  • integerdefault1

    Page number, from 1 to 10,000

    Range
    1 – 10000
    Example
  • integerdefault20

    Items per page (max 100)

    Range
    1 – 100
    Example

  • ManufacturerFirearmListItem[]

    One page of results

  • string

    URL-safe slug identifying the firearm, e.g. glock-17-gen5.

  • string

    Display name, as the maker writes it.

  • string

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

  • integer | null

    Year it entered production or service. Null where the date is disputed or unknown.

  • FirearmStatus | null

    Production status, one of in_production, discontinued, out_of_production, in_service, limited_production, prototype. Discontinued records are kept deliberately: a rifle built in 2004 wears parts nobody sells today.

  • string | null

    How the action cycles: short_recoil, gas_operated, blowback, bolt_action and so on. An open vocabulary: the values in use are published on the schema as x-gunspec-vocabulary, and GET /v1/firearms/action-types is the live list.

  • string | null

    ISO 3166-1 alpha-2 code of where it was designed, e.g. AT.

  • string | null

    Line-art silhouette, or null where none has been drawn.

  • string | null

    GLB model, or null where none is on file.

  • InlineMediaItem[]

    Every image this firearm has, silhouette first. Empty when none are on file.

  • integer

    Autoincrementing image id.

  • string

    Absolute, directly fetchable URL.

  • MediaKind

    What kind of asset a media row is.

  • string | null

    Alt text, where one has been written. Null otherwise, so do not render an empty string.

  • integer | null

    Pixel width, where it is known.

  • integer | null

    Pixel height, where it is known.

  • 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
  • 404NOT_FOUNDResource not found
  • 429RATE_LIMITEDRate limit exceeded
  • 500INTERNAL_ERRORUnexpected server error

Minimum tier
Explorer+
Monthly quota
200/mo
Rate limit
10/min
Daily cap
50

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

Auth RequiredStudio+

Returns the manufacturer catalog ordered by year of introduction, for plotting output over time.

GET/v1/manufacturers/{id}/timeline

  • stringheaderrequired

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

  • stringrequired

    Manufacturer slug

    Accepts
    a lowercase slug: letters, digits and hyphens
    Example

  • object

    The response payload.

  • object

    Who the timeline is for.

  • string

    Slug of the manufacturer.

  • string

    Display name, as the maker writes it.

  • object[]

    One entry per year they introduced something, oldest first.

  • integer | null

    Year of introduction. Null groups the firearms whose year is unrecorded.

  • object[]

    The firearms they introduced that year.

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

Requires Studio tier or higher.

Timeline entries are sorted chronologically by year.

Firearms without a known year_introduced are omitted from the timeline.

Minimum tier
Studio+
Monthly quota
150,000/mo
Rate limit
120/min
Daily cap
10,000

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

Auth RequiredBuilder+

Returns aggregate figures for one manufacturer: how many firearms, which categories and calibers they span, and the range of years covered.

GET/v1/manufacturers/{id}/stats

  • stringheaderrequired

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

  • stringrequired

    Manufacturer slug

    Accepts
    a lowercase slug: letters, digits and hyphens
    Example

  • object

    The response payload.

  • object

    Who the figures are about.

  • string

    Slug of the manufacturer.

  • string

    Display name, as the maker writes it.

  • object

    The aggregate figures. snake_case, as the rollup query names them.

  • integer

    How many catalogued firearms they make.

  • number | null

    Mean unloaded weight in grams across their catalog, over the firearms that record one.

  • number | null

    Mean effective range in metres, over the firearms that record one.

  • number | null

    Mean magazine capacity, over the firearms that record one.

  • integer

    How many of their firearms are still in production.

  • integer

    How many of their firearms are discontinued.

  • integer | null

    Introduction year of their earliest catalogued firearm. Null when none records one.

  • integer | null

    Introduction year of their most recent catalogued firearm. Null when none records one.

  • object[]

    Categories they build in, most first.

  • string

    Slug of the category.

  • string

    Display name, as the maker writes it.

  • integer

    How many of their firearms are in it.

  • object

    The single cartridge most of their catalog chambers. Null where none of their firearms records a caliber.

  • string

    Slug of the cartridge.

  • string

    Display name, as the maker writes it.

  • integer

    How many of their firearms chamber it.

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

Requires Builder tier or higher.

Average values only include firearms where the relevant field is populated.

Active/discontinued status is derived from the status field on each firearm.

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.