Qué usar
Cuándo usar analyze, classify, lotes, el widget, el servidor MCP o una herramienta no-code en Constaia, con costes, latencia y límites de cada opción.
Constaia ofrece varias formas de procesar documentos. Todas usan la misma API y las mismas claves; cambian el coste, la latencia y quién sube el fichero.
Resumen
| Opción | Para qué | Coste | Respuesta |
|---|---|---|---|
POST /v1/analyze | Veredicto + datos extraídos de un documento | 1 crédito por cada 2 páginas (mínimo 1) | Síncrona hasta 30 s; si no, 202 y webhook |
POST /v1/classify | Saber solo qué tipo de documento es | 0,2 créditos | Síncrona |
POST /v1/batches | Muchos documentos a la vez (1–100) | Como analyze, por documento | Siempre 202; webhook batch.completed |
Widget <constaia-upload> | Captura en el navegador con cámara y control de calidad | El del análisis que hace tu backend | La que devuelva tu backend |
| Servidor MCP | Que un agente de IA (Claude, Cursor…) analice documentos | Como analyze / classify | Herramientas MCP |
| No-code | n8n, Make, Zapier, Power Automate… con peticiones HTTP | Como analyze / classify | Según la herramienta |
Cómo decidir
| Pregunta | Si la respuesta es sí |
|---|---|
| ¿Necesitas saber si el documento es válido y sacar sus datos? | analyze con expect y checks. |
| ¿Solo necesitas enrutar (¿es una factura o un justificante?) sin extraer datos? | classify. Cuesta una quinta parte. |
| ¿Recibes varios documentos de golpe (una carpeta, un correo con adjuntos, una importación)? | batches, con exportación combinada. |
| ¿El usuario sube el documento desde el navegador o el móvil y quieres guiar la foto? | Widget en el frontend + analyze en tu backend. |
| ¿Trabajas desde un asistente de IA o un agente? | Servidor MCP. |
| ¿No quieres escribir código? | Guía no-code de tu herramienta. |
Puedes combinarlas: por ejemplo, classify para decidir el tipo y después analyze con el expect adecuado,
o el widget en el formulario y lotes para las importaciones masivas.
Coste
analyze:ceil(páginas / 2)créditos, mínimo 1. Un DNI con las dos caras en un fichero o un PDF de 2 páginas cuesta 1 crédito; un PDF de 5 páginas, 3.classify: 0,2 créditos por documento.- Lotes: cada documento se cobra como un
analyze. En modo live se comprueba antes que tengas al menos 1 crédito por documento (si no, 402). - Las exportaciones van incluidas. El modo test no cobra nunca.
Ver Créditos y facturación y Precios.
Latencia
analyzeyclassifyesperan hasta 30 segundos. Si el análisis no ha terminado, responden 202 con el análisis enqueuedoprocessingy el resultado llega por webhook o consultandoGET /v1/analyses/{id}.- Con
async: truela respuesta es siempre 202 inmediata. - Los lotes son siempre asíncronos: recibes
analysis.review_requiredyanalysis.failedpor documento y un únicobatch.completedal final.
Límites
| Límite | Valor |
|---|---|
| Tamaño por fichero | 20 MB |
| Páginas por PDF | 30 en síncrono, 200 con async: true o en lotes |
| Documentos por lote | 1–100 |
Tipos en expect | 1–20 |
| Peticiones por segundo | Por clave: 2 en el plan gratuito, 10 en el de pago |
| Análisis síncronos simultáneos | Por cuenta: 2 en el plan gratuito, 10 en el de pago (los lotes y async: true no cuentan) |
| Páginas por minuto | Por cuenta: 60 en el plan gratuito, 600 en el de pago (ver Límites de uso) |
Ejemplos
analyze
curl https://api.constaia.com/v1/analyze \
-H "Authorization: Bearer $CONSTAIA_API_KEY" \
-F file=@dni_valid.jpg \
-F 'options={"expect":"es_dni","checks":{"min_age_years":18}}'Devuelve el análisis completo: document, verdict, fields, checks, warnings. Ver
Inicio rápido.
classify
curl https://api.constaia.com/v1/classify \
-H "Authorization: Bearer $CONSTAIA_API_KEY" \
-F file=@dni_valid.jpg \
-F 'options={"expect":"es_dni"}'{
"object": "classification",
"status": "completed",
"document": { "type": "es_dni", "label": "DNI (España)", "confidence": 0.97, "side": "both", "country": "ESP" },
"candidates": [{ "type": "es_dni", "confidence": 0.97 }],
"verdict": {
"expected": ["es_dni"],
"match": true,
"status": "valid",
"reasons": [{ "code": "type_match", "severity": "info", "message": "El documento es DNI (España)." }]
},
"warnings": []
}El veredicto de classify solo evalúa el tipo (type_match o type_mismatch): no comprueba caducidad ni
extrae campos.
Lote
curl https://api.constaia.com/v1/batches \
-H "Authorization: Bearer $CONSTAIA_API_KEY" \
-F "files[]=@factura-001.pdf" \
-F "files[]=@factura-002.pdf" \
-F 'options={"expect":"invoice","export":["xlsx"]}'Responde 202 con un objeto batch (bat_...) en processing. Cuando termina recibes batch.completed con
counts y la exportación combinada en exports.xlsx, una fila por documento. Ver
Lotes masivos.
Widget
<script type="module" src="https://cdn.jsdelivr.net/npm/@constaia/widget@0.1"></script>
<constaia-upload endpoint="/api/constaia" document="es_dni" lang="es"></constaia-upload>El widget nunca lleva la clave: envía el fichero a tu endpoint (/api/constaia), y es tu backend el que
llama a POST /v1/analyze con el expect y los checks que decida. Ver Widget.
MCP
claude mcp add constaia --env CONSTAIA_API_KEY=ck_test_... -- npx -y @constaia/mcpExpone las herramientas analyze_document, classify_document, list_document_types, get_analysis y
get_balance. Ver Servidor MCP.
No-code
En n8n, Make, Zapier o Power Automate usas el módulo HTTP de la herramienta para llamar a POST /v1/analyze.
Ver las guías de n8n, Make y Zapier.
Próximamente
- Enlaces de verificación (
POST /v1/verification-links): una URL que envías al usuario para que suba el documento sin pasar por tu backend. Hoy responde 501not_implemented. - Nodo oficial de n8n y claves publicables para navegador.
Siguientes pasos
Conceptos clave
Tipos de documento, expect, veredictos, motivos, campos, checks, warnings, modos test y live, créditos, almacenamiento, webhooks e idempotencia en Constaia.
Modo test
Cómo funcionan las claves ck_test_ de Constaia, qué devuelve cada fichero de prueba y cómo escribir tests automatizados con Vitest, PHPUnit o pytest.