Métodos de pago🇦🇷 Argentina

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:

CapacidadMétodopayment_method.typeIdeal para
CobroPago con QR (QR interoperable, Transferencias 3.0)qrUsuarios de billeteras y apps bancarias —Mercado Pago, Ualá, MODO y apps de bancos. Depósitos chicos y frecuentes, confirmados en segundos.
CobroTransferencia bancaria a una CVUtransferUsuarios bancarizados y montos altos. Cada cliente recibe una CVU y un alias fijos.
PagoTransferencia a CBU, CVU o aliasoperation_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/json y un UUID v4 en X-Request-Id. Consulta Autenticación.

Reglas de la petición

CampoRegla
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.
countryOpcional. "AR" fija la moneda en "ARS".
amountDecimal con punto y máximo 2 decimales. Más precisión responde 400 invalid_amount_precision.
customer.name, customer.emailObligatorios.
customer.tax_idOpcional, recomendado: el CUIT/CUIL del cliente, 11 dígitos sin guiones.
client_referenceTu referencia del pedido, con la que correlacionas los webhooks. Obligatorio para transfer y recomendado para qr.
payment_method.apm_config.expires_inSegundos 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_string es el payload EMVCo: dibújalo como QR con cualquier librería de QR.
  • Muestra el QR y su vencimiento. Después de expires_at el pago pasa a Expired.
  • Mientras el pago está Pending, GET /api/v1/transactions/{id}/ devuelve el mismo next_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_name como destinatario.
  • La CVU y el alias son fijos por cliente: el mismo customer.email recibe siempre la misma cuenta.
  • reference es 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 por reference.
  • Si el monto recibido difiere del esperado, el pago igual se liquida como Success con el monto recibido, y metadata suma mismatched_deposit: "True" y original_expected_amount.

Reembolsos

MétodoReembolsoCómo
Pago con QR (qr)Total, una sola vezPOST /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 APIResponde 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" }
  }'
CampoRegla
transfer_method"BANK_TRANSFER", el único valor en Argentina. "SPEI" o "DEBIT_CARD" responden 400 transfer_method_not_available_for_business.
beneficiary.account_typeCVU, CBU o ALIAS.
beneficiary.accountLa CBU o CVU de 22 dígitos. Omítelo cuando account_type es ALIAS.
beneficiary.aliasEl alias de destino, cuando account_type es ALIAS.
beneficiary.tax_idRecomendado: 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_balance antes de enviarse. Consulta el saldo con GET /api/v1/withdrawals/balance.
  • Si tax_id no coincide con los titulares de la cuenta, el pago termina Declined con beneficiary_tax_id_mismatch; una cuenta inactiva termina Declined con beneficiary_account_inactive.
EstadoSignificadoWebhook
PendingRecibido, en aprobación y ruteo.withdrawal_Pending
ProcessingEnviado a ejecución.—
SuccessLos fondos llegaron al beneficiario.withdrawal_Success
DeclinedRechazado. decline_code es uno de insufficient_balance, beneficiary_account_inactive, beneficiary_tax_id_mismatch, beneficiary_currency_mismatch o provider_rejected.withdrawal_Declined
FailedUn 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

EstadoSignificadoTerminalWebhook
PendingSe emitió el QR o la CVU; esperando al pagador.Nopayment_Pending
SuccessLos fondos se acreditaron y se confirmaron. Acredita a tu usuario.Sípayment_Success
ExpiredPasó expires_at sin pago.Sípayment_Expired
CancelledTonder 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ódigoHTTPCuándo
payment_method_not_enabled403El método no está habilitado para tu negocio.
currency_mismatch400currency no es "ARS", o se omitió.
invalid_amount_precision400El monto tiene más de 2 decimales.
amount_below_minimum, amount_above_maximum400El monto está fuera de los límites del método.
customer_tax_id_invalid400customer.tax_id no es un CUIT/CUIL válido.
partial_refund_not_supported400Un reembolso de QR por un monto distinto del original.
refund_not_supported_for_method400Un reembolso de una transferencia bancaria.
refund_window_expired400El pago original es demasiado antiguo para reembolsarlo.
transfer_method_not_available_for_business400Un pago con un transfer_method distinto de "BANK_TRANSFER".
invalid_beneficiary_account400La CBU, la CVU o el alias no son válidos.
insufficient_balance400, o DeclinedEl pago es mayor que tu saldo.
beneficiary_account_inactiveDeclinedLa cuenta de destino está inactiva.
beneficiary_tax_id_mismatchDeclinedbeneficiary.tax_id no coincide con los titulares de la cuenta.
beneficiary_currency_mismatchDeclinedLa cuenta de destino no coincide con la moneda del pago.
provider_unavailable503El 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.

Siguientes pasos

¿Te resultó útil esta página?

En esta página