Skip to main content
The Numeral-hosted address page can carry your business name, logo, colors, copy, and default locale. All of it lives on the checkout configuration, so it is set with the same two calls used for every other policy: update the draft, then publish. Session creation does not change. The config_id you already send selects the look.
Branding is pinned per published version. Sessions created after a publish pick up the new version. Sessions already in flight keep the version they were created with.

Where each field renders

Every key is optional. Without branding the hosted page renders as it does today.

Configuration fields

Add these keys to the configuration payload alongside the existing fields.

Rules enforced at publish

Drafts stay free-form. Publish validates everything and reports up to ten problems at once under the bridge_configuration_not_published error (HTTP 400). Each message is prefixed by its path, for example branding.display_name: reserved word "stripe" is not allowed.
  • appearance values may not contain url(, expression, javascript:, @import, ;, or }. The property names position, display, content, opacity, z-index, and visibility are rejected anywhere they appear.
  • appearance.rules accept these properties: color, backgroundColor, borderColor, borderWidth, borderRadius, fontWeight, fontSize, fontFamily, lineHeight, padding, boxShadow, outline, outlineOffset, letterSpacing, textTransform.
  • .TaxSummary and .Error accept only borderColor, borderWidth, borderRadius, padding, and boxShadow, so the tax total and validation errors stay legible.
  • display_name may not contain numeral, stripe, secure checkout, or the whole word checkout. It may not mix Latin letters with Cyrillic or Greek letters.
  • custom_text messages are plain text: no control characters, no ://, no www., no @, and no run of seven or more digits. Everything renders as text, never as HTML.
  • logo must reference an asset uploaded by the same account that has not been deleted.

What stays fixed

The following are not customizable: the “Secure checkout” label, step titles, button labels, tax summary labels, the footer sentence, and “Powered by Numeral”. Rules cannot target the hosted chrome.

Set a name and color

Send the full draft_payload, not only the presentation keys. draft_payload replaces the whole draft.
The same fields are available in the dashboard. Open Developers → Numeral for Stripe Checkout and use the Branding section. Use Stripe branding prefills the business name and primary color from the connected Stripe account. Both paths go through the same publish gate. Logos are uploaded once as a tax.bridge_asset and referenced by ID.
  • PNG and JPEG only. The type is sniffed from the bytes; the declared filename is informational.
  • At most 512 KiB decoded.
  • Each side between 16 and 2048 pixels.
  • SVG, GIF, WebP, and ICO are refused.
1

Upload the asset

A successful upload answers 201:
2

Reference it and republish

Set draft_payload.branding.logo to the returned id with POST /tax/bridge/configurations/:id, then call POST /tax/bridge/configurations/:id/publish.
Uploading identical bytes twice with the same key mode returns the existing asset. Assets are scoped to the key’s mode: a logo uploaded with a test key (livemode: false) cannot be published on a live configuration. GET /tax/bridge/assets, GET /tax/bridge/assets/:id, and DELETE /tax/bridge/assets/:id complete the resource. The list response is { "object": "list", "bridge_assets": [...], "has_more": true, "next_cursor": "..." } and accepts limit and cursor query parameters. The delete response is the same asset object plus deleted: true and deleted_at. Deleting an asset blocks future publishes that reference it. Versions already pinned to it keep serving because the bytes are immutable.
Logos are same-origin only. A merchant-hosted image URL in any branding field is refused at publish, and SVG is refused at upload. Allowing a merchant URL would let the merchant observe buyer IP addresses and timing from a Numeral page, and would make a pinned version mutable in practice because the bytes behind the URL could change. Upload the logo as a brand asset instead. It is served from https://checkout.numeralhq.com/bridge/brand/<id> with a fixed content type, nosniff, and an immutable cache lifetime.

Read branding with a publishable key

GET /tax/bridge/client/configurations/:id returns the browser-safe projection of a published configuration, including appearance, locale_default, and branding. The brast_... ID is never returned. The logo is resolved to its served URL and dimensions.

Errors

Payments and subscriptions

Branding works identically for checkout.mode: "payment" and checkout.mode: "subscription". Both modes select their look through the same config_id, and a subscription session pinned to a version keeps that version through its address step.

The Stripe Checkout page

Branding here covers only the Numeral-hosted address page and the embedded collector. The Stripe Checkout payment page that follows is still branded by your Stripe account’s own branding settings. Use Use Stripe branding in the dashboard to keep the two pages visually consistent.