Nexcar

Documentos

Sube archivos individuales a un caso, consulta su OCR y reclasifícalos cuando lo necesites.

Endpoints#

MétodoRutaDescripción
GET/v1/documentsLista paginada de documentos de la empresa
POST/v1/documentsSube un documento a un caso
GET/v1/documents/{document_id}Consulta metadata y OCR del documento
GET/v1/documents/{document_id}/extraction-dataExtracción avanzada (vigencia, códigos QR/barras, titular)
DELETE/v1/documents/{document_id}Da de baja el documento (baja lógica)
POST/v1/documents/{document_id}/restoreRestaura un documento dado de baja
PATCH/v1/documents/{document_id}/ocrInyecta OCR de forma manual
POST/v1/documents/{document_id}/classifyReclasifica el documento (manual o automático)
POST/v1/documents/{document_id}/processLanza OCR automático
POST/v1/documents/{document_id}/reclassifyCambia el tipo y vuelve a procesar

GET /v1/documents — Listar documentos#

Devuelve la lista paginada de documentos de la empresa del usuario autenticado, ordenada del más reciente al más antiguo.

Requiere Bearer Token (JWT). A diferencia de los demás endpoints de esta serie, este no acepta x-api-key.

Query parameters#

ParámetroTipoDefaultDescripción
case_idUUID—Filtra por caso. Combinable con document_id (AND).
document_idUUID—Filtra por documento. Combinable con case_id (AND).
limitinteger10Tamaño de página (máx 100)
offsetinteger0Cursor numérico para paginación

Un case_id o document_id inexistente, o de otra compañía, devuelve una lista vacía (no 404/403) para no revelar la existencia de recursos ajenos.

Ejemplo con curl#

curl "https://api.nexcar.mx/v1/documents?case_id=11111111-2222-3333-4444-555555555555&limit=10&offset=0" \
  -H "Authorization: Bearer tu_token_jwt"

Respuesta 200#

{
  "data": [
    {
      "document_id": "abc123",
      "case_id": "11111111-2222-3333-4444-555555555555",
      "type": "factura",
      "mime_type": "application/pdf",
      "status": "completed",
      "url": "https://...nexcar.mx/storage/.../factura.pdf",
      "created_at": "2026-06-08T10:00:00+00:00",
      "active": true
    }
  ],
  "pagination": {
    "limit": 10,
    "offset": 0,
    "total": 1,
    "has_more": false
  }
}

Referencia de campos#

CampoTipoDescripción
document_idUUIDIdentificador del documento
case_idUUIDCaso al que pertenece
typestring | nullTipo del documento
mime_typestring | nullMIME del archivo
statusstring | nullEstado de procesamiento del documento
urlstring | nullURL pública del archivo almacenado
created_atstringFecha de creación en formato ISO 8601
activebooleantrue = documento activo
pagination.totalintegerTotal de registros que coinciden
pagination.has_morebooleantrue si hay más páginas

Errores#

HTTPCódigoCausa
400VALIDATION_ERRORcase_id/document_id no son UUID válidos, o limit/offset no son enteros
401UNAUTHORIZEDFalta el token, o no se pudo determinar company_id desde el token/perfil

POST /v1/documents — Subir documento#

Sube un archivo y lo asocia a un caso.

Cuerpo#

CampoTipoRequeridoDescripción
case_idUUIDSíCaso al que pertenece el documento
mime_typestringSíMIME del archivo (ver tabla de soportados)
urlstringCondicionalURL pública del archivo. XOR con base64.
base64stringCondicionalContenido en base64. XOR con url.
typestringNoTipo del documento (ver Tipos de documento). Si no lo envías, se intentará detectar automáticamente.
parent_file_idUUIDNoDocumento padre dentro del mismo caso (p. ej. anexo de una factura).

Límite de tamaño: 20 MB por archivo. Debes enviar uno y solo uno entre url y base64.

MIME types soportados#

application/pdf · application/xml · image/jpeg · image/jpg · image/png · image/tiff · image/tif · image/x-tiff

Ejemplo con curl (URL)#

curl -X POST https://api.nexcar.mx/v1/documents \
  -H "x-api-key: tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "case_id": "11111111-2222-3333-4444-555555555555",
    "url": "https://tu-storage.example.com/repuve-consulta.pdf",
    "mime_type": "application/pdf",
    "type": "repuve"
  }'

Ejemplo con curl (base64)#

BASE64=$(base64 -i ./factura.pdf)
curl -X POST https://api.nexcar.mx/v1/documents \
  -H "x-api-key: tu_api_key" \
  -H "Content-Type: application/json" \
  -d "{
    \"case_id\": \"11111111-2222-3333-4444-555555555555\",
    \"base64\": \"$BASE64\",
    \"mime_type\": \"application/pdf\",
    \"type\": \"factura\"
  }"

Respuesta 201#

{
  "document_id": "abc123",
  "url": "https://...nexcar.mx/storage/.../repuve-consulta.pdf"
}

Errores#

HTTPCódigoCausa
400MISSING_PARAMETERFalta case_id, mime_type o la fuente del archivo
400VALIDATION_ERRORUUID inválido, MIME no soportado, archivo > 20 MB, ambos url y base64
404RESOURCE_NOT_FOUNDEl case_id o el parent_file_id no existe

GET /v1/documents/{document_id}#

Devuelve metadata, OCR y datos extraídos del documento.

Ejemplo con curl#

curl https://api.nexcar.mx/v1/documents/abc123 \
  -H "x-api-key: tu_api_key"

Respuesta 200#

{
  "case_id": "11111111-2222-3333-4444-555555555555",
  "url": "https://...nexcar.mx/storage/.../factura.pdf",
  "mime_type": "application/pdf",
  "type": "factura",
  "json_ocr": { "...": "..." },
  "parsed_data": {
    "vin": "3VWFE21C04M000001",
    "rfc_emisor": "ABC010101AAA",
    "monto_total": 285000.00,
    "fecha_emision": "2024-08-15"
  },
  "validity": {
    "document_validity": "vigente",
    "codes": ["QR detectado"],
    "userInfo": { "nombre": "JUAN PÉREZ GARCÍA" }
  }
}

json_ocr y parsed_data son null mientras el OCR no haya terminado. Para no estar haciendo polling, configura un webhook.

POST /v1/documents/{document_id}/classify#

Cambia o asigna el tipo del documento. Útil cuando subiste un archivo sin type y deseas clasificarlo manualmente, o cuando quieres forzar una nueva detección automática.

curl -X POST https://api.nexcar.mx/v1/documents/abc123/classify \
  -H "x-api-key: tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "type": "tenencia" }'

Si omites el cuerpo, ejecuta clasificación automática con base en el contenido.

POST /v1/documents/{document_id}/reclassify#

Cambia el tipo del documento y relanza el OCR con la nueva clasificación. La respuesta es 202 Accepted con el job_id del nuevo procesamiento.

curl -X POST https://api.nexcar.mx/v1/documents/abc123/reclassify \
  -H "x-api-key: tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "type": "factura_xml" }'