GET /v1/account/brands/{brand_id}/offerings lists every offering enabled for your brand. It
returns what a storefront needs to show and link each one: its name, its sku_id, its therapy,
its entry mode, its checkout link, the price shown for it, and whether it can be sold yet. Build
your catalog from this list. Your welcome pack may still print the same facts, but this read is
where they live, and it stays current as offerings are added.
Call it from your server
This read takes your secret API key, so call it from your server, never from browser code. The publishable brand key is refused here: this read is not one of the operations that key may call (see your credentials).X-Brand-Id. The brand_id in the path
must match it. A mismatched, unknown or foreign brand answers 404, never 403, so the answer
never says whether another client’s brand exists. Enabling an offering with
POST /v1/account/brands/{brand_id}/offerings follows the same rule.
The read changes nothing and moves no money.
What comes back
A200 carries a data list, one entry per enabled offering, in the catalog’s order. A brand with
no enabled offerings answers 200 with an empty list ({"data": []}), never an error.
Price, or no price yet
price is the same price the checkout charges, read from the same source. It is never computed
for this list. Its status is one of three values:
available: the price is set. The entry carriesamount_minor(a whole number in the smallest unit of the currency, so29900is $299.00),currency(USD), andbilling_frequency(one_time,monthly,quarterly,semiannualorannual). It may also carryshipping_frequency(none,weekly,biweekly,monthlyorquarterly), orshipping_interval_daysandrenewal_interval_dayswhen the schedule follows the medication’s supply.no_price_yet: the price or its billing terms are not set up yet. No amount is given, rather than a guessed one, and a checkout for the offering is refused. Show the offering without a price and without a buy control.not_measured: the price could not be read right now. This is not the same as “no price yet”: the price may well be set. Try the read again before you tell a patient anything about the price.
Null means one of two things
A field that isnull means one of two different things, and not_measured tells them apart:
null, and the field is named innot_measured: the part of the platform that holds the value could not be read right now. The offering is still listed. Read again later.null, and the field is not named innot_measured: the platform holds no value for it. For example,therapy_keyisnullwhen the catalog maps no key for the offering’s therapy.
not_measured can name display_name, therapy, therapy_key, entry_mode, entry_link and
price.
When there is no checkout link
Whenentry_link is null, entry_link_unavailable carries one of four reasons:
Show such an offering without a buy control, and ask your onboarding contact to resolve any reason
other than
not_measured.
Readiness
readiness says whether the offering can be sold yet, exactly as the catalog reports it:
status:enabled_pending_activation(enabled for your brand, not yet ready to sell) oractive.lifecycle, when the catalog has one: itsstatusislive,setting_uporpaused, withlive_since,paused_atandpause_reasonswhere they apply.checks: the activation checks behind the status.
Errors
Your brand configuration does not list offerings
The brand configuration readback,GET /v1/account/brands/{brand_id}/config,
returns your theme, your enabled therapies and your redirect allowlist. It does not carry your
offerings. List them with this read.
The endpoint
- List your brand’s enabled offerings —
GET /v1/account/brands/{brand_id}/offerings