Compatibility

List attachments that fit a firearm

Every catalogued attachment that fits the firearm, grouped by category. A retailer embeds this on a product page with vendor=me&only_offered=true&with_offers=true, which answers "what fits this gun, that I stock, at what price" in one request. Full detail: each with how it fits (direct, through a named adapter, or curated), which interface satisfied it, and a confidence. include=all adds the candidates that do not fit with the reason they were blocked, which is how a builder shows a greyed-out part. Rated items (suppressors, magazines) pass a caliber, bore and minimum-barrel gate that no adapter can bridge.

Requires Studio tier or higher.

get/v1/firearms/{id}/attachments

Request

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

Path parameters

idstring required

Firearm slug

Query parameters

categorystring

Attachment category

manufacturerstring

Manufacturer slug

include'compatible' | 'all'

compatible (default) or all to include blocked candidates with blockedBy

min_confidencenumber

Hide fits computed through interfaces below this confidence

vendorstring

Restrict to one seller. me resolves to the vendor your key belongs to

only_offeredboolean

Drop anything that seller does not currently stock. Needs a resolvable vendor, and yields nothing without one

with_offersboolean

Attach each item's live offers under offers, keyed by attachment id, so price and stock render beside fitment in one call

Response

List attachments that fit a firearm

successboolean required

Always true on a successful response. Every error carries false and an error object instead.

Example response

{
  "success": true,
  "data": {
    "firearm": {
      "id": "ak-74m",
      "name": "AK-74M"
    },
    "platforms": [
      {
        "id": "ak-100",
        "name": "AK-100 series (AK-74M pattern)"
      }
    ],
    "interfaces": [
      {
        "position": "muzzle",
        "standardId": "thread:m24x1.5-rh",
        "name": "M24x1.5 right hand (AK-74, AK-100 series)",
        "kind": "thread",
        "confidence": 1
      }
    ],
    "groups": [
      {
        "category": "stock",
        "items": [
          {
            "id": "magpul-zhukov-s-stock",
            "name": "Zhukov-S Stock",
            "category": "stock",
            "manufacturer": {
              "id": "magpul",
              "name": "Magpul Industries"
            },
            "modelNumber": "MAG585",
            "weightG": 490,
            "lengthMm": 240,
            "statMods": {
              "mobility": 3,
              "recoil_control": 2
            },
            "specDeltas": {
              "folded_length_mm": 705
            },
            "imageUrl": "https://assets.gunspec.io/content/attachments/optic/aimpoint-acro-p-2/01-product.webp",
            "dataConfidence": 0.9,
            "updatedAt": "2026-09-07 12:56:03",
            "version": "e27e61b4b373f5a621d6ae5c67d521096131f2cf56300a1b2c3d4e5f6a7b8c9d",
            "provenance": {
              "sources": [
                "https://www.glock.com/en/products/pistols/g17-gen5"
              ],
              "sourceKinds": [
                {
                  "url": "https://www.glock.com/en/products/pistols/g17-gen5",
                  "kind": "manufacturer",
                  "archivedFrom": null,
                  "rank": 0,
                  "tier": "authority",
                  "basis": "declared",
                  "evidence": null
                }
              ],
              "makerSource": "https://www.glock.com/en/products/pistols/g17-gen5",
              "evidence": "maker",
              "checks": {
                "raised": 3,
                "history": [
                  {
                    "task": "verify:firearms:glock-g17-gen5",
                    "number": 1204,
                    "check": "quality:firearm-weight-fits-its-size",
                    "kind": "verify",
                    "agent": "redback",
                    "worker": "redback-046535",
                    "status": "resolved",
                    "decidedAt": "2026-09-25 07:42:39",
                    "proposed": "Read https://us.glock.com/en/pistols/g17-gen5: agrees on barrel_length, weight.",
                    "fields": [
                      "barrel_length_mm",
                      "weight_empty_g"
                    ],
                    "sources": [
                      "https://us.glock.com/en/pistols/g17-gen5"
                    ],
                    "finding": {
                      "why": "2.22 g/cm3 against a submachine-gun / carbon-steel median of 0.64; check the weight and the dimensions",
                      "evidence": {
                        "apparentDensity": 2.218,
                        "categoryMedian": 0.635
                      }
                    }
                  }
                ]
              },
              "dataConfidence": 0.95,
              "verifiedAt": "2026-09-08",
              "verifiedFields": [
                "barrel_length_mm",
                "weight_empty_g"
              ],
              "updatedAt": "2026-09-08 04:10:22",
              "version": "ba5c1d9e06c279a5"
            },
            "provides": [],
            "fits": true,
            "via": [
              {
                "position": "rear",
                "standardId": "stock:ak-100-folder"
              }
            ],
            "adapter": {
              "id": "rs-regulate-ak-303m",
              "name": "RS Regulate AK-303M"
            },
            "confidence": 1,
            "reason": "Mounts on AK-100 series polymer side-folder trunnion (rear)",
            "routes": [
              {
                "fitType": "adapter",
                "adapter": {
                  "id": "rs-regulate-ak-303m",
                  "name": "RS Regulate AK-303M"
                },
                "via": [
                  {
                    "position": "rear",
                    "standardId": "stock:ak-100-folder"
                  }
                ],
                "confidence": 1,
                "adapterConfidence": 0.95,
                "caveats": [
                  "Needs 30 mm rings, not listed here"
                ]
              }
            ],
            "caveats": []
          }
        ]
      }
    ],
    "counts": {
      "stock": 4,
      "optic": 12,
      "suppressor": 1
    },
    "total": 42
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.