curl -X POST https://crypto.cucu.ai/api/v1/merchants/me/webhook \
-H "X-API-Key: sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-servidor.com/webhooks/cucu-crypto",
"events": ["payment.confirmed", "payment.failed", "charge.expired", "charge.cancelled"]
}'
const response = await fetch(
'https://crypto.cucu.ai/api/v1/merchants/me/webhook',
{
method: 'POST',
headers: { 'X-API-Key': 'sk_live_xxxx', 'Content-Type': 'application/json' },
body: JSON.stringify({
url: 'https://tu-servidor.com/webhooks/cucu-crypto',
events: ['payment.confirmed', 'payment.failed', 'charge.expired', 'charge.cancelled']
})
}
);
const data = await response.json();
import requests
response = requests.post(
'https://crypto.cucu.ai/api/v1/merchants/me/webhook',
headers={'X-API-Key': 'sk_live_xxxx', 'Content-Type': 'application/json'},
json={
'url': 'https://tu-servidor.com/webhooks/cucu-crypto',
'events': ['payment.confirmed', 'payment.failed', 'charge.expired', 'charge.cancelled']
}
)
print(response.json())
{
"url": "https://tu-servidor.com/webhooks/cucu-crypto",
"events": ["payment.confirmed", "payment.failed", "charge.expired", "charge.cancelled"],
"rotated": false,
"secret": "wh_sk_xxxxxxxxxxxxxxxxxxxx"
}
Endpoints
Webhooks de Merchant
Registra, prueba y elimina la URL de tu servidor para recibir eventos en tiempo real.
POST
/
api
/
v1
/
merchants
/
me
/
webhook
curl -X POST https://crypto.cucu.ai/api/v1/merchants/me/webhook \
-H "X-API-Key: sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-servidor.com/webhooks/cucu-crypto",
"events": ["payment.confirmed", "payment.failed", "charge.expired", "charge.cancelled"]
}'
const response = await fetch(
'https://crypto.cucu.ai/api/v1/merchants/me/webhook',
{
method: 'POST',
headers: { 'X-API-Key': 'sk_live_xxxx', 'Content-Type': 'application/json' },
body: JSON.stringify({
url: 'https://tu-servidor.com/webhooks/cucu-crypto',
events: ['payment.confirmed', 'payment.failed', 'charge.expired', 'charge.cancelled']
})
}
);
const data = await response.json();
import requests
response = requests.post(
'https://crypto.cucu.ai/api/v1/merchants/me/webhook',
headers={'X-API-Key': 'sk_live_xxxx', 'Content-Type': 'application/json'},
json={
'url': 'https://tu-servidor.com/webhooks/cucu-crypto',
'events': ['payment.confirmed', 'payment.failed', 'charge.expired', 'charge.cancelled']
}
)
print(response.json())
{
"url": "https://tu-servidor.com/webhooks/cucu-crypto",
"events": ["payment.confirmed", "payment.failed", "charge.expired", "charge.cancelled"],
"rotated": false,
"secret": "wh_sk_xxxxxxxxxxxxxxxxxxxx"
}
Registra la URL de tu servidor para recibir eventos en tiempo real. Ver Webhooks Salientes para el formato de los eventos y la verificación de firma.
Response
Response:
POST /merchants/me/webhook — Registrar o Rotar URL
Headers
| Header | Tipo | Req | Descripción |
|---|---|---|---|
X-API-Key | string | Sí | API Key del merchant |
Content-Type | string | Sí | application/json |
Request Body
| Campo | Tipo | Req | Descripción |
|---|---|---|---|
url | string | Sí | URL HTTPS donde CUCU enviará los eventos. Debe ser accesible desde internet. |
secret | string | No | Secreto para firmar los webhooks. Si se omite, CUCU genera uno automáticamente. |
events | array | No | Lista de eventos a suscribir. Si se omite, se suscriben todos. |
rotation_grace_seconds | int | No | Segundos que el secreto anterior sigue válido durante una rotación. Default: 3600. |
Response
| Campo | Tipo | Descripción |
|---|---|---|
url | string | URL registrada. |
events | array | Eventos suscritos. |
rotated | boolean | true si se rotó el secreto. |
secret | string | Secreto de firma. Solo aparece en el registro inicial o rotación. Guárdalo. |
curl -X POST https://crypto.cucu.ai/api/v1/merchants/me/webhook \
-H "X-API-Key: sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-servidor.com/webhooks/cucu-crypto",
"events": ["payment.confirmed", "payment.failed", "charge.expired", "charge.cancelled"]
}'
const response = await fetch(
'https://crypto.cucu.ai/api/v1/merchants/me/webhook',
{
method: 'POST',
headers: { 'X-API-Key': 'sk_live_xxxx', 'Content-Type': 'application/json' },
body: JSON.stringify({
url: 'https://tu-servidor.com/webhooks/cucu-crypto',
events: ['payment.confirmed', 'payment.failed', 'charge.expired', 'charge.cancelled']
})
}
);
const data = await response.json();
import requests
response = requests.post(
'https://crypto.cucu.ai/api/v1/merchants/me/webhook',
headers={'X-API-Key': 'sk_live_xxxx', 'Content-Type': 'application/json'},
json={
'url': 'https://tu-servidor.com/webhooks/cucu-crypto',
'events': ['payment.confirmed', 'payment.failed', 'charge.expired', 'charge.cancelled']
}
)
print(response.json())
{
"url": "https://tu-servidor.com/webhooks/cucu-crypto",
"events": ["payment.confirmed", "payment.failed", "charge.expired", "charge.cancelled"],
"rotated": false,
"secret": "wh_sk_xxxxxxxxxxxxxxxxxxxx"
}
POST /merchants/me/webhook/test — Probar Webhook
Envía un evento sintéticowebhook.test a tu URL registrada para verificar la integración end-to-end.
curl -X POST https://crypto.cucu.ai/api/v1/merchants/me/webhook/test \
-H "X-API-Key: sk_live_xxxx"
202 Accepted
{
"delivery_id": "d4e5f6a7-b8c9-0123-defa-456789abcdef",
"status": "enqueued"
}
DELETE /merchants/me/webhook — Eliminar Webhook
curl -X DELETE https://crypto.cucu.ai/api/v1/merchants/me/webhook \
-H "X-API-Key: sk_live_xxxx"
204 No Content⌘I