Hosted Checkout

Personalizar el checkout

Plantillas, colores, fuentes, texto del botón e idioma: guardados una vez para tu negocio o definidos por sesión.

Controlas cómo se ve y cómo se lee el checkout en dos niveles: valores por defecto de tu negocio, guardados una sola vez, y valores que sobrescribes en una sesión, enviados al crearla.

La demo interactiva muestra cada opción de esta página aplicada a un checkout en vivo.

Qué puedes cambiar

AjusteCampoValores
Distribuciónui_config.templateecommerce (por defecto), deposit, subscription
Colores, fuente, formas, logoui_config, logoVer Campos de ui_config
Texto del botón de pagosubmit_typepay (por defecto), deposit, subscribe — o tu propio texto en ui_config.buttons.payment_button.text
Idiomalocalees (por defecto), en, zh — el cliente puede cambiarlo en la página
Diseño del checkoutcheckout_ui_versionv2 (por defecto en sesiones de pago), v1

Una plantilla solo cambia la apariencia. Nunca cambia montos, artículos, métodos de pago ni el procesamiento.

Qué valor gana

AjusteOrden de resolución¿Fijo desde la creación?
checkout_ui_version, submit_type, localeValor enviado en la sesión → valor por defecto de tu negocio → valor por defecto de Tonder (v2, pay, es)Sí. Los cambios posteriores a tus valores por defecto no afectan a las sesiones ya creadas.
ui_config (apariencia)Valores de la sesión sobre la apariencia de tu negocio, campo por campoNo. Un cambio en la apariencia de tu negocio también aplica a las sesiones abiertas que no sobrescriben ese campo.

Los cambios en los valores por defecto del negocio pueden tardar hasta 10 minutos en aplicarse a las sesiones nuevas.

Método 1: guarda los valores por defecto de tu negocio

Envía tus valores por defecto una sola vez. Aplican a todas las sesiones, a menos que la sesión los sobrescriba. El cuerpo es un formulario (multipart/form-data), así que puedes subir un archivo de logo.

CampoTipoRequeridoValoresDescripción
statusstringSíactive, inactiveSi la configuración está en uso.
ui_configstring (JSON)SíVer Campos de ui_configTu apariencia por defecto.
logofileNoPNG, JPGLogo a subir. Reemplaza a logo_url.
logo_urlstringNoURLDirección del logo, usada cuando no se envía un archivo.
checkout_ui_versionstringNov1, v2Diseño del checkout por defecto. Envía v1 para mantener tu negocio en el diseño de primera generación.
submit_typestringNopay, deposit, subscribeTipo de botón por defecto para las sesiones de pago.
localestringNoes, en, zhIdioma del checkout por defecto.
versionstringNop. ej. V1Qué apariencia guardar; las sesiones la eligen con ui_config_version. Por defecto V1.

Los campos que no envías conservan su valor guardado, excepto ui_config y status, que siempre se envían.

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'

Lee lo que guardaste

GET /checkout/v1/business/config devuelve tus valores por defecto guardados, o una configuración vacía si todavía no has guardado una.

{
  "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"
}

También puedes editar la apariencia en el Dashboard, con una vista previa en vivo del checkout real; consulta Payment links.

Método 2: sobrescribe en una sesión

Envía ui_config, submit_type, locale o checkout_ui_version al crear la sesión. Este ejemplo usa la distribución y el botón de depósito en una sola sesión:

{
  "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"
}

Campos de ui_config

Se aceptan en ambos métodos. Los colores son códigos HEX.

CampoTipoValoresDescripción
templatestringecommerce (por defecto), deposit, subscriptionDistribución del checkout.
branding.brand_color, branding.accent_colorstringColor HEXColores principal y de acento.
theme.background_color, theme.card_background_colorstringColor HEXFondos de la página y de la tarjeta. Usa colores claros: los colores del texto del checkout no se derivan de estos valores, así que un fondo oscuro deja ilegible el resumen del pedido.
theme.font_familystringinter (por defecto), system, geist, georgia, serif, monospaceFuente del diseño v2. Otros valores usan la fuente por defecto.
theme.shapesstringrounded, rectangular, pillEstilo de las esquinas de botones y campos.
buttons.payment_button.textstring—Texto personalizado del botón de pago. Tiene precedencia sobre submit_type.
buttons.payment_button.background_color, .text_colorstringColor HEXColores del botón de pago. En el diseño v2 el color del texto se ajusta para que sea legible.
labels.card_number, .card_holder_name, .expiration_date, .cvvstring—Etiquetas del formulario de tarjeta.
placeholders.card_number, .card_holder_name, .expiration_month, .expiration_year, .cvvstring—Textos de ejemplo del formulario de tarjeta.

Referencia de la API

POST
/checkout/v1/business/config

Autorización

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

Cuerpo de la petición

multipart/form-data

TypeScript Definitions

Use the request body type in TypeScript.

Cuerpo de la respuesta

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
}

Siguientes pasos

¿Te resultó útil esta página?

En esta página