Argentina: QR y transferencia bancaria
Cobra en ARS con un QR interoperable o una transferencia a una CVU, y paga a una CBU, CVU o alias, con la API Direct.
Cobra en Argentina en ARS sobre los rieles inmediatos del país, 24/7 y regulados por el BCRA,
sin contracargos de tarjeta. Dos métodos de cobro y un riel de pago funcionan con el mismo endpoint
/process/ que el resto de la API Direct:
| Capacidad | Método | payment_method.type | Ideal para |
|---|---|---|---|
| Cobro | Pago con QR (QR interoperable, Transferencias 3.0) | qr | Usuarios de billeteras y apps bancarias —Mercado Pago, Ualá, MODO y apps de bancos. Depósitos chicos y frecuentes, confirmados en segundos. |
| Cobro | Transferencia bancaria a una CVU | transfer | Usuarios bancarizados y montos altos. Cada cliente recibe una CVU y un alias fijos. |
| Pago | Transferencia a CBU, CVU o alias | operation_type: "withdrawal" | Retiros a tus usuarios finales, desde un saldo prefondeado. |
Todas las billeteras escanean el mismo QR interoperable: no hay un parámetro por billetera ni por banco.
Antes de empezar
- Tu negocio en Tonder está configurado con país Argentina y moneda ARS.
- Los métodos que vas a usar están habilitados para tu negocio. Un método que no está habilitado
responde
403 payment_method_not_enabled. - Las peticiones usan las URL base y los headers de la API Direct:
Authorization: Token YOUR_API_KEY,Content-Type: application/jsony un UUID v4 enX-Request-Id. Consulta Autenticación.
Reglas de la petición
| Campo | Regla |
|---|---|
currency | "ARS", igual a la moneda de tu negocio. Si lo omites, toma "MXN" por defecto y la petición se rechaza con 400 currency_mismatch. |
country | Opcional. "AR" fija la moneda en "ARS". |
amount | Decimal con punto y máximo 2 decimales. Más precisión responde 400 invalid_amount_precision. |
customer.name, customer.email | Obligatorios. |
customer.tax_id | Opcional, recomendado: el CUIT/CUIL del cliente, 11 dígitos sin guiones. |
client_reference | Tu referencia del pedido, con la que correlacionas los webhooks. Obligatorio para transfer y recomendado para qr. |
payment_method.apm_config.expires_in | Segundos hasta que vencen el QR o los datos de la transferencia. Por defecto 1800 (30 minutos). |
expires_in va dentro de payment_method.apm_config. Si lo envías directamente en
payment_method, se ignora sin error y aplica el valor por defecto.
Pago con QR
Crea el pago con payment_method.type: "qr":
curl -X POST https://stage.tonder.io/api/v1/process/ \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "X-Request-Id: 550e8400-e29b-41d4-a716-446655440000" \
-d '{
"operation_type": "payment",
"amount": 15000.00,
"currency": "ARS",
"customer": { "name": "Juan Pérez", "email": "juan.perez@email.com", "tax_id": "20123456789" },
"payment_method": { "type": "qr", "apm_config": { "expires_in": 1800 } },
"client_reference": "ORD-001",
"metadata": { "external_id": "ORD-001" }
}'curl -X POST https://app.tonder.io/api/v1/process/ \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "X-Request-Id: 550e8400-e29b-41d4-a716-446655440000" \
-d '{
"operation_type": "payment",
"amount": 15000.00,
"currency": "ARS",
"customer": { "name": "Juan Pérez", "email": "juan.perez@email.com", "tax_id": "20123456789" },
"payment_method": { "type": "qr", "apm_config": { "expires_in": 1800 } },
"client_reference": "ORD-001",
"metadata": { "external_id": "ORD-001" }
}'La respuesta es 201 con status: "Pending" y el QR en next_action.display_qr_code:
{
"id": "6f1c2c0e-2b7a-4a6e-9c2d-0a4c3b9f1e21",
"status": "Pending",
"amount": 15000.00,
"currency": "ARS",
"payment_method_type": "qr",
"client_reference": "ORD-001",
"created_at": "2026-10-26T18:02:11.120Z",
"next_action": {
"display_qr_code": {
"qr_string": "000201010212...6304ABCD",
"amount": 15000.00,
"currency": "ARS",
"expires_at": "2026-10-26T18:32:11Z",
"verify_transaction_status_url": "/transactions/6f1c2c0e-2b7a-4a6e-9c2d-0a4c3b9f1e21/"
}
}
}qr_stringes el payload EMVCo: dibújalo como QR con cualquier librería de QR.- Muestra el QR y su vencimiento. Después de
expires_atel pago pasa aExpired. - Mientras el pago está
Pending,GET /api/v1/transactions/{id}/devuelve el mismonext_action, así que puedes volver a dibujar el QR.
Transferencia bancaria (CVU)
Envía la misma petición con payment_method.type: "transfer". client_reference es obligatorio y
no puede ir vacío. La respuesta es 201 con status: "Pending" y los datos de la transferencia en
next_action.display_bank_transfer:
{
"id": "1c9e6a42-7d3b-4f0e-8a51-2b6d9c0e7f13",
"status": "Pending",
"amount": 250000.00,
"currency": "ARS",
"payment_method_type": "transfer",
"client_reference": "ORD-001",
"created_at": "2026-10-26T18:02:11.120Z",
"next_action": {
"display_bank_transfer": {
"account_type": "CVU",
"account_number": "0000000000000000000000",
"alias": "CLIENTE.JUAN.4411",
"holder_name": "ACCOUNT HOLDER NAME",
"holder_tax_id": "30-00000000-0",
"amount": 250000.00,
"currency": "ARS",
"reference": "ORD-001",
"expires_at": "2026-10-26T18:32:11Z",
"verify_transaction_status_url": "/transactions/1c9e6a42-7d3b-4f0e-8a51-2b6d9c0e7f13/"
}
}
}- Muestra la CVU y el alias con un botón de copiar, y
holder_namecomo destinatario. - La CVU y el alias son fijos por cliente: el mismo
customer.emailrecibe siempre la misma cuenta. referencees informativo. En Argentina el concepto de la transferencia no es confiable, así que Tonder atribuye un depósito por la cuenta (el cliente) y el pago pendiente, no porreference.- Si el monto recibido difiere del esperado, el pago igual se liquida como
Successcon el monto recibido, ymetadatasumamismatched_deposit: "True"yoriginal_expected_amount.
Reembolsos
| Método | Reembolso | Cómo |
|---|---|---|
Pago con QR (qr) | Total, una sola vez | POST /api/v1/process/ con operation_type: "refund", el mismo amount que el original, currency: "ARS" y original_transaction_id. El original debe estar en Success; un monto distinto responde 400 partial_refund_not_supported. |
Transferencia bancaria (transfer) | No por la API | Responde 400 refund_not_supported_for_method. Pide a soporte que devuelva los fondos. |
La petición y la respuesta siguen Reembolsos.
Pagos a CBU, CVU o alias
Envía un retiro por el mismo endpoint con transfer_method: "BANK_TRANSFER":
curl -X POST https://stage.tonder.io/api/v1/process/ \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "X-Request-Id: 7c9e6679-7425-40de-944b-e07fc1f90ae7" \
-d '{
"operation_type": "withdrawal",
"amount": 80000.00,
"currency": "ARS",
"transfer_method": "BANK_TRANSFER",
"description": "Retiro de saldo",
"client_reference": "payout-001",
"beneficiary": {
"account_type": "CBU",
"account": "0000000000000000000000",
"name": "María López",
"tax_id": "27234567891",
"email": "maria.lopez@email.com"
},
"metadata": { "external_id": "payout-001" }
}'curl -X POST https://app.tonder.io/api/v1/process/ \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "X-Request-Id: 7c9e6679-7425-40de-944b-e07fc1f90ae7" \
-d '{
"operation_type": "withdrawal",
"amount": 80000.00,
"currency": "ARS",
"transfer_method": "BANK_TRANSFER",
"description": "Retiro de saldo",
"client_reference": "payout-001",
"beneficiary": {
"account_type": "CBU",
"account": "0000000000000000000000",
"name": "María López",
"tax_id": "27234567891",
"email": "maria.lopez@email.com"
},
"metadata": { "external_id": "payout-001" }
}'| Campo | Regla |
|---|---|
transfer_method | "BANK_TRANSFER", el único valor en Argentina. "SPEI" o "DEBIT_CARD" responden 400 transfer_method_not_available_for_business. |
beneficiary.account_type | CVU, CBU o ALIAS. |
beneficiary.account | La CBU o CVU de 22 dígitos. Omítelo cuando account_type es ALIAS. |
beneficiary.alias | El alias de destino, cuando account_type es ALIAS. |
beneficiary.tax_id | Recomendado: el CUIT/CUIL del beneficiario. Tonder valida al beneficiario con él. |
- Los pagos descuentan tu saldo prefondeado. Un pago mayor al saldo se rechaza con
400 insufficient_balanceantes de enviarse. Consulta el saldo conGET /api/v1/withdrawals/balance. - Si
tax_idno coincide con los titulares de la cuenta, el pago terminaDeclinedconbeneficiary_tax_id_mismatch; una cuenta inactiva terminaDeclinedconbeneficiary_account_inactive.
| Estado | Significado | Webhook |
|---|---|---|
Pending | Recibido, en aprobación y ruteo. | withdrawal_Pending |
Processing | Enviado a ejecución. | — |
Success | Los fondos llegaron al beneficiario. | withdrawal_Success |
Declined | Rechazado. decline_code es uno de insufficient_balance, beneficiary_account_inactive, beneficiary_tax_id_mismatch, beneficiary_currency_mismatch o provider_rejected. | withdrawal_Declined |
Failed | Un error técnico; el equipo de Tonder interviene. | withdrawal_Failed |
El vocabulario completo de estados está en Retiros › Estados.
Web SDK y Hosted Checkout
Con el Web SDK, los dos métodos aparecen en tonder.getPaymentMethods() cuando
están habilitados —qr con la etiqueta "QR" y transfer con "Transferencia". Paga con el tipo del
método y dibuja el mismo next_action de la transacción que devuelve:
const result = await tonder.pay({
amount: 15000,
currency: 'ARS',
return_url: 'https://your-store.com/checkout/complete',
client_reference: 'ORD-001',
payment_method: { type: 'qr' }, // o 'transfer'
});Para Hosted Checkout en Argentina, consulta a tu contacto de Tonder.
Estados y webhooks
| Estado | Significado | Terminal | Webhook |
|---|---|---|---|
Pending | Se emitió el QR o la CVU; esperando al pagador. | No | payment_Pending |
Success | Los fondos se acreditaron y se confirmaron. Acredita a tu usuario. | Sí | payment_Success |
Expired | Pasó expires_at sin pago. | Sí | payment_Expired |
Cancelled | Tonder lo canceló antes del pago. | Sí | payment_Cancelled |
Los webhooks usan el formato Short, igual que en México, con
payment_method_type "qr" o "transfer" y currency "ARS". Un payment_Success suma los datos
del pagador en el nivel raíz: sender_name, sender_tax_id, sender_account (enmascarada),
sender_bank y provider_transaction_id —este último identifica la transacción en la institución
que la procesó, así que no construyas lógica sobre él. Un reembolso de QR envía refund_Pending y
después refund_Success o refund_Failed. La entrega y los reintentos siguen
Entrega y reintentos.
Errores
| Código | HTTP | Cuándo |
|---|---|---|
payment_method_not_enabled | 403 | El método no está habilitado para tu negocio. |
currency_mismatch | 400 | currency no es "ARS", o se omitió. |
invalid_amount_precision | 400 | El monto tiene más de 2 decimales. |
amount_below_minimum, amount_above_maximum | 400 | El monto está fuera de los límites del método. |
customer_tax_id_invalid | 400 | customer.tax_id no es un CUIT/CUIL válido. |
partial_refund_not_supported | 400 | Un reembolso de QR por un monto distinto del original. |
refund_not_supported_for_method | 400 | Un reembolso de una transferencia bancaria. |
refund_window_expired | 400 | El pago original es demasiado antiguo para reembolsarlo. |
transfer_method_not_available_for_business | 400 | Un pago con un transfer_method distinto de "BANK_TRANSFER". |
invalid_beneficiary_account | 400 | La CBU, la CVU o el alias no son válidos. |
insufficient_balance | 400, o Declined | El pago es mayor que tu saldo. |
beneficiary_account_inactive | Declined | La cuenta de destino está inactiva. |
beneficiary_tax_id_mismatch | Declined | beneficiary.tax_id no coincide con los titulares de la cuenta. |
beneficiary_currency_mismatch | Declined | La cuenta de destino no coincide con la moneda del pago. |
provider_unavailable | 503 | El servicio no está disponible por el momento. Reintenta más tarde. |
Pruebas
Los datos de prueba del sandbox para Argentina te los da tu contacto de Tonder. El resto de la configuración del sandbox está en Entorno de pruebas.
Montos y hora local
- Los montos van en ARS con 2 decimales. En tu interfaz, muéstralos al estilo argentino:
$ 1.234,56. - El dashboard y los reportes muestran la hora de Argentina,
America/Argentina/Buenos_Aires(UTC-3, sin horario de verano).
Todavía no disponible
Tarjetas, cuotas y 3DS en Argentina · USD o conversión de moneda · reembolsos parciales · reembolsos de transferencias bancarias por la API · Payment Links en ARS.
