GunSpec

Firearms

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

Authentifizierung erforderlichBuilder+

Get a single firearm by its slug or ID.

get(id: string): Promise<APIResponse<FirearmDetail>>
GET/v1/firearms/{id}

  • stringHeadererforderlich

    Ihr API-Schlüssel. Authorization: Bearer <key> wird ebenfalls akzeptiert.

  • stringerforderlich

    Resource slug ID

    Akzeptiert
    a lowercase slug: letters, digits and hyphens
    Beispiel

  • FirearmDetail

    A firearm as stored: every specification column we serve, with no nested relations. FirearmDetail is this plus them, and /v1/firearms/{id}/family-tree returns this shape for current, since the walk reads the row and does not load the relations.

  • integer

    Integer flag, 1 when 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-17-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.updated webhooks and /v1/firearms/{id}/variants follow.

  • string | null

    How this record differs from its parent: optics_ready, compact, threaded and 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_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

    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 | null

    JSON array of safety mechanisms

  • string | null

    JSON array of features

  • string | null

    JSON array of feed systems

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

    JSON array of alternate names/designations

  • string | null

    JSON array of firing modes

  • string | null

    JSON array of conflict objects with name, years, and sides

  • string | null

    JSON object with estimated_total, production_years, and notes

  • string | null

    Historical trivia / game-dev flavor text

  • string | null

    JSON array of source URLs the record was compiled from. Check a specific figure against these rather than against dataConfidence.

  • 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

    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.

  • 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, 1 on 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 like cap_and_ball. Not the broad class. The registry said pistol/rifle/shotgun until 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: cdn for a static path, r2 for 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.

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

Mindeststufe
Builder+
Monatskontingent
25,000/mo
Anfragerate
60/min
Tageslimit
2,000

Die Werte gelten für die Mindeststufe dieses Endpunkts. Höhere Stufen erhöhen alle Limits.

Dieser Aufruf beantwortet bedingte Anfragen. Speichern Sie das ETag einer Antwort und senden Sie es als If-None-Match zurueck: ein unveraenderter Datensatz liefert 304 Not Modified ohne Body. Das zaehlt auf Ihr Minutenlimit, aber nicht auf Ihr Tageskontingent.