Comprovante de pagamento de uma fatura do cliente
GET /portal/invoices/{id}/receipt
Escopo do token: invoices:read. Recurso: Faturas.
Emite o comprovante no primeiro acesso. Fatura não paga: 422 invoice.not_paid.
Exemplo de requisição
Seção intitulada “Exemplo de requisição”Os exemplos leem o token da variável de ambiente HALVER_API_TOKEN (um token sc_live_… criado em Desenvolvedores › Tokens de API). Nunca escreva o token no código.
curl "https://dash.halver.com.br/api/v1/portal/invoices/38eb1f33-5f76-44d9-a2dd-bd2fbcc16b7e/receipt" \ -H "Authorization: Bearer $HALVER_API_TOKEN"package main
import ( "fmt" "io" "net/http" "os" "time")
func main() { req, err := http.NewRequest(http.MethodGet, "https://dash.halver.com.br/api/v1/portal/invoices/38eb1f33-5f76-44d9-a2dd-bd2fbcc16b7e/receipt", nil) if err != nil { panic(err) } req.Header.Set("Authorization", "Bearer "+os.Getenv("HALVER_API_TOKEN")) client := &http.Client{Timeout: 30 * time.Second} resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, err := io.ReadAll(resp.Body) if err != nil { panic(err) } fmt.Println(resp.Status) fmt.Println(string(out))}import os
import requests
resp = requests.get( "https://dash.halver.com.br/api/v1/portal/invoices/38eb1f33-5f76-44d9-a2dd-bd2fbcc16b7e/receipt", headers={ "Authorization": f"Bearer {os.environ['HALVER_API_TOKEN']}", }, timeout=30,)resp.raise_for_status()print(resp.json())Parâmetros
Seção intitulada “Parâmetros”Parâmetros do caminho
Seção intitulada “Parâmetros do caminho”-
idstring (uuid) obrigatórioExemplo:
38eb1f33-5f76-44d9-a2dd-bd2fbcc16b7e.
Respostas
Seção intitulada “Respostas”Comprovante.
Campos da resposta
-
adjustment_centsinteger (int64) obrigatórioOutra diferença entre o pago e o valor da fatura (negativa = desconto), ex. baixa registrada pela equipe.
-
amount_centsinteger (int64) obrigatórioValor da fatura.
-
codestring obrigatórioCódigo de validação,
XXXX-XXXX-XXXX-XXXX. -
descriptionstring obrigatório -
due_datestring (date) obrigatório -
invoice_numberstring obrigatório -
issued_atstring (date-time) obrigatório -
issuer_documentstring obrigatórioCNPJ de quem recebeu, formatado.
-
issuer_namestring obrigatórioQuem recebeu (razão social).
-
late_centsinteger (int64) obrigatórioMulta e juros pagos além do valor da fatura (pagamento após o vencimento).
-
methodstring obrigatóriobank_transfer: Pix/transferência direto na conta da empresa;manual: registrado pela equipe. Um de:pix,boleto,credit_card,bank_transfer,manual. -
paid_amount_centsinteger (int64) obrigatório -
paid_atstring (date-time) obrigatório -
payer_documentstring obrigatórioCNPJ completo ou CPF mascarado.
-
payer_namestring obrigatório -
refunded_amount_centsinteger (int64) obrigatórioDevolvido ao pagador (estorno parcial mantém
valid). -
refunded_atstring (date-time) obrigatório pode ser nulo -
statusstring obrigatórioUm de:
valid,refunded,reverted. -
urlstring obrigatórioPágina pública do comprovante (para o QR code e para compartilhar).
{ "adjustment_cents": 89900, "amount_cents": 89900, "code": "c1.small.ssd", "description": "Servidor de produção", "due_date": "2026-10-20", "invoice_number": "FAT-0000123", "issued_at": "2026-10-20T18:00:00Z", "issuer_document": "", "issuer_name": "Halver", "late_cents": 89900, "method": "pix", "paid_amount_cents": 89900, "paid_at": "2026-10-20T18:00:00Z", "payer_document": "", "payer_name": "Exemplo Tecnologia Ltda", "refunded_amount_cents": 89900, "refunded_at": null, "status": "valid", "url": ""}Todo erro vem como application/problem+json (RFC 9457), com um code estável, a mensagem em português em detail, o motivo de cada campo em errors (nos erros de validação) e o request_id, que você informa ao suporte. Veja a lista completa de códigos.
| Status | Quando | Códigos |
|---|---|---|
| 400 | Requisição inválida (JSON malformado, campo desconhecido, parâmetro inválido ou falha de validação). | validation_failed |
| 401 | Não autenticado (token ausente, inválido ou expirado; credenciais inválidas). | auth.unauthorized |
| 403 | Autenticado, mas sem permissão para a área ou a operação. | api_token.insufficient_scope |
| 404 | Recurso não encontrado (ou fora do escopo do usuário). | invoice.not_found, receipt.not_found |
| 422 | Entrada válida, mas viola uma regra de negócio. | invoice.not_paid |
{ "type": "about:blank", "title": "Forbidden", "status": 403, "detail": "o token não tem o escopo invoices:read; crie um token com esse escopo em Desenvolvedores › Tokens de API", "code": "api_token.insufficient_scope", "request_id": "6f1c0b2a9e4d7c3b5a8f0e1d"}