API reference
Landing pages
Headless access to affiliate co-branded storefronts.
Get a landing page
GET
/v1/programs/:programId/landing-pages/:slugread scopeReturns a page's full config plus the resolved product list, so you can render the storefront on your own site instead of using the hosted templates.
Path parameters
| programIdrequuid | From `GET /v1/me`. |
| slugreqstring | The page slug. |
Response
json
{
"slug": "kristinrichards",
"templateId": "creator",
"promotionMode": "featured_only",
"pageTitle": "My protocol picks",
"headline": "What I actually use",
"bioText": "...",
"avatarUrl": "https://...",
"isPublished": true,
"reviewStatus": "approved",
"isLive": true,
"affiliate": { "name": "Kristin Richards", "referralCode": "a8f2k1x9", "status": "active" },
"products": [ { "id": "...", "name": "Semaglutide B12", "priceCents": 29900, "checkoutUrl": "..." } ]
}- `products` already honours the affiliate's promotion mode and any tier restrictions — don't re-filter.
- Use `isLive`, not `isPublished`, to decide whether to serve the page publicly. A page is only live when the affiliate published it **and** the brand approved it.
Create or update a landing page
POST
/v1/programs/:programId/landing-pages/:slugwrite scopeWrites a page's content. Creates it if the affiliate has none.
Path parameters
| programIdrequuid | From `GET /v1/me`. |
| slugreqstring | Lowercase letters, numbers, hyphens. |
Body parameters
| affiliateIdrequuid | Page owner. |
| pageTitlereqstring | |
| templateIdenum | `clinical` · `creator` · `minimalist` |
| promotionModeenum | `all` · `featured_only` |
| headlinestring | null | |
| bioTextstring | null | |
| avatarUrlstring | null | |
| heroImageUrlstring | null | |
| promoBadgeTextstring | |
| featuredProductIdsuuid[] | Filtered to products this affiliate may promote. |
| isPublishedboolean | The affiliate's intent to be live. |
Response
json
{
"id": "7b3e...",
"slug": "kristinrichards",
"reviewStatus": "draft",
"isPublished": true,
"isLive": false,
"message": "Saved. The page needs brand approval before it goes live."
}- **This cannot approve a page.** Writing content always resets review status to `draft`. Approval is a human action in the agency console, because affiliate copy is the brand's legal liability.