Constaia
Integraciones

Make

Valida documentos en Make con el módulo HTTP en multipart/form-data, enruta por veredicto con un Router y recibe eventos de Constaia con un webhook.

En Make (antes Integromat) llamas a Constaia con el módulo HTTP → Make a request, repartes el resultado con un Router según el veredicto y recibes eventos asíncronos con Webhooks → Custom webhook. No hace falta ningún conector específico.

Requisitos

  • Una cuenta de Make con un escenario.
  • Una clave de test ck_test_… del panel. Consulta Autenticación.
  • Un módulo anterior que entregue el fichero (Google Drive Download a file, adjunto de Gmail, Dropbox, un formulario…). En Make, los ficheros se pasan como file name + data.

Analizar un documento

Añade el módulo HTTP

Añade HTTP → Make a request después del módulo que trae el fichero y rellena:

CampoValor
URLhttps://api.constaia.com/v1/analyze
MethodPOST
HeadersName Authorization, Value Bearer ck_test_…
Body typeMultipart/form-data
Parse responseYes

Define los campos del formulario

En Fields añade dos entradas:

KeyField typeValor
fileFilemapea File name y Data del módulo anterior
optionsTextel JSON de opciones
options
{
  "expect": "medical_certificate_sport",
  "checks": { "max_age_days": 365, "require_signature": true, "require_stamp": true },
  "language": "es",
  "metadata": { "source": "make" }
}

Puedes mapear valores de módulos anteriores dentro del texto, por ejemplo el nombre del titular en checks.holder.full_name. Cuida que el resultado siga siendo JSON válido (comillas incluidas); si no, la API responde 400 invalid_options. Todas las opciones están en POST /v1/analyze.

Enruta con un Router

Con Parse response en Yes, Make convierte la respuesta en campos que puedes mapear: Data → verdict → status, Data → fields → document_number → value, etc. Añade un Router con tres rutas y un filtro en cada una:

RutaFiltro (Text operators: Equal to)Qué hacer
Válidoverdict.status = validGuardar los campos extraídos, aprobar
No válidoverdict.status = invalidAvisar al usuario con verdict.reasons[].message
Revisarverdict.status = reviewCrear una tarea de revisión humana

Cada campo extraído es un objeto con value, confidence, validated y source. Los estados se explican en Veredictos.

Controla errores y respuestas 202

Si Constaia devuelve un 4xx o 5xx, el módulo HTTP termina con error. Añade un manejador de errores (clic derecho → Add error handler) para registrar el error.code y el error.request_id de la respuesta. Los códigos están en Errores.

Si el análisis tarda más de 30 s (PDFs largos), la respuesta es un 202 con status: "queued" o "processing" y sin veredicto. Añade un filtro status = completed antes del Router, o usa "async": true y recibe el resultado por webhook (más abajo).

Alternativa: cuerpo JSON

Si tienes una URL https:// descargable del fichero, cambia Body type a Raw, Content type a JSON (application/json) y usa como Request content:

Request content
{
  "file_url": "https://files.example.com/receipts/123.pdf",
  "filename": "payment_receipt.pdf",
  "options": {
    "expect": "payment_receipt",
    "checks": { "expected_amount": 45, "expected_reference": "INSCRIPCION 123" }
  }
}

file_url debe ser https, sin IPs privadas, con un máximo de 20 MB y 15 s de descarga. filename es opcional y sustituye al nombre que Constaia deduce de la URL.

Probar en modo test

Con una clave ck_test_… no se consumen créditos y la respuesta depende del nombre del fichero. En Make puedes fijar el File name del campo file a mano, por ejemplo dni_valid.jpg, dni_expired.jpg o blurry.jpg, aunque el contenido sea otra imagen (tiene que ser un JPEG, PNG, WEBP, HEIC o PDF real). En JSON, usa "filename": "dni_valid.jpg".

FicheroCon expect: "es_dni"
dni_valid.jpgVálido
dni_expired.jpgNo válido (not_expired, severidad error)
blurry.jpgRevisar (low_quality, severidad warning)

Con esos tres nombres pruebas todas las rutas del Router. Más escenarios en Modo test.

Recibir eventos por webhook

El módulo Webhooks → Custom webhook te da una URL a la que Constaia envía los eventos. Make no ofrece una forma nativa de verificar la firma HMAC de Standard Webhooks sobre el cuerpo crudo, así que la integración segura consiste en no fiarte del contenido del evento y volver a leer el recurso con tu clave.

Crea el webhook y regístralo

Crea un escenario que empiece con Custom webhook, copia la URL y regístrala en el panel o por API:

Terminal
curl https://api.constaia.com/v1/webhook-endpoints \
  -H "Authorization: Bearer $CONSTAIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://hook.eu1.make.com/…","events":["analysis.completed","analysis.failed"]}'

Envía un análisis de prueba con "async": true para que Make detecte la estructura del evento (type, created_at, data). En las opciones avanzadas del webhook puedes activar la obtención de las cabeceras de la petición para leer webhook-id.

Descarta duplicados

Constaia reintenta cada entrega fallida durante unos 3 días con el mismo webhook-id. Guárdalo en un Data store y usa un filtro para parar si ya existe. Si no lees las cabeceras, usa como clave type + data.id.

Vuelve a leer el análisis

Añade un HTTP → Make a request con:

CampoValor
URLhttps://api.constaia.com/v1/analyses/ + data.id del webhook
MethodGET
HeadersAuthorization: Bearer ck_test_…
Parse responseYes

Antes, filtra que data.id empiece por an_. La API solo devuelve análisis de tu cuenta, así que un evento falsificado como mucho te hace releer un análisis tuyo. Usa esta respuesta, no la del webhook, para decidir en el Router. Para batch.completed, data.id empieza por bat_ y la lectura es GET /v1/batches/{id}.

Este patrón necesita que el análisis siga guardado: no uses keep_results: false en los análisis que quieras recibir por webhook, o la relectura devolverá 404.

Seguridad

  • No pegues una clave ck_live_… en escenarios que compartas o exportes como blueprint: la cabecera viaja con el módulo. Limita quién puede ver y editar el escenario y, si tu plan de Make ofrece conexiones o claves guardadas para el módulo HTTP, guárdala ahí.
  • Usa una clave de test mientras montas el escenario y cámbiala por la live solo al activarlo.
  • Make guarda los datos de cada ejecución en el historial. Si procesas documentos de identidad, revisa la retención de datos del escenario. Más en Almacenamiento y privacidad.

Límites

  • 20 MB por fichero; PDFs de hasta 30 páginas en síncrono y hasta 200 con async: true.
  • 2 peticiones por segundo por clave en el plan gratuito (10 en el de pago). Si un iterador lanza muchas peticiones seguidas, puedes recibir 429 con Retry-After; añade una pausa (módulo Sleep) o usa lotes. Ver Límites de uso.

Siguientes pasos

En esta página