client.firearms.get()
Get a single firearm by its slug or ID.
get(id: string): Promise<APIResponse<FirearmDetail>>- stringheaderrequired
Your API key.
Authorization: Bearer <key>is accepted in its place.
- stringrequired
Resource slug ID
- Accepts
- a lowercase slug: letters, digits and hyphens
- Example
The example asks for glock-g17-gen5. See that record on gunspec.io, rendered for people.
- FirearmDetail
A firearm as stored: every specification column we serve, with no nested relations.
FirearmDetailis this plus them, and/v1/firearms/{id}/family-treereturns this shape forcurrent, since the walk reads the row and does not load the relations. - integer
Integer flag,
1when a 3D model is on file. Stored as the database holds it rather than as a boolean. - string | null
Line-art silhouette, or null where none has been drawn.
- string | null
GLB model, or null where none is on file.
- string | null
The ammunition load ballistics figures are quoted against, where one is nominated.
- number | null
Muzzle velocity in metres per second exactly as the source stated it, kept beside our own figure so a reader can see what was quoted and what was derived.
- number | null
Muzzle energy in joules exactly as the source stated it.
- number | null
Effective range in metres exactly as the source stated it.
- number | null
Maximum range in metres exactly as the source stated it.
- string | null
Where the ballistics figures came from, named in prose.
- string | null
URL of the ballistics source, where it is a page rather than a book.
- string
URL-safe slug identifying the firearm, e.g.
glock-g17-gen5. Stable: it is what a mirror keys on. - 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. - string | null
The firearm this one is a variant of, or null when it is not a variant. Variant relationships are what
firearm.variant.updatedwebhooks and/v1/firearms/{id}/variantsfollow. - string | null
How this record differs from its parent:
optics_ready,compact,threadedand so on. Null when the record has no parent. - integer | null
Year it entered production or service. Null where the date is disputed or unknown.
- integer | null
Year production ended, or null while it is still made.
- 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
ISO 3166-1 alpha-2 code of where it was designed, e.g.
AT. - number | null
Unloaded weight in grams, without magazine.
- number | null
Loaded weight in grams, with a full magazine.
- number | null
Overall length in millimetres, stock extended where it folds or collapses.
- number | null
Barrel length in millimetres, measured from the breech face.
- number | null
Height in millimetres, including sights and a fitted magazine.
- number | null
Width in millimetres at the widest point.
- number | null
Distance between front and rear iron sights in millimetres. Null on a record with no iron sights.
- string | null
How the action cycles:
short_recoil,gas_operated,blowback,bolt_actionand so on. An open vocabulary: the values in use are published on the schema asx-gunspec-vocabulary, andGET /v1/firearms/action-typesis the live list. - string | null
What releases the striker or hammer:
striker_fired,hammer_fired. - string | null
Trigger arrangement:
single_action,double_action,safe_action. - number | null
Trigger pull weight in newtons. Divide by 4.448 for pounds-force.
- integer | null
Rounds in the standard magazine. Null where the firearm is not magazine-fed.
- string | null
Magazine pattern:
detachable_box,internal,drum,belt. - number | null
Muzzle velocity in metres per second, for the default load.
- number | null
Muzzle energy in joules, for the default load.
- number | null
Effective range in metres against a point target.
- number | null
Maximum range in metres. Where the projectile lands, not where it is useful.
- integer | null
Cyclic rate in rounds per minute. Null on anything that is not automatic.
- string | null
Rifling description, e.g.
6 grooves, right-hand twist. - number | null
Rifling twist rate in millimetres per turn. Divide by 25.4 for inches.
- integer | null
Number of grooves cut in the bore.
- string | null
What the frame or receiver is made of.
- string | null
What the slide is made of. Null on anything without one.
- string | null
What the barrel is made of.
- string | null
What the stock or furniture is made of.
- string | null
Surface finish, e.g.
nitride,parkerized,cerakote. - string[]
Safety mechanisms the design carries.
- string[]
Notable features of the design.
- string[]
How the firearm is fed.
- integer | null
Editorial game statistic, 0-100. Not a measured figure. These are balance numbers for game use and are not derived from the ballistics above.
- integer | null
Editorial game statistic, 0-100. Not a measured figure.
- integer | null
Editorial game statistic, 0-100. Not a measured figure.
- integer | null
Editorial game statistic, 0-100. Not a measured figure.
- integer | null
Editorial game statistic, 0-100. Not a measured figure.
- integer | null
Editorial game statistic, 0-100. Not a measured figure.
- integer | null
Editorial game statistic, 0-100. Not a measured figure.
- integer | null
Editorial game statistic, 0-100. Not a measured figure.
- string | null
Prose summary of the record, where one has been written.
- string | null
Free-text notes that do not belong in a specific field.
- string | null
Person or team credited with the design, where it is known.
- number | null
Length with stock folded (mm)
- string[]
Other names and designations the same firearm is known by.
- string[]
Firing modes the selector offers.
- object[]
Conflicts the firearm saw service in.
- string
The conflict.
- string
When it ran, as written.
- string[]
The belligerents.
- object | null
How many were made, and over what period.
- integer | null
Units believed produced.
- string | null
The production run, as written.
- string | null
What the estimate covers.
- string | null
Historical trivia / game-dev flavor text
- string[]
Source URLs the record was compiled from. Check a specific figure against these rather than against
dataConfidence. The same list is inprovenance.sources. - string | null
When a source was last read against the record's figures. Null until one has been. The same value is in
provenance.verifiedAt. - string[]
The figures a source confirmed: read off the manufacturer's own page, within the published tolerance, and accepted by a person. The same list is in
provenance.verifiedFields. - 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
sourcesto verify an individual number. - string
When the record was first added,
YYYY-MM-DD HH:MM:SSin 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.
sourcesare the pages consulted; check a specific figure against those.sourceKindssays what each page is andbestSourceKindthe strongest of them, on the hierarchySourceKinddefines: a maker or standards-body page is evidence for a figure, a retailer or forum page is evidence the item exists.dataConfidenceis the 0 to 1 score set from what was actually sourced and never raised by hand.verifiedAtandverifiedFieldssay when a source was last read against the record and which fields it stated; null means the row is still seed knowledge.updatedAtandversionare 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
sourcesorder, on theSourceKindhierarchy. A host not in the source map isother, never guessed. - SourceKind | null
The strongest kind among the citations, or null when nothing is cited.
manufacturerorstandards_bodymeans a figure can be checked against an authority;retailerorcommunityalone means the record is still supported by copies of copies. - string | null
The first cited page on the record's own manufacturer's website, or null when it cites none. A page on another maker's site does not count. Cited from the maker is not the same as checked against it:
verifiedFieldsnames the figures that were read against a source. - string
How far the record's figures are backed, strongest first, for a badge:
verifiedwhen at least one figure was read against a source (verifiedFields),makerwhen it cites a page on its own manufacturer's site (makerSource),authoritywhen it cites a maker, standards body or government page,secondarywhen it cites only press, retailers, references or forums,nonewhen it cites nothing. Derived from the fields beside it. - object
The checks the record has been through, on a single record's response only: every task the data agent (Redback) or a person was given about it, what each proposed, the pages it read, and whether a person accepted it. Nothing an agent proposes reaches the record until a person accepts it, so this is the trail behind
verifiedFields. Who reviewed is not published; an agent's instance name is. - 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. - Manufacturer | null
Null when the record names a manufacturer id the catalog no longer holds.
- Category | null
Null when the record names a category id the catalog no longer holds.
- FirearmCaliber[]
Every cartridge this firearm is chambered for, primary first.
- string
Slug of the cartridge. Resolve against
/v1/calibers/{id}. - integer
Integer flag,
1on the chambering the firearm is normally sold in. A firearm may be chambered for several cartridges but has at most one primary. - string
Display name, as the maker writes it.
- string | null
NATO designation where the cartridge has one, e.g.
9mm NATO. Null otherwise. - number | null
Bullet diameter in millimetres.
- number | null
Case length in millimetres.
- string | null
Head type:
rimmed,rimless,semi_rimmed,rebated_rim,belted, plus historical values likecap_and_ball. Not the broad class. The registry saidpistol/rifle/shotgununtil the column was read, and it holds neither. - 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.
- FirearmImage[]
Every image on file, silhouette first. Each carries an absolute, directly fetchable
url. - integer
Autoincrementing image id. Numeric, unlike the catalog slugs.
- string
Slug of the firearm this row belongs to.
- string
Absolute, directly fetchable URL.
- ImageType | null
Role of the image:
primary,gallery,thumbnail,svg,render. - string | null
Where the record came from: a curated entry, an inference, or an import.
- string | null
Licence the asset is held under, where one is recorded.
- MediaKind | null
What the asset is:
silhouette,render,photo,schematic,model./v1/firearms/{id}/media/{selector}addresses an asset by this. - string | null
Where the bytes live:
cdnfor a static path,r2for an upload we serve. - string | null
Who made the asset, where it is credited.
- string | null
Page the asset or document was taken from.
- 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.
- FirearmUser[]
Forces and agencies that have adopted it.
- integer
Autoincrementing row id.
- string
Slug of the firearm this row belongs to.
- string
The force, agency or organisation that adopted it.
- string | null
What kind of user:
military,police,civilian. - string | null
ISO 3166-1 alpha-2 code of the user's country.
- integer | null
Year of adoption, where it is known.
- string | null
What that user calls it, where it differs from the maker's name.
- FirearmSchematic[]
Exploded-view and parts diagrams on file, empty where none have been sourced.
- integer
Autoincrementing schematic id.
- string
Slug of the firearm this row belongs to.
- string
What the document is called.
- SchematicType
What a schematic document is.
- string
Absolute, directly fetchable URL.
- string | null
File format, e.g.
pdf. - string | null
Revision of the document, where the publisher versions it.
- string | null
Publisher of the document, often but not always the maker.
- string | null
Where the document came from.
- string | null
Page the asset or document was taken from.
- string | null
Who made the asset, where it is credited.
- string | null
Licence the asset is held under, where one is recorded.
- 400
VALIDATION_ERROR - 401
UNAUTHORIZED - 403
FORBIDDEN - 404
NOT_FOUND - 429
RATE_LIMITED - 500
INTERNAL_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.