Genere un recibo con totales desglosados
Convierta los datos de una compra en un recibo uniforme sin programar cálculos y formatos en cada aplicación. Indique el comercio, al menos un artículo y el método de pago. El generador calcula subtotales, impuestos y totales, y asigna un número estable. El JSON resultante puede guardarse, mostrarse, vincularse a un pedido o enviarse a otro flujo documental.
Ejecutar — gratis
Prepare todos los datos del recibo
Indique el nombre del comercio tal como debe aparecer y añada cada producto o servicio por separado. Cada línea necesita descripción, cantidad y precio unitario. Puede usar cantidades decimales para mercancías medidas, horas, peso o distancia. Añada un porcentaje de impuesto solo cuando corresponda. Escriba un método de pago apto para mostrarse, como efectivo, transferencia o una tarjeta enmascarada; nunca incluya credenciales completas. La moneda es opcional y utiliza USD de forma predeterminada. Las descripciones breves y los datos de pago protegidos facilitan un registro legible. Debe existir al menos una línea, pues una compra vacía no genera un recibo válido.
Comprenda los cálculos y el número
El generador convierte cada precio unitario a unidades monetarias menores antes de multiplicarlo por la cantidad. Así evita artefactos de coma flotante. Redondea cada subtotal y calcula después su impuesto. El subtotal general suma las líneas, el impuesto total suma sus impuestos y el total final combina ambos valores. El importe pagado coincide siempre con ese total. El número de recibo se deriva de los datos normalizados, por lo que una solicitud idéntica devuelve el mismo identificador. Esto ayuda con reintentos y duplicados. No obstante, no sustituye una secuencia fiscal oficial ni un contador contable exigido por la legislación aplicable.
Integre el documento estructurado
La respuesta separa identidad, comercio, líneas calculadas, pago y totales. Puede renderizar un recibo imprimible, archivar una compra normalizada, completar un correo o alimentar un generador de PDF. Guarde la respuesta junto con la petición original para facilitar conciliaciones. El número estable sirve como clave práctica, aunque su base de datos debe imponer sus propias reglas. Las entradas incompletas o inválidas se rechazan expresamente; no se inventan datos. El servicio no usa red, almacenamiento, fecha actual ni aleatoriedad, por lo que el resultado permanece estable. Cada solicitud cuesta $0.002 y resulta adecuada para flujos transaccionales pequeños y previsibles.
Qué puede hacer con ella
Cree un recibo de pedido
Convierta artículos y un método de pago enmascarado en un registro uniforme para guardar o mostrar.
Prepare datos para un PDF
Calcule líneas y totales fiables antes de enviar los datos estructurados a un renderizador de PDF.
Normalice ventas manuales
Convierta registros de caja o administración en un esquema previsible para conciliación y soporte.
Preguntas frecuentes
¿Cuánto cuesta?
Cada solicitud de API cuesta $0.002.
¿Puedo generar un recibo sin artículos?
No. Se exige al menos una línea; una lista vacía produce un error de entrada inválida.
¿Cómo se calculan los impuestos?
Se calculan por línea sobre su subtotal redondeado y luego se suman.
¿El número de recibo es aleatorio?
No. Se deriva de los datos normalizados; entradas idénticas producen el mismo número.
¿Crea una factura fiscal válida?
No. Crea un recibo estructurado; usted debe cumplir las normas locales de numeración y registro.
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/receipt-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"merchant_name":"Northwind Coffee","line_items":[{"description":"Cappuccino","quantity":2,"unit_price":4.5,"tax_rate":8.25},{"description":"Blueberry muffin","quantity":1,"unit_price":3.25}],"payment_method":"Visa ending 4242"}'const res = await fetch("https://api.kit.forhosting.com/doc/receipt-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"merchant_name": "Northwind Coffee",
"line_items": [
{
"description": "Cappuccino",
"quantity": 2,
"unit_price": 4.5,
"tax_rate": 8.25
},
{
"description": "Blueberry muffin",
"quantity": 1,
"unit_price": 3.25
}
],
"payment_method": "Visa ending 4242"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/doc/receipt-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"merchant_name": "Northwind Coffee",
"line_items": [
{
"description": "Cappuccino",
"quantity": 2,
"unit_price": 4.5,
"tax_rate": 8.25
},
{
"description": "Blueberry muffin",
"quantity": 1,
"unit_price": 3.25
}
],
"payment_method": "Visa ending 4242"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/doc/receipt-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"merchant_name":"Northwind Coffee","line_items":[{"description":"Cappuccino","quantity":2,"unit_price":4.5,"tax_rate":8.25},{"description":"Blueberry muffin","quantity":1,"unit_price":3.25}],"payment_method":"Visa ending 4242"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"merchant_name":"Northwind Coffee","line_items":[{"description":"Cappuccino","quantity":2,"unit_price":4.5,"tax_rate":8.25},{"description":"Blueberry muffin","quantity":1,"unit_price":3.25}],"payment_method":"Visa ending 4242"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/doc/receipt-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
{
"merchant_name": "Northwind Coffee",
"line_items": [
{
"description": "Cappuccino",
"quantity": 2,
"unit_price": 4.5,
"tax_rate": 8.25
},
{
"description": "Blueberry muffin",
"quantity": 1,
"unit_price": 3.25
}
],
"payment_method": "Visa ending 4242"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.receipt_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. |