Constaia
Conceptos

Exportaciones

Descarga los resultados de Constaia en JSON, CSV, Excel, XML, vCard o PDF, por análisis o combinados por lote, con enlaces firmados de 24 horas o bajo demanda.

Además de la respuesta JSON, Constaia genera ficheros listos para usar con los datos extraídos y el veredicto. Las exportaciones están incluidas en el precio del análisis: no gastan créditos.

Formatos

FormatoExtensiónContenido
json.jsonEl objeto de análisis completo (en un lote, una lista de análisis).
csv.csvUna fila por documento con los campos extraídos y el veredicto.
xlsx.xlsxLo mismo que csv, en una hoja de Excel.
xml.xmlLos mismos datos en XML.
vcard.vcfUna ficha de contacto (vCard 4.0) por documento: nombre, fecha de nacimiento, dirección y una nota con el tipo, el número de documento y el veredicto. Pensado para documentos de identidad.
pdf.pdfUn informe legible del análisis.

En csv y xlsx, cada fila empieza por unas columnas comunes (id, fichero, tipo, veredicto, motivos, avisos, fecha), sigue con los campos extraídos y termina con una columna metadata.<clave> por cada clave de metadata. Los campos anidados (por ejemplo lines de una factura) van como JSON en su celda. El CSV usa ; como separador, coma decimal y UTF-8 con BOM, para que Excel en español lo abra bien a la primera.

Las columnas de campos dependen del tipo de documento. La forma más rápida de verlas es generar una exportación en modo test, que es gratis.

Hay dos formas de obtenerlas

1. Al analizar: options.export

Pide los formatos en la misma petición. Cuando el análisis termina, exports trae una URL firmada por formato:

Terminal
curl https://api.constaia.com/v1/analyze \
  -H "Authorization: Bearer $CONSTAIA_API_KEY" \
  -F file=@invoice.pdf \
  -F 'options={"expect":"invoice","export":["xlsx","json"]}'
Respuesta (extracto)
"exports": {
  "xlsx": "https://api.constaia.com/v1/files/exp_01J9Z…?expires=1790244002&sig=…",
  "json": "https://api.constaia.com/v1/files/exp_01J9Z…?expires=1790244002&sig=…"
}
  • Las URL no necesitan clave de API: la firma es la autorización. Trátalas como un secreto y no las publiques.
  • Caducan a las 24 horas. Después devuelven 404.
  • GET /v1/analyses/{id} devuelve en exports los enlaces que siguen vigentes.
  • Si el análisis es asíncrono, las URL llegan en el webhook analysis.completed.

2. Bajo demanda: GET /v1/analyses/{id}/export

Genera el fichero en el momento, con tu clave de API, para cualquier análisis terminado cuyos resultados sigan guardados:

Terminal
curl -OJ "https://api.constaia.com/v1/analyses/an_01J9Z8Q3K4M5N6P7Q8R9S0T1V2/export?format=xlsx" \
  -H "Authorization: Bearer $CONSTAIA_API_KEY"
  • format admite json (por defecto), csv, xlsx, xml, vcard o pdf.
  • La respuesta es el fichero con Content-Disposition: attachment; filename="an_….xlsx" (por eso curl -OJ lo guarda con su nombre).
  • Si el análisis no ha terminado: 409 analysis_not_completed. Espera a completed.
  • Si se borró o se creó con keep_results: false: 404 resource_missing.

Descargar desde tu código

constaia.analyses.export() devuelve la Response sin procesar:

scripts/export-analysis.ts
import { writeFile } from "node:fs/promises";
import { Constaia, InvalidRequestError } from "@constaia/sdk";

const constaia = new Constaia();
const id = process.argv[2]!;

try {
  const res = await constaia.analyses.export(id, "xlsx");
  await writeFile(`${id}.xlsx`, Buffer.from(await res.arrayBuffer()));
  console.log(`Guardado ${id}.xlsx`);
} catch (err) {
  if (err instanceof InvalidRequestError && err.code === "analysis_not_completed") {
    console.error("El análisis aún no ha terminado.");
  } else {
    throw err;
  }
}

Para descargar una URL firmada de exports no hace falta el SDK ni la clave: basta un GET.

Terminal
curl -o factura.xlsx "https://api.constaia.com/v1/files/exp_01J9Z…?expires=1790244002&sig=…"

Exportación combinada de un lote

En un lote, options.export se aplica al lote: cuando terminan todos los documentos, Constaia genera un único fichero por formato con una fila por documento (campos extraídos y veredicto). Las URL llegan en exports del objeto lote y en el webhook batch.completed:

Terminal
curl https://api.constaia.com/v1/batches \
  -H "Authorization: Bearer $CONSTAIA_API_KEY" \
  -F "files[]=@factura-1.pdf" \
  -F "files[]=@factura-2.pdf" \
  -F 'options={"expect":"invoice","export":["xlsx"]}'
GET /v1/batches/{id} (extracto)
{
  "id": "bat_01J9Z…",
  "object": "batch",
  "status": "completed",
  "total": 2,
  "exports": { "xlsx": "https://api.constaia.com/v1/files/exp_01J9Z…?expires=…&sig=…" }
}

Es la forma más cómoda de pasar un montón de facturas a Excel. Guía completa: facturas a Excel.

Privacidad

Los ficheros exportados se guardan cifrados, como los documentos, y se borran al borrar el análisis (DELETE /v1/analyses/{id}). Los enlaces firmados caducan a las 24 horas. Más en almacenamiento y privacidad.

Siguientes pasos

En esta página