GunSpec

Calibers

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

Auth RequiredExplorer+

List calibers with optional filters and pagination.

list(params?: ListCalibersParams): Promise<PaginatedResponse<Caliber>>
GET/v1/calibers

  • 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

    Substring match on caliber name or alias

    Max length
    200
    Example
  • string

    Filter by cartridge type

    Example
  • string

    Filter by primer type

    Example

  • Caliber[]

    One page of results

  • string

    URL-safe slug identifying the cartridge, e.g. 9x19mm-parabellum.

  • string

    Display name, as the maker writes it.

  • string | null

    JSON array of aliases

  • string | null

    NATO designation where the cartridge has one, e.g. 9mm NATO. Null otherwise.

  • number | null

    Bullet diameter in millimetres.

  • number | null

    Case neck outside diameter in millimetres.

  • number | null

    Bottleneck cases only.

  • number | null

    Case base diameter in millimetres, ahead of the extractor groove.

  • number | null

    Rim diameter in millimetres.

  • number | null

    Rim thickness in millimetres.

  • number | null

    Case length in millimetres.

  • number | null

    Overall length in millimetres, stock extended where it folds or collapses.

  • number | null

    Typical projectile length.

  • number | null

    Maximum average pressure in megapascals, as the standards body specifies it.

  • number | null

    The same pressure in pounds per square inch, converted.

  • number | null

    Representative bullet weight in grams. Divide by 0.0648 for grains.

  • number | null

    Representative muzzle velocity in metres per second.

  • number | null

    Representative muzzle energy in joules.

  • string | null

    Primer size and type, e.g. small_pistol, large_rifle, rimfire.

  • string | null

    Head type: rimmed, rimless, semi_rimmed, rebated_rim, belted, plus historical values like cap_and_ball. Not the broad class. The registry said pistol/rifle/shotgun until the column was read, and it holds neither.

  • string | null

    Case profile: straight, bottleneck, tapered, belted.

  • string | null

    What the case is made of: brass, steel, aluminium, polymer.

  • string | null

    none is a blank.

  • string | null

    Bullet shape: fmj, hollow_point, soft_point, spitzer, round_nose.

  • string | null

    What seals the case mouth; a blank is a star crimp.

  • string | null

    Paint that identifies the load: crimp lacquer on a blank, tip colour on a military round.

  • string | null

    What that colour signifies, where the marking is a standard one.

  • string | null

    The cartridge this one was derived from, or null. A wildcat and its parent case, for example.

  • integer | null

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

  • string | null

    Person or team credited with the design, where it is known.

  • string | null

    Page the dimensions were read from.

  • string | null

    The standards body whose figures these are (SAAMI, CIP), where the source names one.

  • number | null

    How completely the record is specified and how well it is sourced, 0 to 1. A record-level completeness and provenance measure, not a per-field probability of correctness. Use it to rank and triage; use sources to verify an individual number.

  • string | null

    When a person last checked this record against its source. Null means nobody has: the row is model knowledge until then.

  • string | null

    JSON array of the fields the source stated.

  • 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.

  • Provenance

    Where a record's figures came from and how far they have been checked, in one place. sources are the pages consulted; check a specific figure against those. sourceKinds says what each page is and bestSourceKind the strongest of them, on the hierarchy SourceKind defines: a maker or standards-body page is evidence for a figure, a retailer or forum page is evidence the item exists. dataConfidence is the 0 to 1 score set from what was actually sourced and never raised by hand. verifiedAt and verifiedFields say when a source was last read against the record and which fields it stated; null means the row is still seed knowledge. updatedAt and version are the same cache signals the record carries at the top level.

  • string[]

    The pages consulted when the record was compiled, as an array. Check a specific figure against these rather than against dataConfidence.

  • object[]

    What each cited page is, in sources order, on the SourceKind hierarchy. A host not in the source map is other, never guessed.

  • SourceKind | null

    The strongest kind among the citations, or null when nothing is cited. manufacturer or standards_body means a figure can be checked against an authority; retailer or community alone means the record is still supported by copies of copies.

  • number | null

    The 0 to 1 score set from what was actually sourced, never raised by hand. See the confidence bands in the docs.

  • string | null

    When a source was last read against this record. Null means the row is still seed knowledge.

  • string[]

    Which fields the source stated, as an array. Everything else on a verified row is still unverified. Null where no source has been read.

  • string | null

    Cartridges only: the page the drawing figures were taken from. Null on every other kind of record.

  • string

    When a served column last changed; the same value the record carries at the top level.

  • string | null

    The record's content version, equal to the top-level version; equal versions mean equal data.

  • 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+

Auto-paginate through all calibers matching the given filters. Returns an async iterator that fetches pages on demand, yielding individual Caliber objects.

listAutoPaging(params?: ListCalibersParams): AsyncIterableIterator<Caliber>
GET/v1/calibers

  • 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

    Substring match on caliber name or alias

    Max length
    200
    Example
  • string

    Filter by cartridge type

    Example
  • string

    Filter by primer type

    Example

  • Caliber[]

    One page of results

  • string

    URL-safe slug identifying the cartridge, e.g. 9x19mm-parabellum.

  • string

    Display name, as the maker writes it.

  • string | null

    JSON array of aliases

  • string | null

    NATO designation where the cartridge has one, e.g. 9mm NATO. Null otherwise.

  • number | null

    Bullet diameter in millimetres.

  • number | null

    Case neck outside diameter in millimetres.

  • number | null

    Bottleneck cases only.

  • number | null

    Case base diameter in millimetres, ahead of the extractor groove.

  • number | null

    Rim diameter in millimetres.

  • number | null

    Rim thickness in millimetres.

  • number | null

    Case length in millimetres.

  • number | null

    Overall length in millimetres, stock extended where it folds or collapses.

  • number | null

    Typical projectile length.

  • number | null

    Maximum average pressure in megapascals, as the standards body specifies it.

  • number | null

    The same pressure in pounds per square inch, converted.

  • number | null

    Representative bullet weight in grams. Divide by 0.0648 for grains.

  • number | null

    Representative muzzle velocity in metres per second.

  • number | null

    Representative muzzle energy in joules.

  • string | null

    Primer size and type, e.g. small_pistol, large_rifle, rimfire.

  • string | null

    Head type: rimmed, rimless, semi_rimmed, rebated_rim, belted, plus historical values like cap_and_ball. Not the broad class. The registry said pistol/rifle/shotgun until the column was read, and it holds neither.

  • string | null

    Case profile: straight, bottleneck, tapered, belted.

  • string | null

    What the case is made of: brass, steel, aluminium, polymer.

  • string | null

    none is a blank.

  • string | null

    Bullet shape: fmj, hollow_point, soft_point, spitzer, round_nose.

  • string | null

    What seals the case mouth; a blank is a star crimp.

  • string | null

    Paint that identifies the load: crimp lacquer on a blank, tip colour on a military round.

  • string | null

    What that colour signifies, where the marking is a standard one.

  • string | null

    The cartridge this one was derived from, or null. A wildcat and its parent case, for example.

  • integer | null

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

  • string | null

    Person or team credited with the design, where it is known.

  • string | null

    Page the dimensions were read from.

  • string | null

    The standards body whose figures these are (SAAMI, CIP), where the source names one.

  • number | null

    How completely the record is specified and how well it is sourced, 0 to 1. A record-level completeness and provenance measure, not a per-field probability of correctness. Use it to rank and triage; use sources to verify an individual number.

  • string | null

    When a person last checked this record against its source. Null means nobody has: the row is model knowledge until then.

  • string | null

    JSON array of the fields the source stated.

  • 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.

  • Provenance

    Where a record's figures came from and how far they have been checked, in one place. sources are the pages consulted; check a specific figure against those. sourceKinds says what each page is and bestSourceKind the strongest of them, on the hierarchy SourceKind defines: a maker or standards-body page is evidence for a figure, a retailer or forum page is evidence the item exists. dataConfidence is the 0 to 1 score set from what was actually sourced and never raised by hand. verifiedAt and verifiedFields say when a source was last read against the record and which fields it stated; null means the row is still seed knowledge. updatedAt and version are the same cache signals the record carries at the top level.

  • string[]

    The pages consulted when the record was compiled, as an array. Check a specific figure against these rather than against dataConfidence.

  • object[]

    What each cited page is, in sources order, on the SourceKind hierarchy. A host not in the source map is other, never guessed.

  • SourceKind | null

    The strongest kind among the citations, or null when nothing is cited. manufacturer or standards_body means a figure can be checked against an authority; retailer or community alone means the record is still supported by copies of copies.

  • number | null

    The 0 to 1 score set from what was actually sourced, never raised by hand. See the confidence bands in the docs.

  • string | null

    When a source was last read against this record. Null means the row is still seed knowledge.

  • string[]

    Which fields the source stated, as an array. Everything else on a verified row is still unverified. Null where no source has been read.

  • string | null

    Cartridges only: the page the drawing figures were taken from. Null on every other kind of record.

  • string

    When a served column last changed; the same value the record carries at the top level.

  • string | null

    The record's content version, equal to the top-level version; equal versions mean equal data.

  • 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

Returns an async iterator: it fetches each page as you consume it, so a loop over the whole collection is one statement and one page in memory at a time.

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 RequiredBuilder+

Compare up to 5 calibers side by side.

compare(params: CompareCalibersParams): Promise<APIResponse<Caliber[]>>
GET/v1/calibers/compare

  • stringheaderrequired

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

  • stringrequired

    Comma-separated caliber slugs, maximum 5

    Example

  • object

    The response payload.

  • Caliber[]

    The compared cartridges, in the order their ids were given.

  • string

    URL-safe slug identifying the cartridge, e.g. 9x19mm-parabellum.

  • string

    Display name, as the maker writes it.

  • string | null

    JSON array of aliases

  • string | null

    NATO designation where the cartridge has one, e.g. 9mm NATO. Null otherwise.

  • number | null

    Bullet diameter in millimetres.

  • number | null

    Case neck outside diameter in millimetres.

  • number | null

    Bottleneck cases only.

  • number | null

    Case base diameter in millimetres, ahead of the extractor groove.

  • number | null

    Rim diameter in millimetres.

  • number | null

    Rim thickness in millimetres.

  • number | null

    Case length in millimetres.

  • number | null

    Overall length in millimetres, stock extended where it folds or collapses.

  • object[]

    Per-field differences across the compared cartridges, one entry per numeric field.

  • string

    Which column the row is about, named as the database names it.

  • number | null[]

    This field on each compared cartridge, in the order the ids were given. Null where that record does not carry the field.

  • number | null

    Lowest value across the compared cartridges. Null when fewer than two carry the field.

  • number | null

    Highest value across the compared cartridges. Null when fewer than two carry the field.

  • number | null

    Spread from the lowest value, as a percentage of it. Null when the minimum is zero or fewer than two carry the field.

  • 400VALIDATION_ERRORValidation error
  • 401UNAUTHORIZEDAPI key required
  • 403FORBIDDENValid key, not permitted
  • 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.

Auth RequiredBuilder+

Get ballistics data for a caliber at a specified distance.

ballistics(params: CaliberBallisticsParams): Promise<APIResponse<BallisticsResult>>
GET/v1/calibers/ballistics

  • stringheaderrequired

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

  • stringrequired

    Caliber slug

    Max length
    255
    Example
  • integerdefault100

    Maximum distance in metres

    Range
    1 – 5000
    Example

  • object

    The response payload.

  • object

    The cartridge the profile was computed for.

  • string

    Slug of the cartridge.

  • string

    Display name, as the maker writes it.

  • integer

    The distance the figures below are quoted at, echoing the distance parameter.

  • number | null

    Muzzle velocity in metres per second, for the default load.

  • number | null

    Muzzle energy in joules, for the default load.

  • number | null

    Remaining velocity at distanceM, in metres per second.

  • number | null

    Remaining energy at distanceM, in joules.

  • number | null

    Time of flight to distanceM, in seconds.

  • number | null

    Bullet drop below the line of sight at distanceM, in centimetres.

  • 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.

Auth RequiredExplorer+

Get a single caliber by its slug or ID.

get(id: string): Promise<APIResponse<Caliber>>
GET/v1/calibers/{id}

  • stringheaderrequired

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

  • stringrequired

    Caliber slug

    Accepts
    a lowercase slug: letters, digits and hyphens
    Example

  • Caliber

    The response payload

  • string

    URL-safe slug identifying the cartridge, e.g. 9x19mm-parabellum.

  • string

    Display name, as the maker writes it.

  • string | null

    JSON array of aliases

  • string | null

    NATO designation where the cartridge has one, e.g. 9mm NATO. Null otherwise.

  • number | null

    Bullet diameter in millimetres.

  • number | null

    Case neck outside diameter in millimetres.

  • number | null

    Bottleneck cases only.

  • number | null

    Case base diameter in millimetres, ahead of the extractor groove.

  • number | null

    Rim diameter in millimetres.

  • number | null

    Rim thickness in millimetres.

  • number | null

    Case length in millimetres.

  • number | null

    Overall length in millimetres, stock extended where it folds or collapses.

  • number | null

    Typical projectile length.

  • number | null

    Maximum average pressure in megapascals, as the standards body specifies it.

  • number | null

    The same pressure in pounds per square inch, converted.

  • number | null

    Representative bullet weight in grams. Divide by 0.0648 for grains.

  • number | null

    Representative muzzle velocity in metres per second.

  • number | null

    Representative muzzle energy in joules.

  • string | null

    Primer size and type, e.g. small_pistol, large_rifle, rimfire.

  • string | null

    Head type: rimmed, rimless, semi_rimmed, rebated_rim, belted, plus historical values like cap_and_ball. Not the broad class. The registry said pistol/rifle/shotgun until the column was read, and it holds neither.

  • string | null

    Case profile: straight, bottleneck, tapered, belted.

  • string | null

    What the case is made of: brass, steel, aluminium, polymer.

  • string | null

    none is a blank.

  • string | null

    Bullet shape: fmj, hollow_point, soft_point, spitzer, round_nose.

  • string | null

    What seals the case mouth; a blank is a star crimp.

  • string | null

    Paint that identifies the load: crimp lacquer on a blank, tip colour on a military round.

  • string | null

    What that colour signifies, where the marking is a standard one.

  • string | null

    The cartridge this one was derived from, or null. A wildcat and its parent case, for example.

  • integer | null

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

  • string | null

    Person or team credited with the design, where it is known.

  • string | null

    Page the dimensions were read from.

  • string | null

    The standards body whose figures these are (SAAMI, CIP), where the source names one.

  • number | null

    How completely the record is specified and how well it is sourced, 0 to 1. A record-level completeness and provenance measure, not a per-field probability of correctness. Use it to rank and triage; use sources to verify an individual number.

  • string | null

    When a person last checked this record against its source. Null means nobody has: the row is model knowledge until then.

  • string | null

    JSON array of the fields the source stated.

  • 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.

  • Provenance

    Where a record's figures came from and how far they have been checked, in one place. sources are the pages consulted; check a specific figure against those. sourceKinds says what each page is and bestSourceKind the strongest of them, on the hierarchy SourceKind defines: a maker or standards-body page is evidence for a figure, a retailer or forum page is evidence the item exists. dataConfidence is the 0 to 1 score set from what was actually sourced and never raised by hand. verifiedAt and verifiedFields say when a source was last read against the record and which fields it stated; null means the row is still seed knowledge. updatedAt and version are the same cache signals the record carries at the top level.

  • string[]

    The pages consulted when the record was compiled, as an array. Check a specific figure against these rather than against dataConfidence.

  • object[]

    What each cited page is, in sources order, on the SourceKind hierarchy. A host not in the source map is other, never guessed.

  • SourceKind | null

    The strongest kind among the citations, or null when nothing is cited. manufacturer or standards_body means a figure can be checked against an authority; retailer or community alone means the record is still supported by copies of copies.

  • number | null

    The 0 to 1 score set from what was actually sourced, never raised by hand. See the confidence bands in the docs.

  • string | null

    When a source was last read against this record. Null means the row is still seed knowledge.

  • string[]

    Which fields the source stated, as an array. Everything else on a verified row is still unverified. Null where no source has been read.

  • string | null

    Cartridges only: the page the drawing figures were taken from. Null on every other kind of record.

  • string

    When a served column last changed; the same value the record carries at the top level.

  • string | null

    The record's content version, equal to the top-level version; equal versions mean equal data.

  • 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+

Get all firearms that use a specific caliber.

getFirearms(id: string, params?: PaginationParams): Promise<PaginatedResponse<Firearm>>
GET/v1/calibers/{id}/firearms

  • stringheaderrequired

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

  • stringrequired

    Caliber 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

  • CaliberFirearmListItem[]

    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 manufacturer that makes it. Resolve against /v1/manufacturers/{id}.

  • 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 RequiredBuilder+

Get the parent caliber chain (ancestry) for a caliber.

getParentChain(id: string): Promise<APIResponse<Caliber[]>>
GET/v1/calibers/{id}/parent-chain

  • stringheaderrequired

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

  • stringrequired

    Caliber slug

    Accepts
    a lowercase slug: letters, digits and hyphens
    Example

  • Caliber[]

    The response payload.

  • string

    URL-safe slug identifying the cartridge, e.g. 9x19mm-parabellum.

  • string

    Display name, as the maker writes it.

  • string | null

    JSON array of aliases

  • string | null

    NATO designation where the cartridge has one, e.g. 9mm NATO. Null otherwise.

  • number | null

    Bullet diameter in millimetres.

  • number | null

    Case neck outside diameter in millimetres.

  • number | null

    Bottleneck cases only.

  • number | null

    Case base diameter in millimetres, ahead of the extractor groove.

  • number | null

    Rim diameter in millimetres.

  • number | null

    Rim thickness in millimetres.

  • number | null

    Case length in millimetres.

  • number | null

    Overall length in millimetres, stock extended where it folds or collapses.

  • number | null

    Typical projectile length.

  • number | null

    Maximum average pressure in megapascals, as the standards body specifies it.

  • number | null

    The same pressure in pounds per square inch, converted.

  • number | null

    Representative bullet weight in grams. Divide by 0.0648 for grains.

  • number | null

    Representative muzzle velocity in metres per second.

  • number | null

    Representative muzzle energy in joules.

  • string | null

    Primer size and type, e.g. small_pistol, large_rifle, rimfire.

  • string | null

    Head type: rimmed, rimless, semi_rimmed, rebated_rim, belted, plus historical values like cap_and_ball. Not the broad class. The registry said pistol/rifle/shotgun until the column was read, and it holds neither.

  • string | null

    Case profile: straight, bottleneck, tapered, belted.

  • string | null

    What the case is made of: brass, steel, aluminium, polymer.

  • string | null

    none is a blank.

  • string | null

    Bullet shape: fmj, hollow_point, soft_point, spitzer, round_nose.

  • string | null

    What seals the case mouth; a blank is a star crimp.

  • string | null

    Paint that identifies the load: crimp lacquer on a blank, tip colour on a military round.

  • string | null

    What that colour signifies, where the marking is a standard one.

  • string | null

    The cartridge this one was derived from, or null. A wildcat and its parent case, for example.

  • integer | null

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

  • string | null

    Person or team credited with the design, where it is known.

  • string | null

    Page the dimensions were read from.

  • string | null

    The standards body whose figures these are (SAAMI, CIP), where the source names one.

  • number | null

    How completely the record is specified and how well it is sourced, 0 to 1. A record-level completeness and provenance measure, not a per-field probability of correctness. Use it to rank and triage; use sources to verify an individual number.

  • string | null

    When a person last checked this record against its source. Null means nobody has: the row is model knowledge until then.

  • string | null

    JSON array of the fields the source stated.

  • 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.

  • Provenance

    Where a record's figures came from and how far they have been checked, in one place. sources are the pages consulted; check a specific figure against those. sourceKinds says what each page is and bestSourceKind the strongest of them, on the hierarchy SourceKind defines: a maker or standards-body page is evidence for a figure, a retailer or forum page is evidence the item exists. dataConfidence is the 0 to 1 score set from what was actually sourced and never raised by hand. verifiedAt and verifiedFields say when a source was last read against the record and which fields it stated; null means the row is still seed knowledge. updatedAt and version are the same cache signals the record carries at the top level.

  • string[]

    The pages consulted when the record was compiled, as an array. Check a specific figure against these rather than against dataConfidence.

  • object[]

    What each cited page is, in sources order, on the SourceKind hierarchy. A host not in the source map is other, never guessed.

  • SourceKind | null

    The strongest kind among the citations, or null when nothing is cited. manufacturer or standards_body means a figure can be checked against an authority; retailer or community alone means the record is still supported by copies of copies.

  • number | null

    The 0 to 1 score set from what was actually sourced, never raised by hand. See the confidence bands in the docs.

  • string | null

    When a source was last read against this record. Null means the row is still seed knowledge.

  • string[]

    Which fields the source stated, as an array. Everything else on a verified row is still unverified. Null where no source has been read.

  • string | null

    Cartridges only: the page the drawing figures were taken from. Null on every other kind of record.

  • string

    When a served column last changed; the same value the record carries at the top level.

  • string | null

    The record's content version, equal to the top-level version; equal versions mean equal data.

  • 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.

Auth RequiredBuilder+

Get the full family tree of related calibers.

getFamily(id: string): Promise<APIResponse<CaliberFamily>>
GET/v1/calibers/{id}/family

  • stringheaderrequired

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

  • stringrequired

    Caliber slug

    Accepts
    a lowercase slug: letters, digits and hyphens
    Example

  • object

    The response payload.

  • Caliber[]

    The parent chain, nearest first, up to 20 deep.

  • string

    URL-safe slug identifying the cartridge, e.g. 9x19mm-parabellum.

  • string

    Display name, as the maker writes it.

  • string | null

    JSON array of aliases

  • string | null

    NATO designation where the cartridge has one, e.g. 9mm NATO. Null otherwise.

  • number | null

    Bullet diameter in millimetres.

  • number | null

    Case neck outside diameter in millimetres.

  • number | null

    Bottleneck cases only.

  • number | null

    Case base diameter in millimetres, ahead of the extractor groove.

  • number | null

    Rim diameter in millimetres.

  • number | null

    Rim thickness in millimetres.

  • number | null

    Case length in millimetres.

  • number | null

    Overall length in millimetres, stock extended where it folds or collapses.

  • Caliber
  • string

    URL-safe slug identifying the cartridge, e.g. 9x19mm-parabellum.

  • string

    Display name, as the maker writes it.

  • string | null

    JSON array of aliases

  • string | null

    NATO designation where the cartridge has one, e.g. 9mm NATO. Null otherwise.

  • number | null

    Bullet diameter in millimetres.

  • number | null

    Case neck outside diameter in millimetres.

  • number | null

    Bottleneck cases only.

  • number | null

    Case base diameter in millimetres, ahead of the extractor groove.

  • number | null

    Rim diameter in millimetres.

  • number | null

    Rim thickness in millimetres.

  • number | null

    Case length in millimetres.

  • number | null

    Overall length in millimetres, stock extended where it folds or collapses.

  • Caliber[]

    Every cartridge derived from this one, up to 50 rows.

  • string

    URL-safe slug identifying the cartridge, e.g. 9x19mm-parabellum.

  • string

    Display name, as the maker writes it.

  • string | null

    JSON array of aliases

  • string | null

    NATO designation where the cartridge has one, e.g. 9mm NATO. Null otherwise.

  • number | null

    Bullet diameter in millimetres.

  • number | null

    Case neck outside diameter in millimetres.

  • number | null

    Bottleneck cases only.

  • number | null

    Case base diameter in millimetres, ahead of the extractor groove.

  • number | null

    Rim diameter in millimetres.

  • number | null

    Rim thickness in millimetres.

  • number | null

    Case length in millimetres.

  • number | null

    Overall length in millimetres, stock extended where it folds or collapses.

  • 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.

Auth RequiredBuilder+

Get ammunition loads available for a caliber.

getAmmunition(id: string, params?: PaginationParams): Promise<PaginatedResponse<Ammunition>>
GET/v1/calibers/{id}/ammunition

  • stringheaderrequired

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

  • stringrequired

    Caliber 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

  • AmmunitionLoad[]

    A specific factory ammunition load within a caliber.

  • string

    URL-safe slug identifying the load, e.g. 9mm-124gr-fmj.

  • string

    Slug of the cartridge. Resolve against /v1/calibers/{id}.

  • string

    Display name, as the maker writes it.

  • string | null

    Military or standards designation for the load, e.g. M882.

  • string | null

    Who makes it.

  • string | null

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

  • number

    Bullet weight in grams. Divide by 0.0648 for grains.

  • string

    Bullet construction: fmj, jhp, sp, match.

  • number | null

    Ballistic coefficient against the G1 drag model, the convention for flat-based bullets.

  • number | null

    Ballistic coefficient against the G7 drag model, which fits boat-tail rifle bullets better than G1.

  • number

    Muzzle velocity in metres per second at the reference barrel length below, not at the barrel of any particular firearm.

  • number

    Barrel length in millimetres the reference velocity was measured from. Velocity for another barrel is extrapolated from this pair.

  • number | null

    Bullet mass divided by the square of its diameter. Higher penetrates better, all else equal.

  • integer | null

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

  • integer

    1 when the load is commonly stocked.

  • string | null

    Absolute URL of the rendered bullet diagram.

  • number | null

    Decay exponent used when extrapolating velocity to a barrel length other than the reference one.

  • string | null

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

  • integer

    1 when the load is a military issue round.

  • string

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

  • string

    When a field we serve last changed, YYYY-MM-DD HH:MM:SS in UTC.

  • 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
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.