---
title: "Get a firearm's mount interfaces"
method: GET
path: "/v1/firearms/{id}/interfaces"
tags: ["Compatibility"]
---

# Get a firearm's mount interfaces

`GET /v1/firearms/{id}/interfaces`

## Request

- Base URL: `https://api.gunspec.io`
- URL: `https://api.gunspec.io/v1/firearms/{id}/interfaces`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

The mount points a firearm exposes (muzzle thread, rails, optic cut, stock and grip interfaces, magazine well), resolved from its own rows, its parent chain and its platforms. Each row carries where it came from and a confidence, so an inferred claim is never mistaken for a verified one. This is what a builder UI draws its slot panel from.

**Requires Studio tier or higher.**

## Path parameters

- `id` string, required

## Response `200`

Get a firearm's mount interfaces

- object
  - `success` boolean, required: Always true on a successful response. Every error carries `false` and an `error` object instead.
  - `data` object, required: The response payload.
    - `firearm` object: A firearm, identified by slug and name.
      - `id` string: Slug of the firearm.
      - `name` string: Display name, as the maker writes it.
    - `platforms` object[]: Platforms this firearm belongs to, whose interfaces it inherits. Reached through its own memberships and its parent chain.
      - `id` string: Slug of the platform.
      - `name` string: Display name, as the maker writes it.
    - `interfaces` ResolvedInterface[]: The mount interfaces resolved for this firearm, own rows first, then inherited.
      - `position` string: Where on the firearm the interface sits: `muzzle`, `rear`, `top`, `bottom`.
      - `standardId` string: Id of the interface standard, kind-prefixed, e.g. `thread:1/2x28`. Ids are never renamed; new spellings become aliases.
      - `name` string: Display name, as the maker writes it.
      - `kind` string: What sort of interface it is: `thread`, `rail`, `mag`, `stock_mount`, `optic_plate`. Not a media kind: the shared registry filled this with `silhouette`/`render` until the consistency check caught it.
      - `source` 'curated' | 'inferred' | 'inherited:parent' | 'inherited:platform': Where an interface row on a firearm came from. `curated` is a person; `inferred` is the backfill, capped at 0.6 confidence; the inherited kinds came through the parent chain or a platform.
      - `confidence` number: How well evidenced this row is, 0 to 1. **A minimum, not an average**: an inferred row caps every fit computed through it, and `min_confidence` on the endpoint hides rows below a threshold.
      - `inheritedFrom` string, nullable: The parent firearm or platform this interface came from, or null when the firearm declares it itself.
      - `notes` string, nullable: Free-text notes that do not belong in a specific field.

## Other responses

- `400`: Validation error
- `401`: Missing or invalid API key
- `403`: The credential is valid and the caller is not permitted. Three causes, none of which reissuing a key changes: the plan is below the endpoint's tier, the account is suspended, or the key is not attached to the thing being acted on, meaning a user account for `/v1/me` or a shop for `/v1/vendor`. Distinct from 401, which means the credential is missing, malformed or expired and a new one can work.
- `404`: Resource not found
- `429`: A limit was reached. `RATE_LIMITED` is the per-minute limit: wait `Retry-After` seconds (a minute) and retry. `DAILY_CAP_EXCEEDED` is the plan's daily limit, per key: nothing will be served until the counters return to zero at midnight UTC. `MONTHLY_CAP_EXCEEDED` is the plan's monthly allowance, for the whole account: nothing will be served until midnight UTC on the first of next month, or until the plan changes. For both, `Retry-After` is the seconds until then and `error.resetsAt` says when as an instant. Calls made after a refusal are refused too and do not spend the month, and a free key that keeps calling is paused, so stop at the first one and resume at the reset.
- `500`: Internal server error

---

[API](https://skmtc.dev/gunspec/apis/gunspec-io-api.md) · [All operations](https://skmtc.dev/gunspec/apis/gunspec-io-api/llms.txt) · [OpenAPI document](https://skmtc.dev/gunspec/apis/gunspec-io-api/revisions/f2e974d8b05c?raw)
