Get an attachment
One attachment with its requirement groups (any of the standards within a group, every group across groups), what it provides once fitted, its caliber ratings and its stat and spec effects.
- stringheaderrequired
Your API key.
Authorization: Bearer <key>is accepted in its place.
- stringrequired
Attachment slug
- Accepts
- a lowercase slug: letters, digits and hyphens
- Example
- AttachmentDetail
The response payload
- string
URL-safe slug identifying the part, e.g.
magpul-zhukov-s-stock. - string
Display name, as the maker writes it.
- string
What kind of part it is:
stock,optic,muzzle,magazine,grip. - ManufacturerRef | null
Who makes it.
- string | null
The maker's own SKU, where they publish one.
- number | null
Weight in grams.
- number | null
Length in millimetres.
- integer | null
Magazines only
- number | null
Suppressors and muzzle devices
- string | null
The mount position this part occupies, or null when it takes none.
- boolean
True when the part ships on the firearm from the factory. A factory part carries no
statModsorspecDeltas, because the firearm's own figures already include it. - string | null
The firearm this is the factory part for, when
isFactoryPartis true. - object
Editorial adjustments to the game statistics once fitted, keyed by stat. Same status as
game_*on a firearm: not measured. - object
Specification changes once fitted, keyed by field: a folding stock changes the folded length, for example.
- string | null
Absolute URL of the manufacturer product photo on the assets CDN, ready to render. Null when no photo has been sourced yet.
- AttachmentStatus
Production status of an attachment.
limitedcorresponds to a firearm'slimited_production. - 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 a field we serve last changed.
- 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.
- string | null
Prose summary of the record, where one has been written.
- object
Category-specific facts
- string[]
JSON array of the pages the figures were taken from, as a string.
- string | null
Page the asset or document was taken from.
- 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. - 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. - integer | null
Year it entered production or service. Null where the date is disputed or unknown.
- StandardRef[][]
Requirement groups. One standard from each group must be present on the firearm. Empty means universal fit.
- StandardRef[]
Standards this adds to the firearm once fitted, resolved to
{ id, name, kind }. - string
Kind-prefixed standard id.
- string
Display name, as the maker writes it.
- string
What sort of interface it is.
- object[]
What this part is rated for, where being rated matters, meaning suppressors and magazines. The caliber, bore and minimum-barrel gate is checked against these and is never bridged or inferred.
- string
Slug of the cartridge. Resolve against
/v1/calibers/{id}. - string | null
Display name of the cartridge.
- number | null
Shortest barrel in millimetres this part is rated for in that cartridge. Null where the maker states none.
- boolean
Whether the maker rates it for automatic fire in that cartridge.
- string | null
Free-text notes that do not belong in a specific field.
- integer
Number of firearms with a curated override for this attachment
- string
When the record was first added,
YYYY-MM-DD HH:MM:SSin UTC.
- 400
VALIDATION_ERROR - 401
UNAUTHORIZED - 403
FORBIDDEN - 404
NOT_FOUND - 429
RATE_LIMITED - 500
INTERNAL_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.