GunSpec

Vendor

Vendor (seller) resource for the GunSpec SDK. Wraps /v1/vendor/* and the outbound click route. A seller holds an Enterprise plan and names one of their ordinary keys in Profile > Seller; that mapping is the whole vendor scope, so there is no separate credential to configure here. A key no shop names answers 403 KEY_NOT_LINKED_TO_SHOP. A feed reads before it writes: shops() tells a script which ids it can act for, listOffers() returns what the API holds, and updateOffer() changes one field without resending the rest.

Auth RequiredEnterprise

Your listings as the API holds them, stockQty and click counts included.

listOffers(params?: ListVendorOffersParams): Promise<PaginatedResponse<VendorOffer>>
GET/v1/vendor/offers

  • stringheaderrequired

    Your API key. Authorization: Bearer <key> is accepted in its place.

  • string

    Which of your shops to act for. Required only when one key is named by more than one shop; GET /v1/vendor/shops lists them

    Max length
    64
    Example
  • string

    Only parts or only firearms

    Accepts
    Max length
    40
  • string

    Only drafts or only published rows

    Accepts
  • string

    Match on your SKU or the product name

    Max length
    120
    Example
  • integerdefault1

    Page number, from 1 to 10,000

    Range
    1 – 10000
    Example
  • integerdefault20

    Items per page (max 100)

    Range
    1 – 100
    Example

  • object[]

    One page of results

  • string

    The shop's own catalogue key for the listing. A seller's identifier, not ours: it is what PATCH /v1/vendor/offers/{sku} addresses.

  • OfferTargetKind

    What a seller listing is for.

  • string

    Slug of the catalogued record the listing points at, in whichever catalog targetKind names.

  • integer

    Price in integer minor units of currency, so cents for AUD. Never a float. Format with Intl.NumberFormat at render rather than dividing first.

  • string

    ISO 4217 code the price is in, e.g. AUD. Prices are integer minor units; format with Intl.NumberFormat at render rather than dividing first.

  • string

    Absolute, directly fetchable URL.

  • boolean

    Whether the shop reports it in stock. Derived from stockQty where the shop tracks a count.

  • integer | null

    Units you hold: 0 is out of stock, null is not tracked. Private to the shop, and never returned by a public offers endpoint.

  • OfferStatus

    Whether a seller listing is public.

  • string

    Where the record came from: a curated entry, an inference, or an import.

  • integer

    Outbound clicks this listing earned over the last 30 days.

  • string

    When a field we serve last changed.

  • number

    Current page number

  • number

    Items per page

  • number

    Total matching records (Builder and above)

  • 400VALIDATION_ERRORValidation error
  • 401UNAUTHORIZEDAPI key required
  • 403FORBIDDENValid key, not permitted
  • 429RATE_LIMITEDRate limit exceeded
  • 500INTERNAL_ERRORUnexpected server error

Minimum tier
Enterprise
Monthly quota
1,000,000/mo
Rate limit
300/min
Daily cap
50,000

Figures shown are for this endpoint's minimum tier. Higher tiers raise every limit.