Customize the Checkout

Templates, colors, fonts, button text and language — saved once for your business or set per session.

You control how the checkout looks and reads at two levels: defaults for your business, saved once, and overrides on a session, sent when you create it.

The interactive demo shows every option on this page applied to a live checkout.

What you can change

SettingFieldValues
Layoutui_config.templateecommerce (default), deposit, subscription
Colors, font, shapes, logoui_config, logoSee ui_config fields
Pay button wordingsubmit_typepay (default), deposit, subscribe — or your own text in ui_config.buttons.payment_button.text
Languagelocalees (default), en, zh — the customer can still switch on the page
Checkout designcheckout_ui_versionv2 (default for payment sessions), v1

A template only changes the look. It never changes amounts, items, payment methods or processing.

Which value wins

SettingResolution orderFixed at creation?
checkout_ui_version, submit_type, localeValue sent on the session → your business default → Tonder's default (v2, pay, es)Yes. Later changes to your defaults do not affect sessions already created.
ui_config (appearance)Session values on top of your business appearance, field by fieldNo. A change to your business appearance also applies to open sessions that do not override that field.

Changes to business defaults can take up to 10 minutes to apply to new sessions.

Method 1: save your business defaults

Send your defaults once. They apply to every session unless the session overrides them. The body is a form (multipart/form-data), so you can upload a logo file.

FieldTypeRequiredValuesDescription
statusstringYesactive, inactiveWhether the configuration is in use.
ui_configstring (JSON)YesSee ui_config fieldsYour default appearance.
logofileNoPNG, JPGLogo to upload. Replaces logo_url.
logo_urlstringNoURLLogo address, used when no file is sent.
checkout_ui_versionstringNov1, v2Default checkout design. Send v1 to keep your business on the first-generation design.
submit_typestringNopay, deposit, subscribeDefault button type for payment sessions.
localestringNoes, en, zhDefault checkout language.
versionstringNoe.g. V1Which appearance to save; sessions choose it with ui_config_version. Defaults to V1.

Fields you do not send keep their saved value, except ui_config and status, which are always sent.

curl -X POST 'https://api-stage.tonder.io/checkout/v1/business/config' \
  -H 'Authorization: Token YOUR_TEST_API_KEY' \
  -F 'status=active' \
  -F 'ui_config={"template":"ecommerce","branding":{"brand_color":"#025E73"},"theme":{"font_family":"inter","shapes":"rounded"}}' \
  -F 'checkout_ui_version=v2' \
  -F 'submit_type=pay' \
  -F 'locale=es' \
  -F 'logo=@logo.png'
curl -X POST 'https://api.tonder.io/checkout/v1/business/config' \
  -H 'Authorization: Token YOUR_API_KEY' \
  -F 'status=active' \
  -F 'ui_config={"template":"ecommerce","branding":{"brand_color":"#025E73"},"theme":{"font_family":"inter","shapes":"rounded"}}' \
  -F 'checkout_ui_version=v2' \
  -F 'submit_type=pay' \
  -F 'locale=es' \
  -F 'logo=@logo.png'

Read what you saved

GET /checkout/v1/business/config returns your saved defaults, or an empty configuration if you have not saved one yet.

{
  "status": "active",
  "ui_config": { "template": "ecommerce", "branding": { "brand_color": "#025E73" } },
  "logo_url": "https://your-store.com/assets/logo.png",
  "checkout_ui_version": "v2",
  "submit_type": "pay",
  "locale": "es"
}

You can also edit the appearance in the Dashboard, with a live preview of the real checkout — see Payment Links.

Method 2: override on a session

Send ui_config, submit_type, locale or checkout_ui_version when you create the session. This example uses the deposit layout and button for one session:

{
  "customer": { "first_name": "Ana", "last_name": "Garcia", "email": "ana@example.com" },
  "amount_total": 100.00,
  "currency": "MXN",
  "line_items": [{ "name": "Deposit", "quantity": 1, "unit_price": 100.00 }],
  "payment_method_types": ["card", "spei", "apple_pay"],
  "submit_type": "deposit",
  "locale": "en",
  "ui_config": {
    "template": "deposit",
    "branding": { "brand_color": "#025E73" }
  },
  "external_id": "ORD-001",
  "return_url": "https://your-store.com/checkout/complete"
}

ui_config fields

Accepted in both methods. Colors are HEX codes.

FieldTypeValuesDescription
templatestringecommerce (default), deposit, subscriptionLayout of the checkout.
branding.brand_color, branding.accent_colorstringHEX colorMain and accent colors.
theme.background_color, theme.card_background_colorstringHEX colorPage and card backgrounds. Use light colors: the checkout's text colors are not derived from these values, so a dark background leaves the order summary unreadable.
theme.font_familystringinter (default), system, geist, georgia, serif, monospaceFont of the v2 design. Other values use the default.
theme.shapesstringrounded, rectangular, pillCorner style of buttons and fields.
buttons.payment_button.textstring—Custom pay button text. Takes precedence over submit_type.
buttons.payment_button.background_color, .text_colorstringHEX colorPay button colors. In the v2 design the text color is adjusted for readability.
labels.card_number, .card_holder_name, .expiration_date, .cvvstring—Card form labels.
placeholders.card_number, .card_holder_name, .expiration_month, .expiration_year, .cvvstring—Card form placeholders.

API reference

POST
/checkout/v1/business/config

Authorization

Authorization
Authorization<token>

Your public API key, with the word Token and a space in front of it. Example: Token 6534bc0a7e1f4d2b9c8e3a5f7b1d2c4e6f8a9b0c — that whole value is the header. Sending the key alone returns 401 'Authentication credentials were not provided'. In this playground you may paste just the key; the prefix is added for you.

In: header

Request Body

multipart/form-data

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

curl -X POST "https://example.com/checkout/v1/business/config" \  -F status="active" \  -F ui_config="{\"template\":\"ecommerce\",\"branding\":{\"brand_color\":\"#025E73\"},\"theme\":{\"font_family\":\"inter\",\"shapes\":\"rounded\"}}"
{
  "status": "active",
  "ui_config": {
    "template": "ecommerce",
    "branding": {
      "brand_color": "#025E73"
    },
    "theme": {
      "font_family": "inter",
      "shapes": "rounded"
    }
  },
  "logo_url": "https://your-store.com/assets/logo.png",
  "checkout_ui_version": "v2",
  "submit_type": "pay",
  "locale": "es"
}
{
  "code": "E004",
  "message": "The request was invalid. Please check your input and try again.",
  "metadata": {},
  "name": "TNDR004",
  "statusCode": 400
}

Next steps

Was this page helpful?

On this page