Update Portal Home Page
PUT/api/admin/portal/home
Replace the portal Home page configuration. The whole configuration is replaced: send every announcement and featured product to keep. Branding is a separate setting and is never touched.
This endpoint currently requires session authentication; Personal Access Token scope support is in progress.
Body fields:
- landing_page (required,
catalogorhome): where buyers land after sign-in. A deep link always wins. - featured_title (optional, string up to 60 characters, or null): heading over the featured products. Null shows "Featured".
- featured_product_ids (required, array, may be empty, at most 12): product ids in display order. Each must be a distinct, existing product.
- announcements (required, array, may be empty, at most 10), in display order. Each item:
- id (optional, string or null): the announcement's id from a previous response. Null (or an unknown id) creates a new announcement with a new id.
- tone (required):
info,promotionorimportant. - title (required, string up to 120 characters).
- body (optional, Markdown up to 2,000 characters). Raw HTML is stripped when shown to buyers.
- cta_label (string up to 30 characters; required when cta_url is set).
- cta_url (required when cta_label is set): an
https://URL or a portal path starting with/(for example/catalog).http:,javascript:,data:and//hostlinks are rejected. - starts_at (optional, ISO-8601 date-time or null): when it goes live; null = now. A value without an offset is read as UTC.
- ends_at (optional, ISO-8601 date-time or null): must be after starts_at; null = never expires.
- pinned (optional, boolean, default false): pinned announcements cannot be dismissed by buyers.
An existing announcement keeps its updated_at unless its content changed, so buyers who dismissed it don't see it again after an unrelated save. Dates are stored in UTC.
Returns the same shape as Get Portal Home Page.
Request
Responses
- 200
- 401
- 403
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Unprocessable Content
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.