[ 01 ]
POST /v1/payment-links
Create customers, invoices and payment links with a single call.
[ Developer platform ]
Connect your system to Recaudo through the REST API, the MCP server for AI agents or signed webhooks.
185
REST endpoints
41
resources
130
MCP tools
69
webhook events
[ API REST ]
[ 01 ]
POST /v1/payment-links
Create customers, invoices and payment links with a single call.
[ 02 ]
payment_link.paid
Every payment, message and CRM change reaches your server, signed.
[ 03 ]
Authorization: Bearer sk_live_••••
Per-environment keys, IP allowlists and usage logs per key.
[ Live ]
curl https://recaudo.app/api/v1/payment-links \
-H "Authorization: Bearer $RECAUDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"amount":95,"currency":"USD","description":"Installment 4 of 12"}'
const res = await fetch("https://recaudo.app/api/v1/payment-links", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RECAUDO_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({"amount":95,"currency":"USD","description":"Installment 4 of 12"}),
});
const { data, url } = await res.json();
import os, requests
res = requests.post(
"https://recaudo.app/api/v1/payment-links",
headers={"Authorization": f"Bearer {os.environ['RECAUDO_API_KEY']}"},
json={"amount":95,"currency":"USD","description":"Installment 4 of 12"},
)
link = res.json()
Response · 201
{
"object": "payment_link",
"data": {
"id": "9c4f1e3b-0a2c-4d9e-8f71-5b6c3d2e1a40",
"token": "kX7mQ2pL9vR4tN8w",
"amount": "95.00",
"currency": "USD",
"description": "Installment 4 of 12",
"status": "active"
},
"url": "https://recaudo.app/pay/kX7mQ2pL9vR4tN8w"
}
$
[ MCP ]
The MCP server uses the same REST API and the same key, so the agent only sees what your account sees.
$ claude mcp add recaudo -e RECAUDO_API_KEY=$RECAUDO_API_KEY -- npx -y @recaudo/mcp-server
[ 04 ]
resumen_cobranza()
Your agent calls Recaudo tools as if they were its own functions.
[ 05 ]
How much do I have overdue by more than 30 days?
resumen_cobranza
You have $3,610 USD overdue by more than 30 days across 41 installments.
Ask in plain language and the agent looks up, creates or moves whatever it needs.
[ 06 ]
One line of configuration in the MCP client you already use.
[ Webhooks ]
Live deliveries
POST https://your-system.com/webhooks/recaudo
Verify the signature
The X-Recaudo-Signature header carries t=timestamp,v1=signature. Sign "timestamp.body" with your secret and compare.
const [t, v1] = header.split(",").map((p) => p.split("=")[1]);
const expected = crypto
.createHmac("sha256", process.env.RECAUDO_WEBHOOK_SECRET)
.update(`${t}.${rawBody}`)
.digest("hex");
const valid = crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected));payment.created
payment.succeeded
payment.failed
payment.refunded
payment.canceled
payment_link.created
payment_link.updated
payment_link.paid
payment_link.expired
payment_link.canceled
subscription.created
subscription.updated
subscription.activated
subscription.canceled
subscription.paused
subscription.resumed
subscription.renewed
subscription.trial_ending
subscription.payment_failed
invoice.created
invoice.updated
invoice.deleted
invoice.finalized
invoice.paid
invoice.payment_failed
invoice.payment_action_required
invoice.voided
invoice.upcoming
customer.created
customer.updated
customer.deleted
customer.tag.added
customer.tag.removed
payment_method.attached
payment_method.detached
payment_method.updated
payment_method.expiring
conversation.created
conversation.assigned
conversation.transferred
conversation.resolved
conversation.closed
conversation.message.received
conversation.message.sent
conversation.tag.added
conversation.tag.removed
lead.created
lead.converted
deal.created
deal.updated
deal.stage_changed
deal.won
deal.lost
follow_up.created
follow_up.started
follow_up.completed
follow_up.rescheduled
follow_up.cancelled
order.created
order.confirmed
order.shipped
order.delivered
order.completed
order.cancelled
coupon.applied
flow_run.started
flow_run.completed
flow_run.failed
flow_run.waiting