Notas de Débito API
Cobranças adicionais a um cliente - autónomas ou associadas a uma factura já emitida. Cada ND é registada na AGT em tempo real e recebe ATCUD próprio.
Emitir Nota de Débito
/v1/organisations/:orgId/debit-notesAo contrário da Nota de Crédito, a ND não exige uma factura de origem - pode ser usada para qualquer cobrança adicional a um cliente. A ND não leva IVA: pela lei, não liquida imposto (Decreto Presidencial 71/25, art. 3.º). As linhas vão a 0% como não sujeitas (M02, ou outro motivo indicado em taxExemptionCode); um pedido com taxRate 5 ou 14 é recusado. Se o valor a cobrar tem IVA, emita uma factura. Se invoiceId for indicado, o número real dessa factura é usado como referência perante a AGT (substitui qualquer valor passado em invoiceRef), evitando referências inválidas.
Request Body
{
"customerId": "b2c3d4e5-...",
"items": [
{
"description": "Custos administrativos",
"quantity": 1,
"unitPrice": 500000
}
],
"reason": "Cobrança de custos adicionais",
"invoiceId": "a1b2c3d4-..."
}| customerId | string | UUID do cliente a debitar |
| items | array | Linhas do documento (descrição, quantidade, preço unitário em cêntimos). Sem IVA: taxRate omitido ou 0; taxExemptionCode opcional, por omissão M02 (não sujeita) |
| reason | string? | Motivo da ND - aparece no PDF |
| invoiceRef | string? | Referência livre (ignorada se invoiceId for indicado) |
| invoiceId | string? | UUID de uma factura desta organização - usa o número real como referência AGT |
Resposta (201 Created)
{
"id": "f1a2b3c4-...",
"orgId": "779b90ce-...",
"invoiceId": "a1b2c3d4-...",
"invoiceRef": "FT FT6326S62896N/1",
"customerId": "b2c3d4e5-...",
"number": "ND ND6326S15899N/2",
"displayCode": "84A75P",
"status": "issued",
"subtotal": 50000000,
"taxAmount": 0,
"total": 50000000,
"currency": "AOA",
"atcud": "ND6326S15899N-2",
"hash": "9pQ2Lr...",
"pdfUrl": "/v1/organisations/779b90ce-.../debit-notes/f1a2b3c4-.../pdf",
"agtStatus": "pending",
"agtErrors": null,
"issuedAt": "2026-07-01T10:00:00.000Z"
}Campos de Facturação Electrónica (DFe)
number- Número AGT certificado no formatoND {série}/{sequencial}.atcud- Código único de validação AGT. Aparece no PDF com QR code verificável.hash- Elo da cadeia de integridade dos documentos da série ND.agtStatus- Estado da validação:pending,validatedourejected. A submissão à AGT ocorre em segundo plano - fazGETao documento passado alguns segundos para confirmar o resultado final.agtErrors- Lista de erros devolvidos pela AGT quandoagtStatusérejected.
Listar Notas de Débito
/v1/organisations/:orgId/debit-notesDevolve todas as notas de débito emitidas por esta organização, mais recentes primeiro.
Anular Nota de Débito
/v1/organisations/:orgId/debit-notes/:id/cancelPara uma ND emitida por engano. A AGT só permite anular por um de dois motivos legais (DS-120 documentCancelReason; Decreto Presidencial 71/25, art. 8.º n.º 8 e 9). Se a ND já foi entregue ao cliente e os dados estão certos, não pode ser anulada.
- A ND fica
status: "cancelled", sai dos totais e relatórios, e o PDF passa a ter a marca ANULADO. - No SAF-T sai com estado
Ae fora deTotalCredit. - Se a ND já estava validada pela AGT, a anulação é comunicada à AGT (o mesmo documento com estado "A"). Acompanhe em
agtCancelStatus:pending → validated(ouerror/timeout). Sem nada a comunicar:not_required.
Request Body
{
"reason": "I",
"note": "emitida para o NIF errado"
}| reason | 'N' | 'I' | Obrigatório. N: não foi enviada ao cliente · I: cliente identificado incorrectamente |
| note | string | Opcional. Nota interna (máx. 500 caracteres) |
Com o SDK (@veroao/node 1.3+)
const dn = await vero.debitNotes.cancel(orgId, debitNoteId, { reason: 'I' })
dn.status // 'cancelled'
dn.agtCancelStatus // 'pending' → 'validated'Resposta (200 OK)
{
"id": "f1a2b3c4-...",
"number": "ND ND6326S15899N/2",
"total": 50000000,
"status": "cancelled",
"cancelledAt": "2026-10-02T10:00:00.000Z",
"cancelReason": "I",
"cancelNote": "emitida para o NIF errado",
"agtStatus": "validated",
"agtCancelStatus": "pending"
}Erros comuns
| 400 | no_items | O documento não tem linhas |
| 404 | customer_not_found | Cliente não encontrado nesta organização |
| 404 | invoice_not_found | invoiceId indicado não existe nesta organização |
| 422 | agt_keys_not_configured | Credenciais AGT não configuradas na organização |
| 422 | agt_series_error | Erro ao obter/validar a série da AGT |
| 422 | debit_note_tax_not_allowed | Linha com taxRate 5 ou 14 - a ND não liquida IVA |
| 400 | invalid_reason | Anulação: motivo diferente de 'N' ou 'I' |
| 404 | debit_note_not_found | Anulação: nota de débito não encontrada nesta organização |
| 409 | already_cancelled | Anulação: a nota de débito já estava anulada |
| 409 | agt_pending | Anulação: a AGT ainda está a validar a ND - tente daqui a alguns minutos |