Saltar al contenido principal

API de Webhooks

Configura webhooks para recibir notificaciones sobre eventos.

Listar Webhooks

GET /v1/webhooks

Respuesta:

{
"success": true,
"webhooks": [
{
"id": "wh_abc123",
"url": "https://your-server.com/webhook",
"events": ["index.complete", "security.alert"],
"active": true,
"createdAt": "2024-01-10T08:00:00Z"
}
]
}

Crear Webhook

POST /v1/webhooks

Cuerpo de la Solicitud:

{
"url": "https://your-server.com/webhook",
"events": ["index.complete", "security.alert"],
"secret": "tu-secreto-webhook"
}

Respuesta:

{
"success": true,
"webhook": {
"id": "wh_xyz789",
"url": "https://your-server.com/webhook",
"events": ["index.complete", "security.alert"],
"active": true
}
}

Eliminar Webhook

DELETE /v1/webhooks/:id

Eventos Disponibles

EventoDescripción
index.startedLa indexación ha comenzado
index.completeLa indexación se completó exitosamente
index.failedLa indexación falló
security.alertNueva vulnerabilidad de seguridad encontrada
analysis.completeAnálisis completado

Payload del Webhook

Todos los webhooks reciben un payload JSON:

{
"event": "index.complete",
"timestamp": "2024-01-15T10:30:00Z",
"project": {
"id": "proj_abc123",
"name": "my-app"
},
"data": {
"filesCount": 234,
"symbolsCount": 1847,
"duration": 45
}
}

Verificación de Firmas

Los webhooks incluyen un header de firma para verificación:

X-ArchiCore-Signature: sha256=abc123...

Verificación (Node.js):

const crypto = require('crypto');

function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');

return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(`sha256=${expected}`)
);
}

Política de Reintentos

Los envíos de webhook fallidos se reintentan:

  • Intento 1: Inmediato
  • Intento 2: Después de 1 minuto
  • Intento 3: Después de 5 minutos
  • Intento 4: Después de 30 minutos
  • Intento 5: Después de 2 horas

Después de 5 intentos fallidos, el webhook se desactiva.