checkouts

Crear un checkout

Crea una nueva sesión de checkout. Cada elemento del arreglo items puede declararse de dos maneras:

  • Con un producto existente (recomendado): incluye product_id (o price_id si el producto tiene varios precios) y opcionalmente quantity. No envíes name, amount_in_cents, etc.; el producto ya tiene esa configuración.
  • Con detalles inline: incluye name, amount_in_cents, currency y los demás campos del cobro. Recurrente creará un producto invisible bajo la cuenta y lo asociará al checkout.

Cuando usas items, no envíes amount_in_cents en la raíz del payload. El total del checkout se calcula sumando los ítems y debe alcanzar el mínimo de cobro: 500 para GTQ (Q5) o 100 para USD ($1). Un ítem individual, como envío, puede ser menor al mínimo si el total del checkout sí lo cumple.

Ejemplo mínimo con un producto ya creado:

{
  "items": [
    { "product_id": "prod_1234567", "quantity": 1 }
  ],
  "success_url": "https://tusitio.com/exito",
  "cancel_url": "https://tusitio.com/cancelar"
}

Cuotas en Checkout

En un checkout hospedado, tu integración controla qué opciones de cuotas se muestran con available_installments; el comprador escoge entre esas opciones al pagar. No envíes installments al crear un checkout para seleccionar la cantidad final de cuotas.

Para que un checkout muestre cuotas necesitas:

  • Moneda GTQ (las cuotas no aplican en USD).
  • Un cobro único (charge_type: "one_time").
  • Pagos con tarjeta habilitados en la cuenta, y una cuenta empresarial (las cuentas personales no pueden ofrecer cuotas).
  • No hace falta que la cuenta esté verificada, ni habilitar nada con el adquirente.

Mientras la cuenta no complete su verificación sí aplica su tope de procesamiento sin verificación (Q500 en GTQ, $50 en USD, acumulado). Si el total del checkout pasa ese tope, POST /checkouts responde 422 con code: amount_exceeds_unverified_limit y no crea el checkout, porque el comprador se habría topado con el bloqueo de cuenta no verificada en la página de pago. Completa la verificación de la cuenta para quitar el tope.

Si quieres que el checkout solo permita una cantidad específica de cuotas, muestra únicamente esa opción y desactiva el pago con tarjeta de contado:

{
  "items": [
    {
      "name": "Pago en 6 cuotas",
      "amount_in_cents": 15000,
      "currency": "GTQ",
      "charge_type": "one_time",
      "quantity": 1,
      "payment_method_types": [],
      "available_installments": [6]
    }
  ]
}

Para que el comprador elija entre varias opciones, envía una lista como available_installments: [3, 6, 12]. Para ocultar cuotas, envía available_installments: [].

El parámetro installments aplica solo en endpoints de cobro directo que lo incluyan, como POST /terminal_session_commands, donde tu sistema escoge la cantidad de cuotas. Las cuotas dependen de la moneda, la cuenta, el banco/emisor y la tarjeta del comprador; si la tarjeta no soporta la opción elegida, el cobro puede fallar con unsupported_installments.

post/checkouts

Headers

X-SECRET-KEYstring required

Tu clave secreta de API.

Una llave de cuenta (sk_live_..., sk_test_...) opera sobre su propia cuenta y, con X-ACCOUNT-ID, sobre sus cuentas conectadas.

Una llave de organización (sk_org_live_..., sk_org_test_...) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con X-ACCOUNT-ID; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde 403 con code: organization_key_unsupported.

Request body

mode'setup'

(Opcional) Modo del checkout. Envía setup para tokenizar una tarjeta sin cobrarla.

success_urlstring uri

(Opcional) URL a dónde dirigir al comprador después de un pago exitoso

cancel_urlstring uri

(Opcional) URL a dónde dirigir al comprador cuando abandona el checkout

user_idstring

(Opcional) ID del usuario a quien pertenece el checkout. Prepopula los campos de información de usuario (nombre, email y teléfono del cliente si existe en tu cuenta).

customer_idstring

(Opcional) ID del cliente en tu cuenta. Prepopula los campos de información de usuario (nombre, email y teléfono guardado del cliente). Si envías customer_id y user_id, se usa customer_id.

expires_atstring date-time

(Opcional) Fecha en la que quieres que el checkout expire, en formato ISO 8601

discount_codestring

(Opcional) Código de descuento/cupón a aplicar al checkout

Response

Checkout creado exitosamente

idstring required

ID único del checkout

status'unpaid' | 'paid' | 'payment_in_progress' | 'expired' required

Estado del checkout

total_in_centsinteger

Monto total en centavos (después de descuentos)

subtotal_in_centsinteger

Monto subtotal en centavos (antes de descuentos)

currency'GTQ' | 'USD'

Moneda del checkout

payment_method_typesCheckoutsPostResponsesContentApplicationJsonSchemaPaymentMethodTypesItems[]

Métodos de pago que se le ofrecerán al comprador en este checkout, ya resueltos según la configuración del producto/cuenta, la moneda y el tipo de cobro: card (tarjeta, pago de contado), bank_transfer (transferencia bancaria), stablecoins (dólares digitales), balance (Balance Recurrente). Las cuotas se exponen por separado en available_installments; card indica pago de contado, así que un checkout puede ofrecer cuotas (available_installments no vacío) sin incluir card.

available_installmentsinteger[]

Opciones de cuotas (en meses) disponibles en este checkout, independientes de payment_method_types. Vacío si no se ofrecen cuotas.

live_modeboolean

Si el checkout está en modo producción (true) o prueba (false)

success_urlstring

URL de redirección en caso de pago exitoso

cancel_urlstring

URL de redirección en caso de cancelación

expires_atstring date-time

Fecha de expiración del checkout

created_atstring date-time

Fecha de creación

checkout_urlstring

URL del checkout donde el usuario puede pagar

Changes

No recorded changes to this endpoint across all 1 revision of this API.