Leer una orden de compra
Una orden de compra es una promesa escrita en un documento, y hasta que alguien digite sus líneas en un sistema esa promesa no se puede verificar contra lo que realmente se envía. Este endpoint lee una orden de compra —con la plantilla propia de un comprador o la de un cliente— y devuelve artículos, cantidades, precios unitarios y condiciones de entrega como JSON estructurado.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Por qué las órdenes de compra se acumulan sin que las máquinas las lean
Un proveedor que atiende pedidos de decenas de clientes recibe órdenes de compra en tantos formatos como clientes tiene — cada sistema de compras exporta su propio diseño, su propia numeración, su propia manera de expresar una fecha de entrega. La orden en sí es sencilla: qué, cuánto, para cuándo, a qué precio. Extraer eso de un documento inconsistente a volumen es el verdadero trabajo.
Quién lee órdenes de compra todos los días
Equipos de operaciones de venta que ingresan pedidos de clientes entrantes a un sistema de gestión de pedidos, proveedores que confirman una orden contra el inventario disponible antes de aceptarla, plataformas de compras que necesitan normalizar pedidos de muchos formatos de comprador en un solo esquema interno, y pequeños fabricantes que todavía reciben órdenes de compra por fax o PDF de correo en lugar de EDI.
Lo que sale del otro lado
Envía la orden de compra, recibe de inmediato un task_id, y la tarea terminada devuelve número y fecha de la orden, datos del comprador y del proveedor, los artículos solicitados con cantidad y precio unitario, fecha de entrega y las condiciones indicadas — como campos JSON limpios listos para verificar contra el inventario o enviar a un sistema de pedidos, no una página de texto por releer.
Cómo se integra al ciclo de pedido a cobro
Como la llamada es asíncrona y se cobra por página, una orden de una sola página con un artículo cuesta lo mismo sin importar cómo esté formateada, mientras que un pedido largo con muchas líneas escala proporcionalmente: un flujo de recepción de pedidos vigila una bandeja de entrada o carpeta de carga, envía cada orden entrante en cuanto llega, y el webhook dispara la asignación de inventario en el instante en que los datos estructurados están listos.
Un documento más antiguo que el software que lo lee
La orden de compra es anterior a las computadoras por siglos — es la formalización de una promesa comercial sencilla que las empresas han intercambiado en papel desde mucho antes de que existieran los sistemas EDI o ERP. Lo que cambió es el volumen: un proveedor moderno que maneja esto a escala necesita la misma información que antes copiaba un empleado a mano, solo que a la velocidad necesaria para seguirle el ritmo a cientos de pedidos al día.
Qué puede hacer con ella
Automatización de ingreso de pedidos
Operaciones de venta envía las órdenes de compra entrantes de clientes a la API y carga las líneas extraídas directamente en el sistema de gestión de pedidos.
Verificación de asignación de inventario
Un proveedor verifica automáticamente las cantidades de la orden contra el stock disponible antes de confirmarla o dejarla pendiente.
Normalización multi-comprador
Una plataforma B2B recibe órdenes de compra de muchos sistemas de compras de clientes distintos y las normaliza en un solo esquema interno.
Manejo de órdenes por fax y correo
Un pequeño fabricante que todavía recibe pedidos por fax o PDF de correo convierte cada uno en datos estructurados sin volver a digitarlos a mano.
Preguntas frecuentes
¿Cómo uso la API Leer Órdenes de Compra?
Envíe el archivo de la orden a POST /ocr/purchase-order, reciba de inmediato un task_id, y obtenga el JSON estructurado por webhook o enlace firmado cuando esté listo.
¿Ofrece prueba gratuita?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cuál es el precio?
$0.010 por solicitud más $0.0575 por página, precio publicado y plano, así que el costo escala con la extensión del documento, no con la cantidad de artículos que contiene.
¿Funciona con cualquier plantilla de orden de compra?
Está construida para leer la estructura de una orden de compra en general y no un solo diseño fijo, así que se adapta entre formatos de comprador sin configuración por cliente.
¿Qué formatos puedo enviar?
Funcionan bien las órdenes de compra en PDF y los escaneos de imagen claros, incluyendo faxes escaneados; una fuente legible da el resultado más completo.
¿Detecta fechas y condiciones de entrega?
Sí, cuando están indicadas en el documento extrae la fecha de entrega solicitada y las condiciones listadas junto con las líneas de detalle.
¿Puedo enviar un lote de órdenes a la vez?
Cada solicitud procesa una orden de compra y devuelve su propio task_id, así que un lote es simplemente solicitudes en paralelo recogidas por webhook.
¿Se cobra si falla el procesamiento?
No. Una tarea fallida se reintenta automáticamente hasta tres veces y nunca se cobra; en su lugar recibe un error claro.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/ocr/purchase-order \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/ocr/purchase-order", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ocr/purchase-order",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ocr/purchase-order", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ocr/purchase-order", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"input": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ocr.purchase_order",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
max_pages | 10 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
413 | input_too_large | El archivo supera el límite de tamaño. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |