Genere una factura con totales e impuestos calculados
Convierta datos básicos de facturación en un documento de factura coherente sin repetir reglas de cálculo en cada aplicación.
Ejecutar — gratis
Indique vendedor, comprador, conceptos, cantidades, precios unitarios y un tipo impositivo porcentual. El generador calcula el total de cada línea, el subtotal, el impuesto y el total final, y devuelve los datos originales y calculados en un objeto predecible que usted puede guardar, revisar, representar o enviar a otro flujo de trabajo.
Prepare todos los datos de la factura
Comience por identificar a las dos partes de la operación. Los campos de vendedor y comprador admiten los nombres junto con la dirección, los datos registrales o la información de contacto que deba conservar el proceso posterior. Añada después al menos un concepto. Cada línea necesita una descripción clara, una cantidad numérica y un precio unitario numérico. El tipo impositivo se expresa como porcentaje: introduzca 8.25 para aplicar un 8.25 por ciento, no 0.0825. Puede utilizar cantidades fraccionarias para trabajos medidos en horas, peso, distancia u otra unidad divisible, y los precios también pueden contener decimales. Las cantidades y los precios negativos se rechazan porque suelen indicar una factura mal formada o un ajuste de crédito que debe gestionarse mediante una nota de crédito específica. Utilice cero únicamente cuando corresponda incluir una línea realmente gratuita. Las descripciones precisas facilitan conciliar el documento terminado con pedidos, entregas y contratos. La solicitud no incluye fecha ni identificador generado, por lo que entradas idénticas siempre producen la misma salida.
Comprenda cómo se calcula cada importe
En cada línea, el generador multiplica la cantidad por el precio unitario y redondea el resultado a dos decimales. A continuación suma esos totales ya redondeados para obtener el subtotal. El impuesto se calcula multiplicando el subtotal por el porcentaje indicado y también se redondea a dos decimales. Por último, el impuesto redondeado se suma al subtotal para producir el total final. Este orden es explícito y determinista, algo importante porque distintos sistemas contables pueden discrepar si redondean en otra etapa. La salida conserva la descripción y la cantidad enviadas, presenta los precios unitarios como importes monetarios y añade line_total a cada concepto. En el nivel del documento incluye subtotal, tax_rate, tax y grand_total, además de vendedor y comprador. No hay conversión ni deducción de moneda: todos los precios deben utilizar una única moneda coherente elegida por quien llama. La respuesta estructurada es un registro de cálculo y datos, listo para una plantilla, una base de datos, una aprobación o una integración API; no es un PDF ni una imagen.
Integre el cálculo con seguridad
Use esta capacidad en el punto donde un pedido editable pasa a ser un registro de factura. Confirme antes el contexto comercial: las partes, la moneda, la jurisdicción fiscal y si la operación necesita descuentos, retenciones, varios tipos de impuesto o ajustes de crédito. Envíe después las líneas normalizadas y guarde el objeto devuelto como resultado del cálculo. Como el algoritmo no usa red, valores aleatorios, reloj ni estado oculto, una misma solicitud puede reintentarse con seguridad y compararse durante una auditoría. Se devuelven errores si faltan campos obligatorios, si hay importes no numéricos, si la lista está vacía o excede el límite, si el tipo impositivo es negativo y, en especial, si cualquier cantidad o precio es negativo. Resuelva esos errores antes de asignar un número de factura o realizar un envío al cliente. El resultado puede alimentar una plantilla HTML, una importación contable, un generador de adjuntos o una cola de aprobación, pero esas acciones permanecen separadas. Así, la aritmética puede probarse sin que la presentación modifique los totales. Cada solicitud API cuesta $0.002; el navegador emplea la misma lógica pura.
Qué puede hacer con ella
Facturar pedidos aprobados
Convierta líneas normalizadas de pedidos en una factura estructurada con importes e impuestos coherentes.
Crear un formulario de facturación
Calcule los totales mientras usted introduce las partes, los conceptos y el impuesto, y entregue el resultado a un renderizador.
Unificar integraciones contables
Ofrezca a varias aplicaciones un único contrato de cálculo determinista antes de registrar o aprobar datos.
Preguntas frecuentes
¿Cuánto cuesta una solicitud?
Cada solicitud de la API cuesta $0.002.
¿Cómo debo indicar el tipo impositivo?
Indique un porcentaje numérico. Por ejemplo, utilice 8.25 para aplicar un 8.25 por ciento.
¿Cómo se redondean los importes?
Cada total de línea se redondea a dos decimales; esas líneas forman el subtotal y después se calcula y redondea el impuesto.
¿Puedo usar cantidades o precios negativos para abonos?
No. Cualquier cantidad o precio unitario negativo genera un error de entrada no válida. Utilice una nota de crédito específica.
¿El resultado incluye un PDF o un número de factura?
No. Devuelve datos estructurados con los totales calculados. La representación, numeración, moneda y entrega son pasos separados.
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, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/doc/invoice-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"seller":"Northwind Studio","buyer":"Contoso Retail","line_items":[{"description":"Design consultation","quantity":2,"unit_price":125},{"description":"Style guide","quantity":1,"unit_price":80.5}],"tax_rate":8.25}'const res = await fetch("https://api.kit.forhosting.com/doc/invoice-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"seller": "Northwind Studio",
"buyer": "Contoso Retail",
"line_items": [
{
"description": "Design consultation",
"quantity": 2,
"unit_price": 125
},
{
"description": "Style guide",
"quantity": 1,
"unit_price": 80.5
}
],
"tax_rate": 8.25
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/doc/invoice-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"seller": "Northwind Studio",
"buyer": "Contoso Retail",
"line_items": [
{
"description": "Design consultation",
"quantity": 2,
"unit_price": 125
},
{
"description": "Style guide",
"quantity": 1,
"unit_price": 80.5
}
],
"tax_rate": 8.25
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/doc/invoice-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"seller":"Northwind Studio","buyer":"Contoso Retail","line_items":[{"description":"Design consultation","quantity":2,"unit_price":125},{"description":"Style guide","quantity":1,"unit_price":80.5}],"tax_rate":8.25}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"seller":"Northwind Studio","buyer":"Contoso Retail","line_items":[{"description":"Design consultation","quantity":2,"unit_price":125},{"description":"Style guide","quantity":1,"unit_price":80.5}],"tax_rate":8.25}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/doc/invoice-generate", 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
{
"seller": "Northwind Studio",
"buyer": "Contoso Retail",
"line_items": [
{
"description": "Design consultation",
"quantity": 2,
"unit_price": 125
},
{
"description": "Style guide",
"quantity": 1,
"unit_price": 80.5
}
],
"tax_rate": 8.25
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.invoice_generate",
"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 | 200 |
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. |