Get Family Tree
Walks the parent chain upward and the variant chain downward, returning ancestors (up to 20) and descendants (up to 50) around the given firearm.
- stringheaderrequired
Your API key.
Authorization: Bearer <key>is accepted in its place.
- stringrequired
Firearm slug
- Accepts
- a lowercase slug: letters, digits and hyphens
- Example
- FamilyTree
The firearm plus its ancestor and descendant variants, walked recursively.
- FamilyMember[]
The parent chain, nearest first, up to 20 deep.
- string
URL-safe slug identifying the related firearm, e.g.
type-58. - string
Display name, as the maker writes it.
- string | null
Slug of the manufacturer that makes it. Resolve against
/v1/manufacturers/{id}. - string | null
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.
- 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. - string | null
Line-art silhouette, or null where none has been drawn.
- 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.
- FirearmRecord
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-17-gen5. Stable: it is what a mirror keys on. - string
Display name, as the maker writes it.
- FamilyMember[]
Everything derived from it, breadth-first, up to 50 rows.
- string
URL-safe slug identifying the related firearm, e.g.
type-58. - string
Display name, as the maker writes it.
- string | null
Slug of the manufacturer that makes it. Resolve against
/v1/manufacturers/{id}. - string | null
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.
- 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. - string | null
Line-art silhouette, or null where none has been drawn.
- 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.
- 400
VALIDATION_ERROR - 401
UNAUTHORIZED - 403
FORBIDDEN - 404
NOT_FOUND - 429
RATE_LIMITED - 500
INTERNAL_ERROR
Requires Builder tier or higher.
Ancestors are returned root-first (oldest ancestor at index 0).
Descendants are returned in a flat array, depth-first.
- 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.