client.attachments.list()
List attachments. fits and only_offered change what the list means: the first runs the fit engine, the second restricts to one seller's stock.
list(params?: ListAttachmentsParams): Promise<PaginatedResponse<Attachment>>- stringheaderrequired
Your API key.
Authorization: Bearer <key>is accepted in its place.
- integerdefault
1Page number, from 1 to 10,000
- Range
- 1 – 10000
- Example
- integerdefault
20Items per page (max 100)
- Range
- 1 – 100
- Example
- string
Attachment category
- Max length
- 100
- Example
- string
Manufacturer slug
- Max length
- 100
- Example
- string
Only attachments that fit this firearm
- Max length
- 100
- Example
- string
Only attachments requiring this interface standard
- Max length
- 80
- Example
- string
Substring match on name
- Max length
- 60
- Example
- boolean
Only factory parts (
true) or only aftermarket (false) - string
Production status. The catalog keeps discontinued parts on purpose, so a store front asks for
in_production- Accepts
- Example
- string
Restrict to one seller.
meresolves to the vendor your key belongs to- Max length
- 64
- Example
- boolean
Drop anything that seller does not currently stock. Needs a resolvable
vendor, and yields nothing without one
- Attachment[]
One page of results
- 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. 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.
- string[]
Standard ids this adds to the firearm once fitted. Resolved to
{ id, name, kind }rows on/v1/attachments/{id}. - number
Current page number
- number
Items per page
- number
Total matching records (Builder and above)
- 400
VALIDATION_ERROR - 401
UNAUTHORIZED - 403
FORBIDDEN - 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.