Webhook de eventos de Facturapi
POST
/invoices/webhook
const url = 'https://api.dev.lade.com.mx/invoices/webhook';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"type":"invoice.updated","data":{"id":"5f8a1b2c3d4e5f6a7b8c9d0e","status":"valid"}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.dev.lade.com.mx/invoices/webhook \ --header 'Content-Type: application/json' \ --data '{ "type": "invoice.updated", "data": { "id": "5f8a1b2c3d4e5f6a7b8c9d0e", "status": "valid" } }'Recibido directamente por Facturapi (no requiere Cognito), verificado con HMAC-SHA256 sobre el header X-Facturapi-Signature usando el secreto configurado. Procesa invoice.updated e invoice.canceled: sincroniza el status local con el de Facturapi y, si pasa a VALID y aún no hay PDF/XML guardados, los descarga y sube a S3. Eventos de otro tipo, o de una factura no encontrada localmente, se ignoran respondiendo 200.
Request Bodyrequired
Sección titulada «Request Bodyrequired»Media typeapplication/json
object
type
string
data
object
id
ID de factura en Facturapi
string
status
string
Example
{ "type": "invoice.updated", "data": { "id": "5f8a1b2c3d4e5f6a7b8c9d0e", "status": "valid" }}Responses
Sección titulada «Responses»Webhook procesado (o evento ignorado)
Media typeapplication/json
object
message
string
Example
{ "message": "Webhook processed"}Solicitud inválida
Media typeapplication/json
object
error
required
string
message
string
field
string
Example
{ "error": "Validation failed", "field": "email", "message": "Invalid email format"}No autenticado
Media typeapplication/json
object
error
required
string
message
string
field
string
Example
{ "error": "Unauthorized", "message": "Invalid or expired token"}