Checkout Session

Cobrar en un terminal POS

Changed on

Cobra en un terminal POS físico y devuelve la transacción que quedó esperando a que el cliente final pase la tarjeta.

El 201 no significa que el cliente pagó: significa que el terminal tomó la venta y todavía tiene que operarla. El resultado del cobro llega por el webhook de transacción —transaction.success o transaction.failed—, que devuelve el external_id con el que la caja correlaciona la operación. Ese mismo estado se puede consultar con GET /transactions/{public_id_transaction}: el cobro POS no tiene un endpoint de estado propio.

Se envía una de tres formas, nunca más de una: ids_invoice, para saldar deudas ya creadas; amount junto con currency e id_account, para cobrar un monto suelto; o invoice_data junto con id_account y un Customer (id_customer o customer_data), para crear la deuda y saldarla en el mismo paso. No se envía medio de pago: la tarjeta la lee el terminal.

Abre una Checkout Session en estado OPEN y despacha la venta al terminal. Esa sesión es el contenedor del intento de cobro y se cierra sola cuando el cobro termina: a diferencia de los demás productos, no es una página que se renderice ni tiene una url a la que derivar al cliente. Si el terminal no toma la venta, la sesión queda EXPIRED y no se cobra nada.

El terminal y las deudas tienen que pertenecer a la organización autenticada, y hoy los únicos terminales habilitados son los chilenos (country_code = cl).

Cualquier campo que no esté en el contrato se rechaza con 422: la caja no cobra distinto de lo que pidió.

Si se envía idempotency_key, ese valor no puede repetirse dentro de la organización: un reintento por timeout se rechaza con 409 en vez de cobrar dos veces.

post/{country_code}/checkout-sessions/pos-charge

Request

  • Base URL
    https://api.trytoku.com
  • URL
    https://api.trytoku.com/{country_code}/checkout-sessions/pos-charge
  • Auth
    API key in header x-api-key

Path parameters

country_code'cl' | 'mx' | 'br' required

País de la organización sobre la que se opera, como primer segmento de la ruta: cl (Chile), mx (México) o br (Brasil).

Request body

additional_metadataobject nullable

Datos propios de la organización que se guardan junto a la Checkout Session.

allow_partial_paymentboolean nullable

Indica si el cliente final puede abonar solo una parte del total.

amountnumber nullable

Monto que se cobra en la Checkout Session. Excluyente con ids_invoice y con invoice_data, y cuando se envía, currency e id_account son obligatorios.

currency'CLP' | 'CLF' | 'MXN' | 'BRL' | 'USD'

Moneda, en código ISO 4217. Cubre las monedas de los países donde Toku opera —CLP (peso chileno), MXN (peso mexicano) y BRL (real)— más USD y CLF, la Unidad de Fomento chilena. La moneda determina cuántos decimales admiten los montos: CLP no admite decimales, MXN, BRL y USD admiten dos, y CLF cuatro.

external_idstring nullable

Identificador que entrega la organización para reconocer después la operación. Vuelve en el webhook de transacción como external_id: es con lo que la caja correlaciona el resultado del cobro.

flow_namestring nullable

Flow con el que se crea la Checkout Session. Determina la configuración de POS que se aplica en el terminal.

id_accountstring encrypted-id nullable

Identificador de la Account. Si se omite, se resuelve desde las deudas.

id_customerstring encrypted-id nullable

Identificador del Customer. Si se omite, se resuelve desde las deudas.

id_pos_terminalstring encrypted-id required

Terminal POS en el que se cobra. Tiene que pertenecer a la organización autenticada.

idempotency_keystring nullable

Identificador propio de la organización que, si se envía, no puede repetirse: un reintento por timeout se rechaza con 409 en vez de cobrar dos veces.

ids_invoicestring[] nullable

Identificadores de las deudas que se cobran en la Checkout Session. Excluyente con amount y con invoice_data: se envía una de las tres.

Example request

{
  "id_account": "acc_123abc",
  "id_customer": "cus_123abc",
  "id_pos_terminal": "pos_123abc"
}

Response

La venta quedó despachada al terminal y la Checkout Session abierta. No significa que el cliente haya pagado: el resultado llega por el webhook de transacción.

id_checkout_sessionstring required

Checkout Session que contiene el intento de cobro. Se cierra sola cuando el cobro termina y no renderiza ninguna página: sirve como referencia de la operación.

Example response

{
  "id_checkout_session": "9c1f7f2e-6f4a-4a1e-9d3b-2f8c5b7a1d40",
  "transaction": {
    "expiration_date": "2026-08-12T18:00:00+00:00",
    "id_transaction": "trs_7QpK4mZ0RbS2vXhTyLnE9wJdA3cF6uGx",
    "status": "INITIALIZED"
  }
}

Changes