API REST + SDK Node.js para emitires facturas certificadas pela AGT directamente da tua plataforma. Sem redireccionamentos, sem portais externos, sem burocracia.
$ node invoice.js
Os exemplos de código abaixo assumem que já tens uma empresa e uma API key. Se ainda não tens, é rápido:
No dashboard: regista-te e cria a tua empresa (nome, NIF, email).
Certificado RSA atribuído pela AGT à tua empresa (não ao Vero), gerido em quiosqueagt.minfin.gov.ao → Facturação Electrónica. Cola-o em Definições → Segurança. Sem isto, os documentos não têm valor fiscal.
Chaves de API (barra lateral) → Nova Chave de API. Usa vero_test_sk_... para testar sem custo, vero_live_sk_... quando estiveres pronto.
Cola a tua chave de teste e o ID da organização. O resto está pré-preenchido. Clica em "Gerar factura" e vê a resposta real da API.
Credenciais
Cliente
Item a facturar
Preenche as credenciais e clica em "Gerar factura de teste"
Usa a chave de teste para experimentar sem custos e sem configuração especial. As facturas de teste não chegam à AGT.
// 1. Instalar
npm install @veroao/node
// 2. Configurar (uma vez)
// .env
VERO_API_KEY=vero_test_sk_...
VERO_ORG_ID=uuid-da-tua-empresa
// 3. Emitir factura
import { createVeroClient } from '@veroao/node'
const vero = createVeroClient()
const ORG_ID = process.env.VERO_ORG_ID!
const customer = await vero.customers.ensure(ORG_ID, {
externalId: 'user_123',
name: 'João Silva',
taxId: '003456789LA042',
phone: '923456789',
email: 'joao@exemplo.ao',
addressLine1: 'Rua Amílcar Cabral, 45',
city: 'Luanda',
})
const product = await vero.products.create(ORG_ID, {
code: 'SERVICO-01',
name: 'Consultoria TI',
description: 'Consultoria técnica mensal',
unitPrice: 10000000, // 100 000,00 AOA
taxRate: 14,
unitOfMeasure: 'UN',
})
const invoice = await vero.invoices.create(ORG_ID, {
customerId: customer.id,
items: [{
description: product.name,
quantity: 1,
unitPrice: product.unitPrice,
taxRate: product.taxRate,
productId: product.id,
}],
})
console.log(invoice.pdfUrl) // PDF certificado AGTChave de teste vs. chave live
vero_test_sk_... faz facturas marcadas como teste, sem custo, sem submissão à AGT. vero_live_sk_... faz facturas reais e certificadas. O ambiente é detectado automaticamente pelo SDK, não precisas de mudar nenhuma configuração, só a chave.
Retenção na fonte (opcional)
Passa applyWithholdingTax: true em invoices.create() se a tua organização estiver sujeita ao Art. 67º do Código do Imposto Industrial (activável em Definições - desligado por omissão, a maioria não precisa). Não altera o total da factura, só acrescenta o campo withholdingTax na resposta. Podes testar isto já na secção Testar ao vivo acima, ou ver os detalhes na Invoices API.
O exemplo acima cobre a Factura (FT). O resto do ciclo de vida do documento também é API, com a mesma lógica de idempotência e autenticação.
Orçamento sem valor fiscal, converte-se em factura.
POST /v1/organisations/ORG_ID/proformas
{ "customerId": "...", "items": [{ "description": "...", "quantity": 1, "unitPrice": 15000000, "taxRate": 14 }] }Sinal pago antes de facturar tudo; a factura final desconta-o.
POST /v1/organisations/ORG_ID/invoices
{ "documentType": "FA", "customerId": "...", "items": [...] }
// depois, na FT/FR final: "advances": [{ "invoiceId": "FA_ID" }]Avenças e mensalidades: o Vero emite no dia certo.
POST /v1/organisations/ORG_ID/recurring-invoices
{ "customerId": "...", "items": [...], "dayOfMonth": 13, "startDate": "2026-11-01", "mode": "auto" }Anula uma factura já emitida.
POST /v1/organisations/ORG_ID/invoices/INVOICE_ID/credit-note
{ "reason": "Anulação por erro de facturação" }Cobrança adicional, com ou sem factura de origem.
POST /v1/organisations/ORG_ID/debit-notes
{ "customerId": "...", "items": [...], "invoiceId": "..." } // invoiceId é opcionalAcompanhamento de mercadoria, sem valor fiscal.
POST /v1/organisations/ORG_ID/invoices/INVOICE_ID/delivery-note
{ "notes": "Entregar na receção, 2º piso" }Resumo de facturação por período, receita e impostos.
GET /v1/organisations/ORG_ID/reports/billing-summary?year=2026&month=7Cada detalhe foi pensado para reduzir o atrito, desde a detecção automática do ambiente até aos erros tipados. Se preferires usar só o dashboard, sem código nenhum, também funciona. Ver Primeiros Passos.
O SDK gera uma chave de idempotência por omissão. Passa a tua (ex: order_ID) para garantir que retries não criam facturas duplicadas.
await vero.invoices.create(ORG_ID, {
customerId: customer.id,
items: [...],
idempotencyKey: `order_${order.id}`,
})O SDK faz até 3 tentativas em erros 5xx com backoff exponencial (400ms → 800ms → 1600ms). Sem código extra da tua parte.
const vero = createVeroClient({
secretKey: process.env.VERO_API_KEY!,
maxRetries: 3, // default
timeout: 30000, // ms
})Upsert pelo teu externalId: cria o cliente se não existir, actualiza se existir. Seguro chamar em cada pedido.
// Seguro chamar sempre - nunca cria duplicados
const customer = await vero.customers.ensure(ORG_ID, {
externalId: req.user.id,
name: req.user.name,
taxId: req.user.taxId,
})Sem try/catch genérico. Cada tipo de erro tem a sua classe, trata autenticação, not found e rate limit de forma granular.
import { VeroAuthError, VeroNotFoundError, VeroRateLimitError } from '@veroao/node'
try {
await vero.invoices.create(ORG_ID, input)
} catch (err) {
if (err instanceof VeroRateLimitError) {
await sleep(err.retryAfter ?? 60000)
}
}Sem SDK para a tua linguagem? Usa a API REST directamente. É JSON puro, com autenticação Bearer e documentação completa.
Para Node.js, Bun e Deno. API resource-based completa com retry, idempotência e erros tipados.
npm install @veroao/nodeHooks e Provider para React. Usa chaves públicas (pk_...), nunca expõe a chave secreta.
npm install @veroao/reactWeb Component drop-in. Cola uma linha de HTML e os teus utilizadores emitem facturas sem sair do teu site.
<script src="https://cdn.vero.ao/widget.js"></script>Dá ao teu assistente de IA o essencial da API da Vero de uma vez só (autenticação, endpoints, formatos e erros comuns), sem teres de explicar tudo à mão. Instala as skills do Vero (API e templates) com npx skills add Eterim/veroao.
Reage a qualquer evento de facturação sem polling. Regista um endpoint e recebe notificações com assinatura HMAC para verificar autenticidade.
// 1. Registar endpoint
await vero.webhooks.register(ORG_ID, {
url: 'https://teusite.ao/webhooks/vero',
events: ['invoice.issued', 'invoice.cancelled'],
})
// 2. Receber eventos no teu servidor
app.post('/webhooks/vero', (req, res) => {
const { event, data } = req.body
switch (event) {
case 'invoice.issued':
// Factura certificada - notificar cliente, actualizar BD...
await sendConfirmationEmail(data.pdfUrl)
break
case 'invoice.cancelled':
// Factura anulada - reverter saldo, etc.
break
}
res.sendStatus(200)
})invoice.issuedFactura emitida e certificada pela AGTinvoice.cancelledFactura anuladaproforma.convertedPró-forma convertida em facturaproforma.cancelledPró-forma anuladaCada entrega inclui assinatura HMAC-SHA256 no header X-Vero-Signature para verificares autenticidade antes de processar.
Desenha o template com @veroao/invoice, vê-o ao vivo e importa-o no Vero. As regras da AGT vêm incluídas: o template muda o aspecto, os dados fiscais vêm sempre do documento. Open source.
import { Document, Row, Logo, DocumentTitle, DocumentNumber,
DocumentDate, Customer, Issuer, Items, Totals, LegalNotes } from "@veroao/invoice"
export default function MyInvoice() {
return (
<Document className="bg-white px-12 pt-10 text-[11px]">
<Row className="items-start justify-between">
<Logo className="h-12" />
<DocumentTitle className="text-3xl font-bold uppercase text-teal-900" />
</Row>
<Row className="mt-8 gap-6">
<Customer className="flex-1 border border-zinc-200 p-3" />
<Issuer className="flex-1" />
</Row>
<Row className="mt-6 justify-between">
<DocumentNumber className="font-bold" />
<DocumentDate />
</Row>
<Items className="mt-3" rowClassName="border-b border-zinc-200 even:bg-zinc-50" />
<Totals className="ml-auto mt-4 w-1/2" />
<LegalNotes className="mt-6 text-[9px] text-zinc-500" />
</Document>
)
}npx @veroao/invoice init minhas-facturas
npx @veroao/invoice dev # pré-visualização ao vivo
npx @veroao/invoice check # as verificações do VeroA API é suficientemente flexível para cobrir desde lojas simples até marketplaces multi-vendor com centenas de organizações.
Emite factura automaticamente ao fim de cada compra. O cliente recebe o PDF por email sem sair da tua loja.
Gera facturas mensais automaticamente no ciclo de renovação. Liga ao teu sistema de pagamentos com idempotência.
Cada vendor emite as suas próprias facturas. Gere múltiplas organizações com a mesma integração.
Cria uma conta gratuita, obtém a tua chave de teste e emite a primeira factura em menos de 10 minutos.
Dúvidas? suporte@vero.ao