API Documentation

Extraction endpoints

Standard REST endpoints to convert files to JSON or JSON to Excel using your schema.

PDF-to-JSON

PDF data extraction to JSON

Endpoint

POSThttps://www.claix.dev/api/pdf-json

This endpoint accepts a PDF file and returns a single JSON object with the data extracted from the document, following exactly the structure you define via a schema. It works with selectable-text PDFs and scanned PDFs, because analysis is performed by an AI model with native document understanding, not a plain-text extractor.

It is intended for server-to-serverintegrations (backends, scripts, n8n/Zapier/Make). It must not be called from an end user's browser because it requires a secret API key.

Unlike Excel/CSV, the full PDF is treated as a single data source and the response contains exactly one record in data — ideal for invoices, contracts, forms, certificates, or reports.

1. Authentication

Every request must include your API key. It is a personal server credential and should be handled with the same care as a database password.

Option A — Dedicated header (recommended):

x-api-key: <YOUR_API_KEY>

Option B — Standard Authorization header:

Authorization: Bearer <YOUR_API_KEY>

Either one is sufficient. If you send both, x-api-key takes priority.

Before processing the PDF, the system validates that:

  • The API key exists and is active.
  • The associated account is active (not suspended).

If validation fails, the request is rejected with 401 without processing the file.

2. Request format

Method: POST · Content-Type: multipart/form-data (required)

FieldTypeRequiredDescription
fileBinary fileYesThe PDF to analyze. Must be the file itself, not a path or URL.
schema_idText (UUID)YesSchema previously created in your account, of type PDF → JSON.

Field names must be exactly file and schema_id. Aliases such as pdf, documento, or upload are not supported.

The schema_id must correspond to a schema of type PDF → JSON. If you send one of Excel → JSON or another type, you will receive 400.

File requirements:

  • Format: .pdf only (validated by MIME type and extension).
  • Cannot be empty (0 bytes).
  • Maximum size: 15 MB (413 error if exceeded).
  • Compatible with text and scanned PDFs.

3. How to build the request

  1. Have your API key and the correct schema_id ready.
  2. Build a POST request to the endpoint URL.
  3. Add the authentication header.
  4. Send multipart/form-data with file (PDF) and schema_id.
  5. Check the HTTP status code: only 200 indicates success.

4. Request examples

See the panel on the right for examples in cURL, JavaScript, Node.js, Python, PHP, and n8n.

5. Successful response format

200 OK · Content-Type: application/json

{
  "success": true,
  "schema_utilizado": "Facturas de Proveedores",
  "total_registros": 1,
  "data": [
    {
      "numero_factura": "F-2026-00456",
      "fecha_emision": "2026-03-14",
      "proveedor": "Suministros Industriales del Ebro S.L.",
      "importe_total": 1284.50,
      "moneda": "EUR"
    }
  ]
}
FieldTypeDescription
successbooleanAlways true when HTTP is 200.
schema_utilizadostringName of the applied schema (not the id).
total_registrosnumberAlways 1: one document = one extracted record.
dataarrayContains exactly one object with the schema properties. Values not found are null.

If a schema property represents a list (e.g. invoice line items), instances are grouped in an array. If the schema expects a single value but there are multiple instances, the most relevant one is extracted.

6. Error codes

{
  "error": "Descripción legible del problema.",
  "detalle": "Información técnica adicional (solo presente en algunos casos)."
}

400 — Missing file or schema_id, invalid multipart, not a PDF, empty file, corrupt file, or schema of the wrong type.

401 — Authentication failed.

404 — schema_id does not exist or does not belong to your account.

413 — PDF exceeds 15 MB.

422 — PDF read but no extractable data according to the schema.

502 — AI service failure (transient).

405 — Method other than POST. · 500 — Internal error.

7. Code summary

CodeCategoryRetry?
200Success
400Client error (malformed file or data)No — fix the request first
401Authentication errorNo — fix credentials first
404Resource not foundNo — fix schema_id first
405Incorrect HTTP methodNo — fix the method first
413PDF too largeNo — reduce file size first
422No extractable dataNo — review PDF/schema first
500Internal server errorYes, with caution
502AI service failureYes, recommended with backoff

8. Best practices

  • Validate the HTTP status code before reading data[0].
  • Check the PDF size on your client before sending it.
  • Remember: data always has exactly one element (one document = one object).
  • Retry automatically only on 500 and 502, never on 400, 401, 404, 413, or 422.
  • Clear descriptions on schema properties improve accuracy on documents with non-standard layouts.
  • Do not include your API key in frontend code or public repositories.

Request examples

curl -X POST "https://www.claix.dev/api/pdf-json" \
  -H "x-api-key: <TU_API_KEY>" \
  -F "file=@./factura_marzo.pdf" \
  -F "schema_id=3c7a9f21-4b8e-4d1a-9c6f-2e0d8a5b7c4f"