API/Merchant theme
v1.0.0-beta.mdGet API keys
Surfaces

Merchant theme

GET|POST /functions/v1/merchant-theme-get

Per-merchant appearance for the hosted surfaces: 22 tokens on capture, 19 on mandate, always fully populated, browser-safe to read.

GET  /functions/v1/merchant-theme-get?merchant_id=<id>&surface=capture|mandate
POST /functions/v1/merchant-theme-get   { "merchant_id": "<id>", "surface": "capture" }

Header x-sidaxis-api-key; a publishable pk_ is accepted. surface defaults to capture. Responses are cache-control: public, max-age=60.

Why a browser key is correct here

The response contains no key, no policy, no threshold and no subject data — nothing that changes a verdict — and the hosted surface must paint itself before any identity exists, so it can only carry a browser key. Nothing sensitive is reachable here even with a stolen pk_.

Response

{
  "version": "theme.v1",
  "merchant_id": "mrc_9f2c",
  "surface": "capture",
  "customized": true,
  "tokens": ["brand_name", "mode", "color_primary", "..."],
  "theme": {
    "brand_name": "Northwind",
    "mode": "light",
    "color_primary": "212 78% 15%",
    "radius_md_px": 12,
    "font_body_family": "\"Inter\", sans-serif"
  }
}

Tokens

22 tokens on capture; the mandate surface consumes the 19 that remain after dropping logo_icon_url, color_success and color_danger.

TokenTypeSidaxis default
brand_nametextSidaxis
modelight|darklight
logo_wide_url, logo_square_urlurlnull
logo_icon_url (capture only)urlnull
color_primaryH S% L%212 78% 15%
color_primary_fgH S% L%0 0% 100%
color_backgroundH S% L%0 0% 97%
color_foregroundH S% L%212 78% 15%
color_mutedH S% L%210 10% 55%
color_borderH S% L%210 14% 89%
color_success (capture only)H S% L%152 55% 42%
color_danger (capture only)H S% L%0 84% 60%
radius_sm_px / radius_md_px / radius_lg_px0–648 / 12 / 20
font_heading_familytext"Space Grotesk", sans-serif
font_body_familytext"Inter", sans-serif
font_heading_url / font_body_urlurl (Google Fonts)null
font_heading_weight / font_body_weight100–900600 / 400

Colours are H S% L% triples, not hex.

The default is never empty

A merchant with no row — or with any token left NULL — receives the fully populated Sidaxis theme, and customized: false says so explicitly. The surface never receives NULL and never needs a local fallback. Logos default to null, and the component is designed to render without one.

Read-only by design

There is no endpoint to write a theme: themes are written in the developer console, as the authenticated merchant owner, and only published themes are served. A draft can sit unserved. If you are looking for a write API, it does not exist — do not build against one.

Hosted mode applies the theme for you

When the buyer is on a Sidaxis-hosted screen, the screen fetches and applies the theme itself — do not call this endpoint in that flow. Call it only in headless/SDK integrations, where your own UI renders and you must apply the tokens yourself.

White-label is included

White-label is included — no per-check cost, no add-on. Branding every hosted screen with the merchant's identity is part of the service.

Errors

400 MERCHANT_ID_REQUIRED, 400 INVALID_SURFACE, 401 INVALID_API_KEY, 405 METHOD_NOT_ALLOWED.

Sidaxis is the human authorisation layer. It never moves money, holds funds or settles. The machine-readable contract is openapi.yaml.
Sidaxis API documentationQuickstartAuthenticationHosted or headlessSandbox and productionIdempotencyRate limitsErrors and refusalsField namesWebhooksAssuranceThe document ruleAlias availabilityMerchant themeMCP serverCompatibilityStatusRoadmapChangelogIdentityEnroll an identityRecognise a personDisclose an attributeMandatesThe eight scopesIssue a mandateCheck an actionConsume a mandateRead a mandateRevoke a mandateReceiptsRead a merchant's receiptsVerify a receiptHosted sessionsCreate a hosted sessionConsume a hosted sessionOne Face for agents