Constaia

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ónPara quéCosteRespuesta
POST /v1/analyzeVeredicto + datos extraídos de un documento1 crédito por cada 2 páginas (mínimo 1)Síncrona hasta 30 s; si no, 202 y webhook
POST /v1/classifySaber solo qué tipo de documento es0,2 créditosSíncrona
POST /v1/batchesMuchos documentos a la vez (1–100)Como analyze, por documentoSiempre 202; webhook batch.completed
Widget <constaia-upload>Captura en el navegador con cámara y control de calidadEl del análisis que hace tu backendLa que devuelva tu backend
Servidor MCPQue un agente de IA (Claude, Cursor…) analice documentosComo analyze / classifyHerramientas MCP
No-coden8n, Make, Zapier, Power Automate… con peticiones HTTPComo analyze / classifySegún la herramienta

Cómo decidir

PreguntaSi 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

  • analyze y classify esperan hasta 30 segundos. Si el análisis no ha terminado, responden 202 con el análisis en queued o processing y el resultado llega por webhook o consultando GET /v1/analyses/{id}.
  • Con async: true la respuesta es siempre 202 inmediata.
  • Los lotes son siempre asíncronos: recibes analysis.review_required y analysis.failed por documento y un único batch.completed al final.

Límites

LímiteValor
Tamaño por fichero20 MB
Páginas por PDF30 en síncrono, 200 con async: true o en lotes
Documentos por lote1–100
Tipos en expect1–20
Peticiones por segundoPor clave: 2 en el plan gratuito, 10 en el de pago
Análisis síncronos simultáneosPor cuenta: 2 en el plan gratuito, 10 en el de pago (los lotes y async: true no cuentan)
Páginas por minutoPor cuenta: 60 en el plan gratuito, 600 en el de pago (ver Límites de uso)

Ejemplos

analyze

Terminal
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

Terminal
curl https://api.constaia.com/v1/classify \
  -H "Authorization: Bearer $CONSTAIA_API_KEY" \
  -F file=@dni_valid.jpg \
  -F 'options={"expect":"es_dni"}'
Respuesta (extracto)
{
  "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

Terminal
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

registro.html
<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

Terminal
claude mcp add constaia --env CONSTAIA_API_KEY=ck_test_... -- npx -y @constaia/mcp

Expone 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 501 not_implemented.
  • Nodo oficial de n8n y claves publicables para navegador.

Siguientes pasos

En esta página