API REST v1

Documentación de la API UNIpagos

Cobros, transferencias, recargas y tipo de cambio. Autenticación Bearer, límite de 120 req/min e Idempotency-Key en operaciones POST.

Estado: operativa · v1 · Base https://unipagos.com.ar/api/v1

En 3 pasos

De cero a un cobro en producción

01

Abrí cuenta y claves

Registrate, entrá a API en el panel y generá sk_live_. El secret se muestra una sola vez.

02

Creá un checkout

POST /payments con monto y descripción. Recibís checkout_url para redirigir al pagador.

03

Escuchá el aviso

Registrá un webhook. Cuando el cliente paga, enviamos payment.paid firmado con HMAC-SHA256.

Autenticación

Todas las rutas privadas piden el header Bearer. Nunca expongas sk_live_ en el frontend: usalo solo en tu servidor.

Authorization: Bearer sk_live_…
Content-Type: application/json
Idempotency-Key: ord-1042-retry-1
  • 120 solicitudes por minuto por clave
  • Idempotency-Key en POST evita duplicados
  • CORS habilitado para integraciones
  • GET /health, /docs, /fx y /rails son públicos

Errores

La API responde JSON. El campo error identifica el caso; message explica qué corregir.

HTTPerrorCuándo
401unauthorizedFalta o es inválida la clave
404not_foundRuta o cobro inexistente
422transfer_failed / payment_failedDatos o saldo inválidos
429rate_limitedMás de 120 req/min
500internal_errorFalla inesperada

Cuenta y movimientos

GET /account · privado

Saldo, CVU y alias

curl https://unipagos.com.ar/api/v1/account \
  -H "Authorization: Bearer sk_live_..."
{
  "holder": "Ana López",
  "email": "ana@empresa.com",
  "currency": "USD",
  "available": 2480.00,
  "cvu": "00000031000...",
  "alias": "ana.lopez.demo",
  "status": "active"
}

GET /transactions · privado

Últimos 50 movimientos

curl https://unipagos.com.ar/api/v1/transactions \
  -H "Authorization: Bearer sk_live_..."
{
  "data": [
    {
      "id": "…",
      "type": "transfer_in",
      "amount": 125.50,
      "currency": "USD",
      "reference": "TR…",
      "status": "completed",
      "created_at": "2026-08-14 00:00:00"
    }
  ]
}

Transferencias

POST /transfers · privado

Enviar dinero a alias, CVU o email UNIpagos

curl -X POST https://unipagos.com.ar/api/v1/transfers \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: tx-1042" \
  -d '{"amount":125.50,"currency":"USD","description":"Orden #1042","destination":"ana.lopez.demo"}'
{
  "id": "TR04B6B576CF",
  "status": "completed",
  "amount": 125.5,
  "currency": "USD",
  "destination": "ana.lopez.demo"
}

Dispara el webhook transfer.completed si registraste una URL.

Cobros y checkout

POST /payments · POST /checkout · privado

Crear un link de pago

/checkout es el mismo recurso que /payments. Redirigí al cliente a checkout_url.

curl -X POST https://unipagos.com.ar/api/v1/payments \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1024" \
  -d '{"amount":49.90,"description":"Orden #1024"}'
{
  "id": "8f2febc3eb25c606b9cfe43f",
  "checkout_url": "https://unipagos.com.ar/pagar.php?t=8f2febc3eb25c606b9cfe43f",
  "status": "active",
  "amount": 49.9,
  "currency": "USD"
}

GET /payments/{id} · privado

Consultar si el cobro ya se pagó

curl https://unipagos.com.ar/api/v1/payments/8f2febc3eb25c606b9cfe43f \
  -H "Authorization: Bearer sk_live_..."
{
  "id": "8f2febc3eb25c606b9cfe43f",
  "status": "paid",
  "amount": 49.9,
  "currency": "USD",
  "paid_at": "2026-08-14 12:01:00"
}

GET /rails · público

Redes de efectivo

curl https://unipagos.com.ar/api/v1/rails
{
  "data": [
    {"id": "pagofacil", "name": "Pago Fácil"},
    {"id": "rapipago", "name": "Rapipago"}
  ]
}

POST /cash-in · privado

Recarga con cupón

curl -X POST https://unipagos.com.ar/api/v1/cash-in \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"rail":"pagofacil","amount":50}'
{
  "id": "CI…",
  "voucher": "PA84417885",
  "status": "completed",
  "rail": "pagofacil",
  "amount": 50,
  "currency": "USD"
}

GET /fx · público

Tipos de cambio vs USD

curl https://unipagos.com.ar/api/v1/fx
{
  "base": "USD",
  "rates": {
    "ARS": {"name": "Peso argentino", "usd": 1200},
    "BRL": {"name": "Real brasileño", "usd": 5.8}
  }
}

Webhooks

Registrá una URL HTTPS. UNIpagos envía POST JSON y firma el body con HMAC-SHA256 en X-Unipagos-Signature.

POST /webhooks · privado

Registrar destino

curl -X POST https://unipagos.com.ar/api/v1/webhooks \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"url":"https://tu-tienda.com/unipagos/webhook"}'
{
  "ok": true,
  "url": "https://tu-tienda.com/unipagos/webhook",
  "secret": "whsec_…",
  "events": ["payment.paid","transfer.completed","remittance.sent","invoice.paid"],
  "status": "active"
}

Guardá secret: se muestra al registrar (también podés hacerlo desde el panel).

Verificación

Validar la firma en tu servidor

<?php
$payload = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_UNIPAGOS_SIGNATURE'] ?? '';
$secret = getenv('UNIPAGOS_WEBHOOK_SECRET'); // whsec_...
$expected = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $sig)) {
    http_response_code(401);
    exit('invalid signature');
}
$event = json_decode($payload, true);
// $event['event'] = payment.paid | transfer.completed | remittance.sent | invoice.paid
http_response_code(200);
echo 'ok';
¿Necesitás emitir cuentas y tarjetas para tus propios clientes, con tu marca? Eso se hace con UNIpagos Infrastructure, una API aparte con su documentación propia.
Mercado PagoMercado Pago
dLocaldLocal
StripeStripe
PIXPIX
SPEISPEI
Pago FácilPago Fácil
ShopifyShopify
WooCommerceWooCommerce

Empezá a integrar ahora

Generá tus claves en el panel y hacé el primer POST /payments en minutos.