Saltar al contenido principal

Callbacks

Checkout envía un HTTP POST a tu notification_URL como resultado de cada operación.

Alta del webhook

Para empezar a recibir estas notificaciones hay que comunicarse con el equipo de tech y mandarles la URL del webhook (notification_URL) donde quieran recibir los callbacks.

Eventos que disparan callback

Checkout puede disparar más de un callback para el mismo pago, a medida que avanza por distintos estados:

  1. type=redirect, status=success — se dispara cuando el pago llega a la instancia de redirección (ej. cuando se genera el link/cupón de transferencia). Puede llegar duplicado (puede llegar más de una vez con el mismo type/status).
  2. type=sale, status=waiting — el cobro está en proceso (esperando que se acredite la transferencia).
  3. type=sale, status=success — cuando el pago se acredita y queda settled.
Callbacks duplicados

Checkout puede reenviar el mismo callback (mismo id, type y status) más de una vez. Tu endpoint debería ser idempotente — usá el campo id para detectar si ya procesaste ese evento antes de aplicar cambios en tu sistema.

información

El set de eventos exacto (redirect, sale, u otros) depende del método de pago. Métodos con redirección (transferencia bancaria, efectivo, wallets) van a mandar el callback de redirect antes del de sale; métodos directos (tarjeta) pueden mandar directamente sale.

Estados de transacción

Transaction StatusDescripción
successCompletada exitosamente
failCon errores, no validada
waitingEn procesamiento
undefinedEstado incierto por problema con el proveedor
aviso

success no implica necesariamente que el pago tenga estado final exitoso — revisá también order_status (ver tabla de payload abajo).

Payload del callback

ParámetroTipoDescripción
idstringID público del pago
order_numberstringTu order ID
order_amountfloatMonto (XX.XX)
order_currencystringCódigo de moneda
order_descriptionstringDescripción del producto
order_statusstringprepare, settled, pending, redirect, decline, refund, reversal, etc.
typestringredirect, sale, u otra etapa del pago
statusstringsuccess, fail, waiting, undefined
reasonstringMotivo de rechazo/error (solo si fail)
cardstringMáscara de tarjeta XXXXXX******XXXX
card_expiration_datestringmm/yyyy
card_tokenstringSolo si req_token estuvo habilitado
customer_name, customer_email, customer_country, customer_state, customer_city, customer_address, customer_ipDatos del cliente (customer_ip es requerido)
crypto_network, crypto_addressSolo pagos cripto
digital_wallet, pan_typeSolo si se usó Google Pay / Apple Pay
exchange_rate, exchange_rate_base, exchange_currency, exchange_amountSolo si hubo conversión de moneda
recurring_init_trans_id, recurring_token, schedule_idSolo si se usó recurring_init
vat_amountfloatSolo si se calculó IVA (vat_calc)
custom_dataobjectEco de lo que enviaste en el request
extended_data*stringSolo si está configurado "Add Extended Data to Callback"
connector_name, rrn, arn, approval_code, brand, gateway_id, extra_gateway_id, merchant_name, mid_name, issuer_country, issuer_bank*Datos extendidos del conector/adquirente
hashstringFirma — ver Signature

* Solo se incluyen si está configurado en Configuration → Protocol Mappings.

Reglas de entrega

  • Tu endpoint debe responder con HTTP 2xx para confirmar recepción.
  • Si no respondés 2xx, el callback no se reintenta automáticamente.
Bloqueo por timeouts

Si se acumulan 5 timeouts en 5 minutos para tu notification_URL, se bloquea por 15 minutos (afecta a todos los merchants que comparten esa URL). El bloqueo se levanta automáticamente, o manualmente desde Configuration → Merchants → Edit Merchant. El contador de timeouts se resetea si hay una respuesta exitosa.

Cascading

Si se dispara cascading para el pedido, en general vas a recibir solo el callback del último intento (donde se determina el estado final: settled o declined). En casos particulares, podés recibir el callback del primer intento si hace falta redirigir al cliente. Los intentos intermedios no generan callback.

Formato real del callback

Formato del callback

El callback llega como application/x-www-form-urlencoded (pares key=value separados por &), no como JSON. Los valores de status y type llegan en minúscula (status=success, type=sale). Los espacios llegan como + y los caracteres especiales (como @, :) van codificados (ej. %40, %3A).

Ejemplo de callback real

Así se ve un callback real (crudo, application/x-www-form-urlencoded) para un método de transferencia bancaria (ARS):

id=****************************&order_number=1&order_amount=150000.00&order_currency=ARS&order_description=Purchase&order_status=redirect&type=sale&status=waiting&date=2026-07-15+15%3A01%3A52&hash=****************************************&customer_name=John+Doe&customer_email=john.doe%40example.com&customer_country=AR&customer_state=Cordoba&customer_city=Cordoba&customer_address=Av+Arequipa+1234&customer_ip=***************