Transacciones sin bandera
On Us API te permite procesar transacciones con tarjeta directamente a través de nuestra red, sin pasar por una marca (Visa, Mastercard, etc.).
Qué puedes hacer
| Recurso | Operaciones |
|---|---|
| Transacciones | Autorizar, reversar por ID de transacción, reversar por ID externo |
| Presentaciones | Enviar clearing, reversar una presentación |
Idempotencia
Todos los endpoints de escritura requieren el header X-Idempotency-Key — un UUID v4 que generas por cada operación lógica.
X-Idempotency-Key: a1b2c3d4-e5f6-7890-abcd-ef1234567890
Si envias la misma clave mientras el request original todavía está procesándose, la API devuelve 409 Conflict. Una vez que el request original completa, reintentar con la misma clave devuelve la respuesta original.
Montos
Los valores monetarios se representan siempre como strings con hasta 2 decimales, acompañados de un código de moneda ISO 4217:
{ "amount": "1000.00", "currency": "ARS" }
{ "amount": "1000", "currency": "CLP" }
Cada request maneja tres contextos de monto:
| Campo | Significado |
|---|---|
transaction | Monto en la moneda de la transacción (ej. moneda local en el comercio) |
settlement | Monto en la moneda de liquidación entre Pomelo y el adquirente |
details | Desglose itemizado (monto base, comisiones, impuestos, etc.) |
Instrumentos
Las transacciones se pueden iniciar con distintos tipos de instrumento según el endpoint:
| Tipo | Endpoint | Descripción |
|---|---|---|
ACCOUNT | /transactions/authorize | Referencia una cuenta Pomelo por ID |
CARD_ID | /transactions/authorize | Referencia una tarjeta Pomelo por ID (sin datos crudos de tarjeta) |
Presentaciones (clearing)
Las presentaciones se procesan de forma asíncrona. La API responde con 202 Accepted y un estado PENDING de inmediato. El resultado final se entrega por webhook.
Se soportan un tipo de presentación:
type | Caso de uso |
|---|---|
PRESENTMENT | Clearing estándar único para una transacción |
Formato de error
Todas las respuestas de error siguen un envelope unificado:
{
"error": {
"error_code": "BAD_REQUEST",
"message": "El cuerpo del request contiene campos inválidos.",
"details": [
{
"code": "REQUIRED_FIELD_MISSING",
"message": "El campo 'transaction.type' es requerido."
}
]
}
}
| HTTP code | error_code | Cuándo |
|---|---|---|
400 | BAD_REQUEST | Sintaxis inválida o campo requerido faltante |
401 | INVALID_TOKEN | Token ausente o expirado |
403 | FORBIDDEN | Acceso denegado |
409 | IDEMPOTENCY_KEY_IN_USE | La idempotency key está siendo procesada |
500 | INTERNAL_SERVER_ERROR | Error inesperado del servidor |
Estado de la transacción
Las respuestas de autorización y reversa son sincrónicas. El campo status indica el resultado:
status | Significado |
|---|---|
APPROVED | La transacción fue aceptada |
REJECTED | La transacción fue rechazada — consulta status_detail y extra_detail para el motivo |
Valores comunes de status_detail en rechazos: INSUFFICIENT_FUNDS, TRANSACTION_NOT_PERMITTED, INVALID_CARD, LIMIT_EXCEEDED.