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:
| Campo | Valor |
|---|---|
| URL | https://api.constaia.com/v1/analyze |
| Method | POST |
| Headers | Name Authorization, Value Bearer ck_test_… |
| Body type | Multipart/form-data |
| Parse response | Yes |
Define los campos del formulario
En Fields añade dos entradas:
| Key | Field type | Valor |
|---|---|---|
file | File | mapea File name y Data del módulo anterior |
options | Text | el JSON de opciones |
{
"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:
| Ruta | Filtro (Text operators: Equal to) | Qué hacer |
|---|---|---|
| Válido | verdict.status = valid | Guardar los campos extraídos, aprobar |
| No válido | verdict.status = invalid | Avisar al usuario con verdict.reasons[].message |
| Revisar | verdict.status = review | Crear 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:
{
"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".
| Fichero | Con expect: "es_dni" |
|---|---|
dni_valid.jpg | Válido |
dni_expired.jpg | No válido (not_expired, severidad error) |
blurry.jpg | Revisar (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:
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:
| Campo | Valor |
|---|---|
| URL | https://api.constaia.com/v1/analyses/ + data.id del webhook |
| Method | GET |
| Headers | Authorization: Bearer ck_test_… |
| Parse response | Yes |
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
n8n
Valida documentos desde n8n con el nodo HTTP Request (multipart o JSON), enruta por veredicto y recibe webhooks de Constaia verificando la firma.
Zapier
Valida documentos en Zapier con Webhooks by Zapier (JSON con file_url) o Code by Zapier (base64), filtra por veredicto y recibe eventos con Catch Hook.