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 thebridge_configuration_not_published error (HTTP 400). Each message is prefixed by its path, for example branding.display_name: reserved word "stripe" is not allowed.
appearancevalues may not containurl(,expression,javascript:,@import,;, or}. The property namesposition,display,content,opacity,z-index, andvisibilityare rejected anywhere they appear.appearance.rulesaccept these properties:color,backgroundColor,borderColor,borderWidth,borderRadius,fontWeight,fontSize,fontFamily,lineHeight,padding,boxShadow,outline,outlineOffset,letterSpacing,textTransform..TaxSummaryand.Erroraccept onlyborderColor,borderWidth,borderRadius,padding, andboxShadow, so the tax total and validation errors stay legible.display_namemay not containnumeral,stripe,secure checkout, or the whole wordcheckout. It may not mix Latin letters with Cyrillic or Greek letters.custom_textmessages are plain text: no control characters, no://, nowww., no@, and no run of seven or more digits. Everything renders as text, never as HTML.logomust 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 fulldraft_payload, not only the presentation keys. draft_payload replaces the whole draft.
Add a logo
Logos are uploaded once as atax.bridge_asset and referenced by ID.
- PNG and JPEG only. The type is sniffed from the bytes; the declared
filenameis informational. - At most 512 KiB decoded.
- Each side between 16 and 2048 pixels.
- SVG, GIF, WebP, and ICO are refused.
1
Upload the asset
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.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.
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 forcheckout.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.