Pagos y clientes
Links de pago
Las ligas de pago te permiten cobrar a tus clientes sin una integración compleja. Genera una liga y compártela.
POST
/v1/payment-links
Crear liga de pago
Crea una nueva liga de pago.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
amount |
number | Sí | Monto en decimales (p. ej. 100.00 = $100.00) |
currency |
string | Sí | Código ISO (MXN, USD, COP, etc.) |
description |
string | No | Descripción del cobro |
customer_id |
string | No | ID del cliente a asociar |
expires_at |
timestamp | No | Fecha de expiración (ISO 8601) |
allow_partial |
boolean | No | Abonos: el pagador elige cuánto pagar y el link sigue abierto hasta completar el monto. Ignora max_payments. |
min_partial_amount |
number | No | Abono mínimo (el último puede ser menor si es lo que falta). |
success_url |
string | No | URL de redirección tras un pago exitoso |
curl -X POST https://recaudo.app/api/v1/payment-links \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"amount": 500.00,
"currency": "MXN",
"description": "Pago de servicio mensual",
"customer_id": "8e250c25-9d84-4892-98ec-d71fc1fcd3c7",
"success_url": "https://tuapp.com/pago-exitoso",
"metadata": {
"order_id": "ORD-123"
}
}'
$response = $client->post('/api/v1/payment-links', [
'json' => [
'amount' => 500.00,
'currency' => 'MXN',
'description' => 'Pago de servicio mensual',
'customer_id' => '8e250c25-9d84-4892-98ec-d71fc1fcd3c7',
'success_url' => 'https://tuapp.com/pago-exitoso',
'metadata' => [
'order_id' => 'ORD-123'
]
]
]);
const paymentLink = await fetch('/api/v1/payment-links', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_live_xxx',
'Content-Type': 'application/json',
},
body: JSON.stringify({
amount: 500.00,
currency: 'MXN',
description: 'Pago de servicio mensual',
customer_id: '8e250c25-9d84-4892-98ec-d71fc1fcd3c7',
success_url: 'https://tuapp.com/pago-exitoso',
metadata: { order_id: 'ORD-123' }
})
});
Respuesta
201
{
"object": "payment_link",
"url": "https://recaudo.app/pay/27gQ0PYtfPaT6BjuqY6cOn1dnbe8jAgT",
"data": {
"id": "177d4e1f-4727-4044-b0f6-86a06b94c132",
"token": "27gQ0PYtfPaT6BjuqY6cOn1dnbe8jAgT",
"tenant_id": "38d88a68-46d6-4e0f-b323-e4385b036901",
"customer_id": "9c2f1a80-3d5e-4b71-8a2c-0f6e5d4c3b2a",
"invoice_id": null,
"type": "one_time",
"status": "pending",
"title": "Pago de servicio mensual",
"description": null,
"amount": "500.00",
"amount_paid": "0.00",
"currency": "MXN",
"allow_partial": false,
"min_partial_amount": null,
"reference": null,
"expires_at": null,
"paid_at": null,
"max_attempts": 3,
"view_count": 0,
"metadata": {
"order_id": "ORD-123"
},
"created_at": "2026-08-09T10:30:00.000000Z",
"updated_at": "2026-08-09T10:30:00.000000Z"
}
}
Sobre la respuesta
- El objeto va anidado en
data;urlyobjectvan al nivel superior. ides un UUID, no lleva prefijo.- La liga pública se arma con
token, no conid:https://recaudo.app/pay/{token}. Si la cuenta tiene dominio propio,urlya viene con ese dominio. - Los montos son decimales en string (
"500.00"= $500.00 MXN), nunca centavos. - Para las rutas
/payment-links/:idse usa elid(UUID), no el token.
Otros endpoints
GET
/v1/payment-links
Listar ligas de pago
GET
/v1/payment-links/:id
Obtener liga
PATCH
/v1/payment-links/:id
Actualizar liga
POST
/v1/payment-links/:id/cancel
Cancelar liga
¿Te sirvió esta página?
Gracias por avisarnos.