Extraer montos
Una factura esconde el número que realmente importa entre un subtotal, una línea de impuesto y un cargo de envío, muchas veces en una divisa que el sistema debe inferir del contexto en lugar de leerla de un campo limpio. Este endpoint de extracción de montos financieros lee la prosa que rodea cada cifra y devuelve cada valor monetario que encuentra, etiquetado según lo que representa y con su divisa identificada, en vez de dejarlo buscando símbolos de dólar con una expresión regular y esperando que nada se escape.
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.
El desorden que esto resuelve
Las cifras financieras rara vez llegan como datos estructurados limpios fuera de un software contable. Los informes de gastos, los correos de proveedores, los recibos escaneados y pasados por OCR, y las cláusulas de contratos en texto libre mezclan totales, subtotales, descuentos e impuestos en el orden en que a quien redactó se le ocurrió escribirlos, a veces en más de una divisa dentro del mismo párrafo cuando un contrato menciona tanto una tarifa local como una penalidad denominada en moneda extranjera. Este endpoint existe para el momento en que normalmente alguien tendría que sentarse a copiar números a mano en una hoja de cálculo.
Cómo se ve cada monto extraído
POST /text/extract-amounts devuelve cada mención monetaria con su valor numérico, su divisa y una etiqueta que describe de qué tipo de monto se trata cuando el texto lo deja claro: un total, un impuesto, un descuento, un recargo por mora, un depósito. Ese etiquetado es lo que distingue este endpoint de un simple detector de números: 'total: 1200 USD' y 'recargo por mora: 45 USD' son datos muy distintos, y confundirlos es exactamente lo que rompe una conciliación automática.
La ambigüedad de divisa es el fallo silencioso
El símbolo de dólar por sí solo es reclamado por más de veinte divisas en el mundo, y un número junto a un punto en vez de una coma como separador decimal cambia por completo el valor según la convención regional: 1.234,56 y 1234.56 no son el mismo número escrito de dos formas, pueden representar magnitudes genuinamente distintas si se interpretan bajo la suposición equivocada. Leer los montos en el contexto de la oración que los rodea, en lugar de aislados, es cómo este endpoint evita ese tipo de error silencioso.
Dónde importa más la precisión
Esto apunta directamente a un uso financiero y operativo, no a minería de texto casual: equipos de cuentas por pagar que concilian facturas de proveedores, equipos de compras que auditan partidas de contratos, y equipos de soporte que verifican montos de reembolso mencionados en correspondencia con clientes necesitan que la cifra extraída sea exacta, porque un monto mal leído en este dominio no es un error cosmético, es un error financiero.
Cómo se integra en un flujo financiero
La llamada es asíncrona: se envía un documento, se recibe de inmediato un task_id, y los montos estructurados llegan por su webhook firmado apenas termina la extracción, o mediante un enlace firmado disponible durante 24 horas. El costo escala con la longitud del documento —un recibo corto cuesta una fracción de un contrato de varias páginas— y una tarea que falla tras sus reintentos jamás se cobra, así que un procesamiento por lotes nunca cobra de más por errores en silencio.
Qué puede hacer con ella
Conciliación de facturas a gran escala
Extraer el total, el impuesto y cualquier línea de descuento de un lote de facturas de proveedores en formatos mixtos para cruzarlas automáticamente contra órdenes de compra.
Auditoría financiera de contratos
Extraer cada cláusula monetaria de un contrato de arrendamiento o servicio —depósito, penalidad, cuota mensual— para verificar que coincida con lo negociado antes de firmar.
Procesamiento de informes de gastos
Leer solicitudes de reembolso en texto libre y extraer el monto reclamado y su divisa sin exigir al personal llenar un formulario rígido campo por campo.
Verificación de reembolsos en tickets de soporte
Analizar el mensaje de un cliente que menciona un cargo en disputa para confirmar el monto y la divisa exactos antes de que un agente procese el reembolso.
Preguntas frecuentes
¿Cómo se extraen montos de un texto con la API?
Se envía el texto a POST /text/extract-amounts, se recibe de inmediato un task_id, y la lista de montos, divisas y etiquetas extraídas llega por webhook o mediante un enlace firmado cuando termina el procesamiento.
¿Detecta la divisa automáticamente?
Sí; lee el contexto que rodea la cifra para determinar la divisa incluso cuando el símbolo por sí solo sería ambiguo, como un signo de dólar que podría corresponder a varias divisas distintas.
¿Distingue un total de un impuesto o un descuento?
Cuando el texto de origen lo deja claro, cada monto se devuelve etiquetado según lo que representa, de modo que un total y un recargo por mora en el mismo documento se devuelven como cifras separadas e identificadas.
¿Existe un plan gratuito?
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ánto cuesta la API para extraer montos?
El precio es de 0.003 dólares por solicitud más 0.013 dólares por cada 1000 palabras del texto de entrada, y solo se cobra por las tareas que se completan; una tarea fallida tras los reintentos nunca se cobra.
¿Maneja tanto la coma como el punto como separador decimal?
Sí, interpreta el formato numérico según el contexto en lugar de asumir una sola convención, lo cual importa porque 1.234,56 y 1234.56 representan valores distintos según el formato regional.
¿Se puede procesar un lote grande de facturas a la vez?
Sí, cada documento es una tarea asíncrona independiente, así que se pueden enviar tantos como se necesiten en paralelo y recoger cada resultado conforme llega su webhook.
¿Qué tan preciso es con texto escaneado o pasado por OCR?
El endpoint procesa el texto que recibe, así que la precisión sobre resultados de OCR depende de la calidad de ese proceso previo; un texto de origen más limpio produce una extracción más confiable.
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/text/extract-amounts \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/text/extract-amounts", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/extract-amounts",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/extract-amounts", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/extract-amounts", 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
{
"text": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.extract_amounts",
"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_tokens | 20000 |
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. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |