Categorizar gastos
Todo contador conoce la tarea tediosa: un archivo con quinientos movimientos de tarjeta, cada uno necesitando una categoría antes de cerrar el mes. Este endpoint lee el nombre del comercio, el monto y cualquier nota que envíe, y asigna cada línea a la cuenta contable que le corresponde —viáticos, insumos de oficina, software, comidas— para que su libro contable cierre más rápido y nadie tenga que adivinar.
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.
Quién necesita esto de verdad
Contadores que concilian cuentas de clientes, equipos financieros cerrando fin de mes, y herramientas de gestión de gastos que reciben movimientos crudos del banco chocan siempre con el mismo obstáculo: las descripciones de las transacciones son crípticas. Un texto como 'SQ *DARK ROAST LLC' no le dice casi nada a una persona sin contexto, y etiquetar manualmente miles de filas cada mes no es un trabajo que nadie quiera hacer. La categorización de gastos existe para eliminar justo esa tarea, no para reemplazar el criterio del contador en los casos ambiguos.
Qué envía y qué recibe
Envía un arreglo de transacciones —descripción, monto, moneda y, opcionalmente, su propia lista de categorías— mediante POST a /text/expense-categorize. La tarea corre de forma asíncrona: recibe un task_id de inmediato y el resultado categorizado llega después, ya sea a su webhook firmado o disponible en un enlace firmado válido por 24 horas. Cada transacción vuelve con su categoría asignada y, cuando es útil, una nota breve explicando por qué se eligió esa cuenta, para que un revisor humano pueda verificarla sin rehacer la lógica.
Cómo funciona la categorización
El motor lee juntos el nombre del comercio, el monto y el texto de la nota, comparando patrones contra la taxonomía que suministre o contra un plan de cuentas general por defecto si no envía uno. Es el mismo instinto que aplica un contador con experiencia —'este cargo recurrente de $12.99 de un proveedor de software es una suscripción, no una compra única'— convertido en algo que puede invocar desde código en vez de desplazarse por una hoja de cálculo.
Cómo encaja en un flujo real
Al ser asíncrono y cobrarse por ítem, puede enviar un mes entero de transacciones en una sola llamada y dejar que el webhook avise a su sistema contable cuando termine, sin necesidad de consultar el estado repetidamente. Los lotes grandes son el caso normal de uso, no una excepción: puede enviar 50 filas o 50,000, y el precio escala de forma predecible según el volumen, sin penalizar el tamaño de su libro contable.
Dónde termina su alcance
Esta es una categorización basada en patrones, no una asesoría fiscal ni una certificación de auditoría: las transacciones ambiguas (un cargo de $400 de un comercio general, por ejemplo) reciben una categoría de mejor esfuerzo con una señal de menor confianza incluida en el campo de nota, y su equipo financiero debería mantener un paso de revisión para todo lo que supere su umbral de materialidad. Esa honestidad es justamente el punto: un clasificador que adivina mal en silencio es peor que uno que señala su incertidumbre.
Qué puede hacer con ella
Automatización del cierre mensual
Descargue el feed bancario, categorice todas las transacciones en un lote asíncrono y entréguele al contador un libro ya ordenado en vez de un archivo crudo.
Backends de apps de gastos
Etiquete automáticamente cada cargo de tarjeta de un empleado apenas llega, para que la cola de aprobación de reembolsos muestre una categoría y no un campo vacío.
Firmas contables con múltiples clientes
Procese las transacciones de cada cliente contra su propio plan de cuentas enviando una taxonomía personalizada por solicitud.
Tableros de análisis de gasto
Alimente transacciones ya categorizadas a una herramienta de BI para graficar el gasto por departamento o tipo de proveedor sin etiquetar nada a mano primero.
Preguntas frecuentes
¿Cómo decide la categoría esta api de categorizar gastos?
Lee en conjunto la descripción del comercio, el monto y la nota, y los compara contra su plan de cuentas o contra una taxonomía contable general por defecto, devolviendo la categoría que mejor encaja en cada transacción.
¿Puedo usar mi propia lista de categorías en vez de la que viene por defecto?
Sí, envía su taxonomía en la solicitud y cada transacción se compara contra ella en lugar de usar la categoría por defecto.
¿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?
$0.003 por solicitud más $0.0135 por ítem categorizado, así que un lote de 200 transacciones tiene un costo fijo y predecible que puede calcular antes de enviarlo.
¿Cómo recibo los resultados?
La tarea corre de forma asíncrona y devuelve un task_id de inmediato; los resultados llegan a su webhook firmado o mediante un enlace firmado válido por 24 horas, según lo que configure.
¿Qué pasa si una transacción no se puede categorizar con certeza?
Igual se devuelve con una categoría de mejor esfuerzo y una nota que señala menor confianza, para que su proceso de revisión la detecte en vez de archivarla mal en silencio.
¿Esto reemplaza a un contador?
No: automatiza el paso repetitivo de clasificación para que su contador se enfoque en las decisiones de criterio y las excepciones, no en el etiquetado manual.
¿Puedo enviar lotes grandes con miles de transacciones?
Sí, los lotes grandes son el caso de uso esperado; envía un solo arreglo de transacciones y el precio escala linealmente por ítem, sin un límite arbitrario de lote.
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/expense-categorize \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/text/expense-categorize", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/expense-categorize",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/expense-categorize", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/expense-categorize", 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
{
"items": [
"valor-1",
"valor-2"
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.expense_categorize",
"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. |