Skip to main content
Extraccion inteligente de datos de cualquier documento. Envia un archivo (PDF o imagen) junto con un esquema de extraccion en formato JSON, y recibe datos estructurados listos para usar.
POST https://api.camtomx.com/api/v3/camtomdocs/extract
Costo: Segun paginas procesadas (ver campo billed_pages en la respuesta).

Request

Headers

HeaderTipoRequeridoDescripcion
AuthorizationstringSiBearer <api_key>
Este endpoint usa multipart/form-data. No establezcas Content-Type manualmente — la mayoria de los clientes HTTP lo configuran automaticamente con el boundary correcto al enviar formularios.

Query parameters

country_code
string
required
Codigo de pais. Valores permitidos: COL, MEX, USA, ARG, WORLD.
json_schema
boolean
default:"false"
Si es true, el campo json_response dentro de json_data se trata como un JSON Schema Draft 7 valido. Si es false, el sistema infiere las descripciones automaticamente.
f_u
boolean
default:"false"
Flag interno adicional.

Body parameters (multipart/form-data)

json_data
string
required
String JSON con el esquema de extraccion. Debe contener tres campos:
  • document_type — Tipo de documento (ej. "invoice", "packing_list")
  • document_description — Descripcion de lo que se quiere extraer
  • json_response — JSON Schema (Draft 7) que define la estructura de salida
file_path
file
El archivo a procesar. Formatos soportados: PDF, JPEG, PNG, TIFF, BMP, WEBP.Debe proporcionarse file_path o file_url, no ambos.
file_url
string
URL del documento a procesar. Alternativa a subir el archivo directamente.Debe proporcionarse file_path o file_url, no ambos.

Estructura del campo json_data

El parametro json_data es un string JSON con la siguiente estructura:
{
  "document_type": "invoice",
  "document_description": "Factura comercial de importacion con datos del exportador e importador",
  "json_response": {
    "type": "object",
    "properties": {
      "nombre_campo": {
        "type": "string",
        "description": "Descripcion de lo que representa este campo"
      },
      "campo_numerico": {
        "type": "number",
        "description": "Descripcion del valor numerico a extraer"
      },
      "campo_array": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "subcampo": { "type": "string" }
          }
        },
        "description": "Lista de elementos a extraer"
      }
    },
    "required": ["nombre_campo"]
  }
}
El campo json_response se valida contra la especificacion JSON Schema Draft 7. No puede estar vacio.
Incluye description en cada propiedad del schema. La IA usa estas descripciones para entender mejor que dato extraer, especialmente cuando el nombre del campo es ambiguo.

Ejemplo de request

El siguiente ejemplo extrae datos de una factura comercial:
import requests
import json

json_data = {
    "document_type": "invoice",
    "document_description": "Factura comercial de importacion",
    "json_response": {
        "type": "object",
        "properties": {
            "invoice_number": {
                "type": "string",
                "description": "Numero de factura"
            },
            "date": {
                "type": "string",
                "description": "Fecha de la factura en formato YYYY-MM-DD"
            },
            "seller": {
                "type": "object",
                "properties": {
                    "name": {"type": "string", "description": "Nombre o razon social del vendedor"},
                    "tax_id": {"type": "string", "description": "RFC o tax ID del vendedor"},
                    "address": {"type": "string", "description": "Direccion del vendedor"}
                },
                "description": "Datos del vendedor/exportador"
            },
            "buyer": {
                "type": "object",
                "properties": {
                    "name": {"type": "string", "description": "Nombre o razon social del comprador"},
                    "tax_id": {"type": "string", "description": "RFC o tax ID del comprador"}
                },
                "description": "Datos del comprador/importador"
            },
            "line_items": {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "description": {"type": "string", "description": "Descripcion del producto"},
                        "quantity": {"type": "number", "description": "Cantidad"},
                        "unit_price": {"type": "number", "description": "Precio unitario en USD"},
                        "total": {"type": "number", "description": "Total de la linea en USD"}
                    }
                },
                "description": "Lineas de productos de la factura"
            },
            "total_amount": {
                "type": "number",
                "description": "Monto total de la factura en USD"
            },
            "currency": {
                "type": "string",
                "description": "Moneda de la factura (ej. USD, MXN, EUR)"
            }
        },
        "required": ["invoice_number", "total_amount", "line_items"]
    }
}

response = requests.post(
    "https://api.camtomx.com/api/v3/camtomdocs/extract",
    headers={"Authorization": "Bearer sk_tu_api_key"},
    params={"country_code": "MEX", "json_schema": "true"},
    files={"file_path": ("factura.pdf", open("factura.pdf", "rb"), "application/pdf")},
    data={"json_data": json.dumps(json_data)}
)

data = response.json()
print(f"Status: {data['status']}")
print(f"Factura: {data['document_data']['invoice_number']}")
print(f"Total: {data['document_data']['total_amount']}")
print(f"Paginas cobradas: {data['billed_pages']}")

Ejemplo con URL de archivo

Si el archivo ya esta alojado en un servidor, puedes usar file_url en lugar de subir el archivo:
import requests
import json

json_data = {
    "document_type": "packing_list",
    "document_description": "Lista de empaque con pesos y dimensiones",
    "json_response": {
        "type": "object",
        "properties": {
            "total_packages": {"type": "number", "description": "Total de bultos"},
            "total_weight_kg": {"type": "number", "description": "Peso total en kg"}
        }
    }
}

response = requests.post(
    "https://api.camtomx.com/api/v3/camtomdocs/extract",
    headers={"Authorization": "Bearer sk_tu_api_key"},
    params={"country_code": "MEX"},
    data={
        "json_data": json.dumps(json_data),
        "file_url": "https://example.com/documentos/packing-list.pdf"
    }
)

Response

Campos de respuesta

status
string
Estado de la extraccion. Valores posibles: "success" o "error".
document_data
object
Objeto con los datos extraidos del documento, estructurado segun el JSON Schema proporcionado en json_data.json_response. Los campos coinciden con las propiedades definidas en tu schema.
billed_pages
number
Numero de paginas del documento que fueron cobradas. Este valor determina el costo en creditos de la operacion.

Ejemplo de respuesta exitosa

{
  "status": "success",
  "document_data": {
    "invoice_number": "INV-2024-00847",
    "date": "2024-11-15",
    "seller": {
      "name": "Acme Manufacturing Co.",
      "tax_id": "US-EIN-12-3456789",
      "address": "1234 Industrial Blvd, Los Angeles, CA 90001"
    },
    "buyer": {
      "name": "Importaciones del Norte S.A. de C.V.",
      "tax_id": "IDN200315ABC"
    },
    "line_items": [
      {
        "description": "Hydraulic pump model HP-200, industrial grade",
        "quantity": 10,
        "unit_price": 450.00,
        "total": 4500.00
      },
      {
        "description": "Replacement seals kit for HP-200",
        "quantity": 20,
        "unit_price": 25.00,
        "total": 500.00
      }
    ],
    "total_amount": 5000.00,
    "currency": "USD"
  },
  "billed_pages": 2
}

Schemas para documentos comunes

Endpoints auxiliares

CamtomDocs tambien ofrece endpoints auxiliares que no consumen creditos:
EndpointMetodoDescripcion
/api/v3/camtomdocs/generate-schemaPOSTGenera un JSON Schema a partir de una descripcion en texto
/api/v3/camtomdocs/generate-excel-schemaPOSTGenera un JSON Schema a partir de un archivo Excel
/api/v3/camtomdocs/validate-schemaPOSTValida un JSON Schema contra la especificacion Draft 7
/api/v3/camtomdocs/validate-filePOSTValida un archivo y devuelve metadatos (tipo, paginas, tamano)

Errores comunes

CodigoCausaSolucion
400Campo json_data ausente o json_response vacioVerifica que json_data contenga un JSON valido con document_type, document_description y json_response
401API key invalida o ausenteRevisa el header Authorization
402Creditos insuficientesRecarga creditos en app.camtomx.com
422JSON Schema invalido o formato de archivo no soportadoValida tu schema con /api/v3/camtomdocs/validate-schema antes de enviar
429Limite de cuota excedidoEspera antes de reintentar
502Error en el procesamiento de IAReintenta la peticion. Si persiste, contacta soporte
Para la referencia completa de errores, consulta codigos de error.
Last modified on March 8, 2026