Notas de compra
Como registrar notas de compra na API de Integrações, vinculá-las a fornecedores e gerar contas a pagar.
Uma nota de compra (/purchase-invoices) registra um documento recebido de um fornecedor. É o espelho, no lado das compras, da nota de venda: tem itens, impostos e pode gerar contas a pagar após a finalização.
Permissão exigida: purchase-invoices (ações create, read, update, delete).
Conceitos e campos-chave
| Campo | Tipo | Obrigatório | Observações |
|---|---|---|---|
supplier_id | UUID | Sim | Fornecedor — precisa existir (não há cadastro inline) |
invoice_number | string | Sim | Número do documento do fornecedor (≤ 60) |
product_type | enum | Sim | goods, service ou mixed |
issue_date | date | Sim | |
items | array | Sim | 1+ itens |
reference_code | string | Não | Autogerado (PINV-…) se omitido |
invoice_series | string | Não | Série do documento |
operation_type | string | Não | Padrão purchase (≤ 50 caracteres) |
received_date, due_date | date | Não | |
discount_amount | string | Não | Desconto em valor (≥ 0) — decimal numeric(18,6) como string |
discount_rate | string | Não | Desconto em percentual (0 a 100) — decimal numeric(9,6) como string |
taxes | array | Não | Impostos por item |
payables | array | Não | Planejamento financeiro (ver abaixo) |
description, notes, metadata, br_data, us_data | — | Não |
Itens da nota de compra
Cada item tem item_description (obrigatório), quantity (string decimal ≥ "0.000001") e unit_price (string decimal ≥ "0"); product_id é opcional (permite lançar itens sem vínculo a um produto do catálogo). Em atualizações, informe id no item para reconciliação.
Unicidade: não pode haver nota de compra ativa com o mesmo fornecedor, série e número de documento — a segunda tentativa é rejeitada.
Planejamento e materialização de contas a pagar
O fluxo financeiro segue o mesmo princípio do pedido de venda: o create não gera títulos reais.
POST /purchase-invoices— incluapayables[]opcional (amount,due_date,financial_account_idobrigatório; opcionaisfinancial_category_id,payment_method_id,description). A soma deve bater comnet_payable_total. A nota nascedraftcompending_payablesno response (somente leitura).POST /purchase-invoices/{id}/finalize— materializa os payables (purchase-invoices:update) e limpa o snapshot. Só então os títulos aparecem em/payables.
Cada parcela carrega a própria financial_category_id (opcional). Não envie financial_account_id nem financial_category_id no cabeçalho da nota.
Criar uma nota de compra (com parcelas planejadas)
curl -X POST https://api.biterp.ai/purchase-invoices \
-H "Authorization: Bearer sk_xxx_yyy" \
-H "Content-Type: application/json" \
-d '{
"supplier_id": "1a2b3c4d-5e6f-4708-9a0b-1c2d3e4f5a6b",
"invoice_number": "12345",
"invoice_series": "1",
"product_type": "goods",
"issue_date": "2026-07-06",
"due_date": "2026-08-05",
"items": [
{
"item_description": "Matéria-prima X",
"quantity": "100.000000",
"unit_price": "12.500000"
}
],
"payables": [
{
"amount": "1250.000000",
"due_date": "2026-08-05",
"financial_account_id": "9c8b7a6d-5e4f-4321-8b0a-1d2c3e4f5a6b"
}
]
}'Depois, finalize:
curl -X POST https://api.biterp.ai/purchase-invoices/{id}/finalize \
-H "Authorization: Bearer sk_xxx_yyy" \
-H "Content-Type: application/json" \
-d '{}'Status e atualização
A nota nasce em status: draft (estados comerciais: draft, finalized). finalized é terminal — não há cancel nem reopen; para corrigir, exclua e recrie.
No PATCH em draft, payables substitui o snapshot por completo ([] limpa). Se o total mudar sem payables, o snapshot só é preservado quando a soma continuar compatível; caso contrário a API retorna 422. Em finalized, alterações financeiras são bloqueadas.
DELETE /purchase-invoices/{id} remove notas draft/finalized e, quando finalizada, exclui em cascata os payables vinculados (bloqueado se algum já estiver parcial ou pago).
Referência dos endpoints
| Método | Endpoint | Referência |
|---|---|---|
| POST | /purchase-invoices | Criar nota de compra |
| GET | /purchase-invoices | Listar notas de compra |
| GET | /purchase-invoices/{id} | Buscar por ID |
| PATCH | /purchase-invoices/{id} | Atualizar |
| DELETE | /purchase-invoices/{id} | Remover |
| POST | /purchase-invoices/{id}/finalize | Finalizar |

