Skip to content

3. Catalog ​

The products your account can order, with your price and the states each can ship to.

Read first: Catalog and availability.

Base URL https://api.axiomscript.com. Every request is signed; see Authentication and signing.

The SKUs this partner can order, with their resolved prices ​

GET/api/inbound/{partnerSlug}/catalog

Every active product you are set up to order, each with the clinic price YOUR partner account resolves to. A SKU you are not priced for is omitted rather than returned at zero. An item is orderable when unavailableUntil is null AND backordered is false; a backordered item is refused product_backordered, and an item carrying a future unavailableUntil is an upcoming launch, refused product_not_yet_available until then. availableStates lists the states the account-level ship-state rules allow; routing rules held for one particular clinic are not reflected, so POST /orders/check is the final word for a given clinic.

Parameters ​

partnerSlugstringpathrequired

The partner's Axiom-issued slug (e.g. acme-health).

Responses ​

StatusMeaning
200The partner's orderable catalog
401Missing, expired, or invalid HMAC signature / timestamp
403production_not_enabled. You signed with a production key, but Axiom has not yet flipped the production gate on your partner account. Holding a production key is deliberately not enough to place live orders. Contact Axiom to enable it.
423partner_inactive or tenant_suspended. Your partner account is deactivated or suspended, so no request will be served until it is reinstated.
429Per-partner rate limit exceeded

Response fields (200) ​

oktruerequired

 

catalogarray of objectrequired

 

catalog[].skustringrequired

 

catalog[].aliasesarray of stringoptional

Alternate SKU strings this partner may also send for this product on an order. sku is the canonical one and always works; these are accepted as well, case-insensitively. Usually empty. A product we rename keeps its old string here so orders already in flight do not start failing.

catalog[].namestring | nulloptional

 

catalog[].strengthstring | nulloptional

 

catalog[].formFactorstringrequired

Free text from the catalog, for example Vial, Pen, Cartridge, Nasal Spray, Capsule, Tablet or Supply. Do not rely on a fixed list or on letter case.

catalog[].imageUrlstring | nulloptional

 

catalog[].unavailableUntilstring (date-time) | nulloptional

When set, the SKU is an upcoming launch: order create rejects it with product_not_yet_available until this instant. Null means no launch hold (the item can still be backordered).

catalog[].backorderedbooleanoptional

Out of stock right now. Order create rejects this SKU with product_backordered. Separate from unavailableUntil: that one is a launch hold that ends on a date, this one has no end date and only a person clears it. Both can apply at once.

catalog[].expectedBackAtstring (date-time) | nulloptional

A SUGGESTED return date, present only when the SKU is backordered and we have an estimate. INFORMATIONAL ONLY: the SKU does not become orderable when this passes. Do not schedule a retry on it and assume the order will succeed.

catalog[].clinicPriceCentsintegerrequired

What the clinic is charged for one unit, in cents, for YOUR partner account.

catalog[].pricingSourcestringrequired

Which tier or override the price resolved from.

catalog[].availableStatesarray of stringoptional

The two-letter state codes this SKU can ship to for YOUR account today, sorted: the states to offer. Territories appear when we can ship there. An empty list means no state qualifies at account level right now. It changes as pharmacies are licensed and as state restrictions are added or lifted, so read it fresh rather than caching it for days. Routing rules we hold for a single clinic are not reflected here, because this list is for your whole account, and such a rule can narrow or widen what that clinic can order. POST /orders/check with the clinic is the final word for a given clinic and state.

retiredarray of objectrequired

SKUs you could order that have been RETIRED for good, for 90 days after the retirement. A separate list on purpose: nothing in it can be ordered (an order for one is refused 422 product_retired), and a SKU is never in both lists. Only a SKU your account was entitled to when it was retired appears here. Always present; [] when there are none. No replacement is named.

retired[].skustringrequired

 

retired[].retiredAtstring (date-time)required

 

Request

http
GET /api/inbound/acme-health/catalog
Host: api.axiomscript.com
X-Axiom-Timestamp: 1767225600
X-Axiom-Signature: sha256=<hex>

Response 200

json
{
  "ok": true,
  "catalog": [
    {
      "sku": "EXAMPLE-SKU-1",
      "name": "Example Product",
      "strength": "10mg",
      "formFactor": "vial",
      "imageUrl": null,
      "unavailableUntil": null,
      "backordered": false,
      "expectedBackAt": null,
      "aliases": [],
      "clinicPriceCents": 17000,
      "pricingSource": "attribution_lane",
      "availableStates": [
        "TX"
      ]
    }
  ],
  "retired": []
}