Documentos IA — API Reference

API REST para la extracción automática de datos de escrituras públicas colombianas en PDF. Envía un archivo PDF y recibe un JSON estructurado con: número y fecha de escritura, matrículas inmobiliarias, tipo de acto jurídico, intervinientes (otorgantes y beneficiarios), cuantías y resumen — todo extraído de forma inteligente con IA.

🔗 Base URL

https://documentia.helppiu.com

📄 Formato

Todas las respuestas son JSON. Los uploads de PDF usan multipart/form-data. Tamaño máximo: 100 MB.

🤖 Motor de IA

Extracción inteligente con GPT-4o-mini de OpenAI. OCR con Tesseract para documentos escaneados.

⚡ Flujo Rápido

1. Obtén tu API Key  →  2. Envía un PDF con POST /analyze  →  3. Recibe el JSON con todos los datos extraídos.

Autenticación

Todos los endpoints que consumen cuota requieren una API Key. Se envía en el header X-API-Key.

🔑 API Key

Tu API Key tiene el formato docia_<32 caracteres hex> y se entrega al crear tu cuenta. Inclúyela en cada petición:

curl -H "X-API-Key: docia_tu_api_key_aqui" \ https://documentia.helppiu.com/api/v1/escrituras/analyze \ -F "file=@escritura.pdf"
Posibles errores de autenticación
401API Key inválida o no proporcionada.
403Cuenta desactivada o cuota de documentos agotada.

Códigos de Error

Todos los errores retornan {"detail": "Mensaje descriptivo del error"}

CódigoSignificadoCuándo ocurre
200ÉxitoOperación completada correctamente
400Petición inválidaArchivo no es PDF, campo requerido faltante
401No autenticadoAPI Key inválida o no enviada
403ProhibidoCuenta inactiva o cuota agotada
404No encontradoRecurso no existe
413Archivo muy grandePDF excede 100 MB
500Error internoError procesando el PDF

Análisis de Escrituras

Endpoints para analizar escrituras públicas y consultar el catálogo de actos jurídicos.

GET /api/v1/health Health check Pública

Verifica que el servicio está activo. Ideal para monitoreo y health checks automatizados.

Respuesta 200
{
  "status": "ok"
}
cURL
curl https://documentia.helppiu.com/api/v1/health
POST /api/v1/escrituras/analyze Analizar escritura pública API Key

Endpoint principal. Envía un PDF de escritura pública colombiana y recibe toda la información extraída automáticamente: fecha, número, actos jurídicos, intervinientes, cuantías, matrículas inmobiliarias y un resumen. Consume 1 documento de tu cuota por cada llamada exitosa.

Request — multipart/form-data
CampoTipoRequeridoDescripción
file binary (PDF) Requerido Archivo PDF de la escritura pública. Máximo 100 MB.
Header requerido
HeaderValor
X-API-Key docia_xxxxxxxx... Requerido
Respuesta 200 — Escritura analizada
{
  "Fecha escritura": "2023-11-15",
  "Número escritura": "5021",
  "actos": [
    {
      "tipo_de_acto": "LIQUIDACION DE LA COMUNIDAD",
      "resumen": {
        "pagina": "3",
        "texto": "Se procede a liquidar la comunidad entre..."
      },
      "cuantias": [
        { "pagina": 1, "valor": "500000000" }
      ],
      "intervinientes": {
        "otorgantes": [
          {
            "nivel": 1,
            "nombre": "JUAN PÉREZ GARCÍA",
            "numero_identificacion": "79123456",
            "pagina": "[1, 5, 8]"
          }
        ],
        "beneficiarios": []
      }
    }
  ],
  "matriculas": [
    {
      "numero": "370-123456",
      "pagina": "[1, 9, 10, 11, 15]"
    }
  ],
  "_metadata": {
    "account": "Notaría Central",
    "quota_used": 51,
    "quota_total": 100,
    "pages_total": 15,
    "pages_scanned": 5,
    "llm_usage": {
      "prompt_tokens": 2500,
      "completion_tokens": 1200,
      "total_tokens": 3700
    },
    "estimated_cost_usd": 0.000891,
    "ocr_time_s": 2.5,
    "extraction_time_s": 3.1,
    "total_time_s": 5.6
  }
}
Esquema de respuesta
CampoTipoDescripción
Fecha escriturastring | nullFecha del documento (formato YYYY-MM-DD cuando se detecta)
Número escriturastring | nullNúmero de la escritura pública
actos[]arrayLista de actos jurídicos encontrados en el documento
actos[].tipo_de_actostringClasificación del acto según catálogo de la Gobernación del Valle
actos[].resumenobject | nullResumen del acto con pagina (donde inicia) y texto
actos[].cuantias[]arrayValores monetarios: pagina (int) y valor (string en pesos)
actos[].intervinientesobjectContiene otorgantes[] y beneficiarios[]
intervinienteobjectCada persona: nivel (1=principal), nombre, numero_identificacion, pagina
matriculas[]arrayMatrículas inmobiliarias: numero y pagina (páginas donde aparece)
_metadataobjectInfo de consumo: cuota usada/total, tokens, costo estimado, tiempos de procesamiento
Errores
400Solo se aceptan archivos PDF.
401API Key inválida o no proporcionada.
403Cuenta desactivada o cuota de documentos agotada.
413Archivo demasiado grande. Máximo permitido: 100 MB.
500Error procesando el archivo PDF.
cURL
curl -X POST https://documentia.helppiu.com/api/v1/escrituras/analyze \ -H "X-API-Key: docia_tu_api_key_aqui" \ -F "file=@escritura_5021.pdf"
Python
import requests url = "https://documentia.helppiu.com/api/v1/escrituras/analyze" headers = {"X-API-Key": "docia_tu_api_key_aqui"} with open("escritura_5021.pdf", "rb") as f: response = requests.post(url, headers=headers, files={"file": f}) data = response.json() print(f"Escritura #{data['Número escritura']} — {data['Fecha escritura']}") for acto in data["actos"]: print(f" Acto: {acto['tipo_de_acto']}") for p in acto["intervinientes"]["otorgantes"]: print(f" Otorgante: {p['nombre']} ({p['numero_identificacion']})")
JavaScript (fetch)
const form = new FormData(); form.append("file", fileInput.files[0]); const res = await fetch( "https://documentia.helppiu.com/api/v1/escrituras/analyze", { method: "POST", headers: { "X-API-Key": "docia_tu_api_key_aqui" }, body: form, } ); const data = await res.json(); console.log(`Escritura #${data["Número escritura"]}`); console.log(`Actos encontrados: ${data.actos.length}`);
GET /api/v1/actos Catálogo de actos registrales Pública

Retorna el catálogo completo de actos jurídicos registrales que usa la IA para clasificar. Basado en la Gobernación del Valle del Cauca. No requiere autenticación.

Respuesta 200
[
  {
    "grupo_general": "TRANSFERENCIAS",
    "subgrupo_acto": "Venta de bien inmueble",
    "es_correcta": true
  },
  ...
]
cURL
curl https://documentia.helppiu.com/api/v1/actos
GET /api/v1/stats Estadísticas de consumo Pública

Estadísticas acumuladas de tokens consumidos desde el último reinicio del servicio. No requiere autenticación.

Respuesta 200
{
  "prompt_tokens": 12500,
  "completion_tokens": 4800,
  "total_tokens": 17300,
  "estimated_cost_usd": 0.003045
}
cURL
curl https://documentia.helppiu.com/api/v1/stats

Extracción Dinámica de Campos

Endpoint universal para extraer cualquier dato de cualquier documento PDF. Tú defines qué campos necesitas — el sistema aplica OCR e IA para encontrarlos. Funciona con cédulas, escrituras, RUT, certificados, facturas y cualquier documento en PDF.

POST /api/v1/extract Extraer campos de cualquier PDF API Key

Envía un PDF junto con la lista de campos que deseas extraer. La IA localiza y retorna exactamente los valores solicitados en formato JSON. Consume 1 documento de tu cuota por llamada exitosa.

Request — multipart/form-data
CampoTipoRequeridoDescripción
file binary (PDF) Requerido Archivo PDF del documento. Máximo 100 MB.
fields string (JSON) Requerido Array JSON con los campos a extraer. Cada elemento debe tener key (nombre en la respuesta) y description (qué buscar en el documento). Ver ejemplos abajo.
max_pages integer Opcional Máximo de páginas a analizar. Default: 10. Para cédulas use 2, para escrituras largas hasta 50.
Formato del parámetro fields
[
  {
    "key": "nombre_del_campo",
    "description": "Descripción de qué buscar en el documento y dónde"
  }
]

Regla principal: mientras más específica sea la description (mencionando la etiqueta exacta del documento), más precisa es la extracción.

Ejemplo 1 — Cédula de ciudadanía
[
  { "key": "numero_cedula",    "description": "Numero de cedula de ciudadania, retornar solo digitos sin puntos" },
  { "key": "nombre_completo",  "description": "Nombres del titular sin apellidos, buscar cerca de la etiqueta NOMBRES" },
  { "key": "apellidos",        "description": "Apellidos del titular, buscar cerca de la etiqueta APELLIDOS. El OCR puede fragmentar el texto, combina las lineas" },
  { "key": "fecha_nacimiento", "description": "Fecha de nacimiento en formato DD/MM/AAAA" },
  { "key": "lugar_nacimiento", "description": "Municipio exacto de nacimiento, no el departamento" },
  { "key": "fecha_expedicion", "description": "Fecha de expedicion del documento" },
  { "key": "lugar_expedicion", "description": "Municipio donde fue expedida la cedula" },
  { "key": "sexo",             "description": "Sexo del titular: M o F. Buscar cerca de la etiqueta SEXO o en el codigo MRZ del reverso" },
  { "key": "grupo_sanguineo",  "description": "Grupo sanguineo con RH del titular, ej: O+ A- B+ AB+. Buscar en reverso o inicio del codigo MRZ" }
]
cURL — Cédula
curl -X POST https://documentia.helppiu.com/api/v1/extract \ -H "X-API-Key: docia_tu_api_key_aqui" \ -F "file=@cedula.pdf" \ -F 'fields=[{"key":"numero_cedula","description":"Numero de cedula, solo digitos sin puntos"},{"key":"nombre_completo","description":"Nombres del titular, buscar cerca de etiqueta NOMBRES"},{"key":"apellidos","description":"Apellidos del titular, buscar cerca de etiqueta APELLIDOS"},{"key":"fecha_nacimiento","description":"Fecha de nacimiento DD/MM/AAAA"},{"key":"lugar_expedicion","description":"Ciudad donde fue expedida la cedula"},{"key":"grupo_sanguineo","description":"Grupo sanguineo con RH, ej O+ A- B+"}]' \ -F "max_pages=2"
Ejemplo 2 — Escritura pública
[
  { "key": "numero_escritura",   "description": "Numero de escritura publica, solo digitos" },
  { "key": "notaria",            "description": "Numero y ciudad de la notaria donde se otorgo" },
  { "key": "fecha_otorgamiento", "description": "Fecha en que fue otorgada la escritura" },
  { "key": "acto_juridico",      "description": "Tipo de acto: compraventa, hipoteca, donacion, etc." },
  { "key": "vendedor",           "description": "Nombre completo del vendedor o enajenante" },
  { "key": "comprador",          "description": "Nombre completo del comprador o adquirente" },
  { "key": "matricula",          "description": "Numero de matricula inmobiliaria del inmueble" },
  { "key": "valor_venta",        "description": "Valor o precio de venta en pesos colombianos" }
]
cURL — Escritura
curl -X POST https://documentia.helppiu.com/api/v1/extract \ -H "X-API-Key: docia_tu_api_key_aqui" \ -F "file=@escritura.pdf" \ -F 'fields=[{"key":"numero_escritura","description":"Numero de escritura publica, solo digitos"},{"key":"notaria","description":"Numero y ciudad de la notaria"},{"key":"fecha_otorgamiento","description":"Fecha en que fue otorgada"},{"key":"vendedor","description":"Nombre completo del vendedor"},{"key":"comprador","description":"Nombre completo del comprador"},{"key":"matricula","description":"Numero de matricula inmobiliaria"},{"key":"valor_venta","description":"Valor de venta en pesos colombianos"}]' \ -F "max_pages=10"
Ejemplo 3 — RUT / NIT
[
  { "key": "nit",                 "description": "NIT de la empresa, solo digitos sin guion ni digito de verificacion" },
  { "key": "razon_social",        "description": "Razon social o nombre de la empresa tal como aparece en el RUT" },
  { "key": "actividad_economica", "description": "Codigo CIIU y descripcion de la actividad economica principal" },
  { "key": "representante_legal", "description": "Nombre completo del representante legal" },
  { "key": "direccion",           "description": "Direccion principal del establecimiento o empresa" },
  { "key": "municipio",           "description": "Municipio o ciudad donde esta registrada la empresa" }
]
Ejemplo 4 — Certificado de tradición y libertad
[
  { "key": "matricula",      "description": "Numero de matricula inmobiliaria" },
  { "key": "titular",        "description": "Nombre del propietario actual del predio" },
  { "key": "descripcion",    "description": "Descripcion del inmueble: tipo, area, direccion" },
  { "key": "municipio",      "description": "Municipio donde esta ubicado el inmueble" },
  { "key": "gravamenes",     "description": "Hipotecas, embargos, afectaciones o limitaciones vigentes" },
  { "key": "fecha_consulta", "description": "Fecha de expedicion del certificado" }
]
Respuesta 200 — Campos extraídos
{
  "fields": {
    "numero_cedula":    "1144070039",
    "nombre_completo":  "ALVARO JOSE",
    "apellidos":        "TORRES BARANDICA",
    "fecha_nacimiento": "02/05/1994",
    "lugar_nacimiento": "CALI",
    "fecha_expedicion": "03/05/2012",
    "lugar_expedicion": "CALI",
    "sexo":             "M",
    "grupo_sanguineo":  "A-"
  },
  "_metadata": {
    "total_time_s":     5.2,
    "ocr_time_s":      4.1,
    "llm_time_s":      1.1,
    "pages_total":     2,
    "pages_scanned":   2,
    "llm_usage": {
      "prompt_tokens":     850,
      "completion_tokens": 110,
      "total_tokens":      960
    },
    "account":           "Mi Cuenta",
    "filename":          "cedula.pdf",
    "fields_requested":  ["numero_cedula", "nombre_completo", "..."]
  }
}
Esquema de respuesta
CampoTipoDescripción
fieldsobjectCada key solicitado como propiedad. Valor extraído o null si no se encontró.
_metadata.total_time_snumberTiempo total de procesamiento en segundos
_metadata.ocr_time_snumberTiempo de OCR (solo documentos escaneados)
_metadata.llm_time_snumberTiempo de respuesta del modelo de IA
_metadata.pages_totalintegerTotal de páginas del PDF
_metadata.llm_usageobjectTokens consumidos: prompt_tokens, completion_tokens, total_tokens
Errores
400Solo se aceptan archivos PDF / JSON inválido en fields / campo sin key.
401API Key inválida o no proporcionada.
403Cuenta desactivada o cuota de documentos agotada.
413Archivo demasiado grande. Máximo permitido: 100 MB.
500Error procesando el documento.
Python
import requests, json url = "https://documentia.helppiu.com/api/v1/extract" headers = {"X-API-Key": "docia_tu_api_key_aqui"} fields = [ {"key": "numero_cedula", "description": "Numero de cedula, solo digitos sin puntos"}, {"key": "nombre_completo", "description": "Nombres del titular, buscar cerca de etiqueta NOMBRES"}, {"key": "apellidos", "description": "Apellidos del titular, buscar cerca de etiqueta APELLIDOS"}, {"key": "fecha_nacimiento", "description": "Fecha de nacimiento DD/MM/AAAA"}, ] with open("cedula.pdf", "rb") as f: response = requests.post( url, headers=headers, files={"file": f}, data={"fields": json.dumps(fields), "max_pages": 2} ) data = response.json() for key, value in data["fields"].items(): print(f"{key}: {value}")
JavaScript (fetch)
const fields = [ { key: "numero_cedula", description: "Numero de cedula, solo digitos sin puntos" }, { key: "nombre_completo", description: "Nombres del titular, buscar cerca de etiqueta NOMBRES" }, { key: "apellidos", description: "Apellidos del titular, buscar cerca de etiqueta APELLIDOS" }, { key: "fecha_nacimiento", description: "Fecha de nacimiento DD/MM/AAAA" }, ]; const form = new FormData(); form.append("file", fileInput.files[0]); form.append("fields", JSON.stringify(fields)); form.append("max_pages", "2"); const res = await fetch("https://documentia.helppiu.com/api/v1/extract", { method: "POST", headers: { "X-API-Key": "docia_tu_api_key_aqui" }, body: form, }); const data = await res.json(); console.log("Campos extraídos:", data.fields);

Tabla de Endpoints

MétodoPathDescripciónAuth
GET/api/v1/healthHealth check
POST/api/v1/escrituras/analyzeAnalizar escritura pública (PDF)🔑 API Key
POST/api/v1/extractExtraer campos de cualquier PDF (cédulas, escrituras, RUT, etc.)🔑 API Key
GET/api/v1/actosCatálogo de actos registrales
GET/api/v1/statsEstadísticas de consumo