Abrí cuenta y claves
Registrate, entrá a API en el panel y generá sk_live_. El secret se muestra una sola vez.
API REST v1
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
Registrate, entrá a API en el panel y generá sk_live_. El secret se muestra una sola vez.
POST /payments con monto y descripción. Recibís checkout_url para redirigir al pagador.
Registrá un webhook. Cuando el cliente paga, enviamos payment.paid firmado con HMAC-SHA256.
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
La API responde JSON. El campo error identifica el caso; message explica qué corregir.
| HTTP | error | Cuándo |
|---|---|---|
| 401 | unauthorized | Falta o es inválida la clave |
| 404 | not_found | Ruta o cobro inexistente |
| 422 | transfer_failed / payment_failed | Datos o saldo inválidos |
| 429 | rate_limited | Más de 120 req/min |
| 500 | internal_error | Falla inesperada |
GET /account · privado
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
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"
}
]
}
POST /transfers · privado
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.
POST /payments · POST /checkout · privado
/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
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
curl https://unipagos.com.ar/api/v1/rails
{
"data": [
{"id": "pagofacil", "name": "Pago Fácil"},
{"id": "rapipago", "name": "Rapipago"}
]
}
POST /cash-in · privado
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
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}
}
}
Registrá una URL HTTPS. UNIpagos envía POST JSON y firma el body con HMAC-SHA256 en X-Unipagos-Signature.
POST /webhooks · privado
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
<?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';
Pago FácilGenerá tus claves en el panel y hacé el primer POST /payments en minutos.