Saltar al contenido principal
Las peticiónes asíncronas y por lotes entregan resultados a tu URL de webhook. Matil envía una petición POST con el payload del resultado cuando el procesamiento termina.

Configuración

Incluye un objeto webhook en tu petición:
{
  "webhook": {
    "url": "https://tu-servidor.com/webhook",
    "secret": "tu-secreto-webhook"
  }
}

Verificación de firma

Cada webhook incluye una cabecera X-Matil-Signature:
X-Matil-Signature: t=1234567890,v1=abc123...
Verificala para asegurar que la petición viene de Matil:
import hmac
import hashlib
import time

def verify_webhook(payload: bytes, header: str, secret: str) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    timestamp = parts["t"]
    signature = parts["v1"]

    signed_payload = f"{timestamp}.{payload.decode()}"
    expected = hmac.new(
        secret.encode(),
        signed_payload.encode(),
        hashlib.sha256
    ).hexdigest()

    if not hmac.compare_digest(signature, expected):
        return False
    if abs(time.time() - int(timestamp)) > 300:
        return False
    return True
Verifica siempre las firmas de los webhooks. Sin verificación, cualquiera podria enviar payloads falsos a tu endpoint.

Reintentos

Si tu endpoint no responde con un código 2xx, Matil reintenta hasta 3 veces con backoff exponencial.

Eventos

EventoDisparador
structurer.completedProcesamiento asíncrono completado.
structurer.failedProcesamiento asíncrono fallido.
batch.item.completedUn elemento del lote termino (modo incremental).
batch.completedEl lote completo termino.
batch.failedEl lote completo falló.