Gere um recibo com totais detalhados
Transforme dados de compra em um recibo consistente sem recriar cálculos e formatação em cada aplicativo. Informe o comerciante, pelo menos um item e a forma de pagamento. O gerador calcula subtotais, tributos e total, além de atribuir um número estável. O JSON pode ser armazenado, exibido, associado a um pedido ou enviado a outro fluxo documental.
Executar grátis
Prepare todos os dados do recibo
Informe o nome do comerciante como ele deve aparecer e adicione separadamente cada produto ou serviço. Toda linha precisa de descrição, quantidade e preço unitário. Quantidades decimais atendem mercadorias medidas, horas, peso ou distância. Inclua uma alíquota somente quando houver tributação. Use uma forma de pagamento apropriada para exibição, como dinheiro, transferência ou cartão mascarado; nunca envie credenciais completas. A moeda é opcional e assume USD. Descrições objetivas e dados protegidos tornam o registro claro. É obrigatório incluir pelo menos um item, pois uma compra vazia não pode originar um recibo útil.
Entenda os cálculos e a numeração
O gerador converte cada preço em unidades monetárias menores antes de multiplicá-lo pela quantidade, evitando artefatos de ponto flutuante. Cada subtotal é arredondado e seu tributo é calculado em seguida. O subtotal geral soma as linhas, o tributo total soma os valores tributários e o total final combina ambos. O pagamento sempre corresponde ao resultado. O número deriva dos dados normalizados; portanto, uma solicitação idêntica retorna o mesmo identificador, o que ajuda em novas tentativas e duplicidades. Esse identificador não substitui uma sequência fiscal, autorização pública ou contador contábil exigido pela legislação.
Integre o documento ao seu fluxo
A resposta separa identidade, comerciante, linhas calculadas, pagamento e totais. Assim, você pode renderizar um recibo imprimível, guardar uma compra normalizada, preencher um e-mail ou alimentar um gerador de PDF. Armazene a resposta com a solicitação original para facilitar conciliações. O número estável funciona como referência, mas o banco de dados deve aplicar regras próprias. Entradas incompletas são rejeitadas claramente, sem invenção de dados. Não há rede, armazenamento, data atual ou aleatoriedade, garantindo resultados repetíveis. Cada solicitação custa US$ 0,002, sendo indicada para fluxos transacionais pequenos que precisam de dados previsíveis.
Casos de uso
Crie um recibo de pedido
Converta itens e uma forma de pagamento mascarada em um registro consistente para guardar ou exibir.
Prepare dados para PDF
Calcule linhas e totais confiáveis antes de enviar os dados estruturados a um renderizador de PDF.
Normalize vendas manuais
Converta lançamentos de caixa ou retaguarda em um esquema previsível para conciliação e suporte.
Perguntas frequentes
Quanto custa?
Cada solicitação de API custa US$ 0,002.
Posso gerar um recibo sem itens?
Não. É necessário pelo menos um item; uma lista vazia gera erro de entrada inválida.
Como os tributos são calculados?
O tributo é calculado em cada linha sobre o subtotal arredondado e depois somado.
O número do recibo é aleatório?
Não. Ele deriva dos dados normalizados; entradas idênticas produzem o mesmo número.
Isto cria uma nota fiscal válida?
Não. O resultado é um recibo estruturado; cabe a você cumprir as regras fiscais locais.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"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"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.receipt_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_mb | 25 |
max_pages | 200 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |