Invovate ← Voltar ao Gerador de Faturas

API de Faturação — Documentação

Gere faturas PDF profissionais programaticamente através de uma API REST simples

v1.0

Visão Geral

A API de faturação Invovate permite que os programadores gerem faturas profissionais com uma única chamada HTTP POST. Pode escolher entre uma resposta JSON estruturada com todos os cálculos ou um download direto em PDF. A API suporta 11 idiomas, mais de 20 moedas e 5 modelos de design — ideal para freelancers, empresas SaaS e aplicações contabilísticas em Portugal e no Brasil.

Gratuito para começar

40 pedidos/hora, sem cartão de crédito

JSON ou PDF

Escolha o formato de saída

Cálculo de IVA

Por linha ou global

Multilíngue

pt, en, fr, de, es e mais

URL base:
https://invovate.com/api

Início Rápido

A sua primeira fatura em três passos:

Passo 1 — Criar conta
Registe-se gratuitamente em invovate.com e verifique o seu endereço de e-mail.
Passo 2 — Obter chave API
Vá ao painel e clique em "Gerar chave API". A sua chave começa com inv_.
Passo 3 — Primeira chamada
curl -X POST https://invovate.com/api/generate-invoice \ -H "Content-Type: application/json" \ -H "Authorization: Bearer inv_suaChaveApi" \ -d '{ "from": {"name": "A Minha Empresa Lda"}, "to": {"name": "Cliente SA"}, "items": [{"description": "Desenvolvimento web", "quantity": 1, "unit_price": 3000, "tax_rate": 23}], "invoice": {"currency": "EUR", "language": "pt"} }'

Autenticação

A API suporta três métodos de autenticação:

1. Chave API (recomendado para uso no servidor)

Authorization: Bearer inv_suaChaveApiAqui

2. Cookie de sessão (para aplicações web)

Se estiver autenticado através do browser, o cookie inv_session é enviado automaticamente.

3. Anónimo (sem autenticação)

Chamadas sem autenticação são possíveis mas limitadas a saída JSON e restritas por endereço IP. Útil para testar a API.

Segurança: Nunca inclua a sua chave API em código do lado do cliente nem a guarde num repositório Git. Use variáveis de ambiente no seu servidor.

Limites e Planos

PlanoPreçoPor horaPor semana
Gratuito0 €40400
Starter9 €/mês2004.000
Pro29 €/mês1.00040.000
EnterpriseSob consultaIlimitadoIlimitado

Os limites são devolvidos nos cabeçalhos da resposta:

X-RateLimit-Limit-Hourly: 40 X-RateLimit-Remaining-Hourly: 39 X-RateLimit-Reset-Hourly: 1712123456 X-RateLimit-Limit-Weekly: 400 X-RateLimit-Remaining-Weekly: 399 X-RateLimit-Reset-Weekly: 1712345678

Gerar Fatura

POST
/api/generate-invoice

Gera uma fatura e devolve um JSON com todos os cálculos ou um ficheiro PDF binário.

Formato do Pedido

Emitente (from)

CampoTipoObrigatórioDescrição
from.namestringSimNome da sua empresa
from.addressstringNãoMorada da sua empresa
from.emailstringNãoO seu endereço de e-mail
from.tax_idstringNãoNIF/CNPJ (ex. PT123456789)

Destinatário (to)

CampoTipoObrigatórioDescrição
to.namestringSimNome do cliente ou empresa
to.addressstringNãoMorada do cliente
to.emailstringNãoE-mail do cliente

Dados da fatura (invoice)

CampoTipoPadrãoDescrição
invoice.numberstringAutoNúmero da fatura
invoice.datestringHojeData de emissão (AAAA-MM-DD)
invoice.due_datestringData de vencimento (AAAA-MM-DD)
invoice.currencystringUSDCódigo de moeda (ex. EUR ou BRL)
invoice.languagestringenCódigo de idioma (ex. pt)
invoice.termsstringCondições de pagamento
invoice.po_numberstringNúmero de encomenda

Linhas (items array)

CampoTipoObrigatórioDescrição
descriptionstringSimDescrição do produto ou serviço
quantitynumberSimQuantidade
unit_pricenumberSimPreço unitário (sem IVA)
discountnumberNãoDesconto (percentagem ou valor)
discount_typestringpercent"percent" ou "amount"
tax_ratenumberNãoTaxa de IVA por linha (ex. 23)

Outros campos

CampoTipoDescrição
global_taxnumberIVA global (aplicado se não houver taxa por linha)
global_discountnumberDesconto sobre o total
amount_paidnumberValor já pago (para pagamento parcial)
notesstringNotas no rodapé da fatura
templatestringNome do modelo: classic, modern, bold, minimal, navy
outputstring"json" (padrão) ou "pdf"

Formato da Resposta

Resposta JSON (output: "json")

{ "success": true, "invoice": { "number": "FT-2026-042", "date": "2026-04-03", "due_date": "2026-05-03", "currency": "EUR", "language": "pt", "template": "classic", "from": { "name": "A Minha Empresa Lda", "tax_id": "PT123456789" }, "to": { "name": "Cliente SA" }, "items": [ { "description": "Desenvolvimento web", "quantity": 1, "unit_price": 3000, "discount": 0, "tax_rate": 23, "tax_amount": 690.00, "line_total": 3690.00 } ], "subtotal": 3000.00, "total_tax": 690.00, "grand_total": 3690.00, "amount_paid": 0, "balance_due": 3690.00, "notes": "Obrigado pela sua confianca." }, "meta": { "processing_ms": 11, "credits_remaining": { "hourly": 39, "weekly": 399 } } }

Resposta PDF (output: "pdf")

Devolve um ficheiro PDF binário com os seguintes cabeçalhos:

Content-Type: application/pdf Content-Disposition: attachment; filename="fatura.pdf"

Códigos de Erro

{ "success": false, "error": { "message": "E necessario pelo menos um item" } }
Estado HTTPSignificado
400Erro de validação — verifique o formato do pedido
401Autenticação necessária ou chave API inválida
403Endereço de e-mail não verificado
429Limite de taxa excedido
500Erro interno do servidor

Endpoints de Autenticação

MétodoCaminhoDescrição
POST/api/auth/registerCriar conta com e-mail e palavra-passe
POST/api/auth/loginIniciar sessão, devolve cookie de sessão
POST/api/auth/logoutTerminar sessão
GET/api/auth/meObter dados do utilizador atual e chave API
POST/api/auth/generate-api-keyGerar nova chave API (e-mail verificado obrigatório)

Exemplos de Código

cURL — Fatura PDF com IVA português

curl -X POST https://invovate.com/api/generate-invoice \ -H "Content-Type: application/json" \ -H "Authorization: Bearer inv_suaChaveApi" \ -d '{ "from": { "name": "Agencia Digital Lisboa Lda", "address": "Av. da Liberdade 100, 1250-146 Lisboa", "tax_id": "PT123456789", "email": "[email protected]" }, "to": { "name": "Empresa Cliente SA", "address": "Rua Augusta 50, 1100-053 Lisboa", "email": "[email protected]" }, "invoice": { "number": "FT-2026-042", "date": "2026-04-03", "due_date": "2026-05-03", "currency": "EUR", "language": "pt", "terms": "30 dias liquido" }, "items": [ {"description": "Design de website", "quantity": 1, "unit_price": 4000, "tax_rate": 23}, {"description": "Consultoria SEO", "quantity": 8, "unit_price": 150, "tax_rate": 23} ], "notes": "Obrigado pela sua confianca.", "template": "modern", "output": "pdf" }' --output fatura.pdf

JavaScript (Node.js)

// Gerar fatura com a API Invovate const response = await fetch('https://invovate.com/api/generate-invoice', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer inv_suaChaveApi' }, body: JSON.stringify({ from: { name: 'A Minha Empresa Lda', tax_id: 'PT123456789' }, to: { name: 'Cliente SA', email: '[email protected]' }, invoice: { number: 'FT-001', currency: 'EUR', language: 'pt', due_date: '2026-05-03' }, items: [{ description: 'Consultoria', quantity: 10, unit_price: 100, tax_rate: 23 }], output: 'json' }) }); const data = await response.json(); if (data.success) { console.log('Total (IVA incluido):', data.invoice.grand_total, 'EUR'); }

Python

import requests API_KEY = "inv_suaChaveApi" URL = "https://invovate.com/api/generate-invoice" fatura = { "from": { "name": "Freelancer Porto", "tax_id": "PT123456789" }, "to": { "name": "Empresa Cliente SA", "address": "Av. dos Aliados 1, 4000-065 Porto" }, "invoice": { "number": "FT-2026-001", "currency": "EUR", "language": "pt", "terms": "30 dias liquido" }, "items": [ {"description": "Design grafico", "quantity": 1, "unit_price": 1500, "tax_rate": 23}, {"description": "Fotografias", "quantity": 3, "unit_price": 200, "tax_rate": 23} ], "output": "pdf" } response = requests.post(URL, json=fatura, headers={"Authorization": f"Bearer {API_KEY}"}) if response.status_code == 200: with open("fatura.pdf", "wb") as f: f.write(response.content) print("Fatura guardada: fatura.pdf") else: print(f"Erro: {response.json()['error']['message']}")

Idiomas Suportados

CódigoIdiomaDireção
ptPortuguêsLTR
enInglêsLTR
deAlemãoLTR
frFrancêsLTR
nlNeerlandêsLTR
esEspanholLTR
itItalianoLTR
ruRussoLTR
hiHindiLTR
jaJaponêsLTR
arÁrabeRTL

Modelos PDF

NomeEstilo
classicAzul como destaque, linhas cinzentas alternadas (padrão)
modernTeal/ciano, design moderno e limpo
boldCabeçalho antracite escuro, alto contraste
minimalCinzento claro, sem bordas
navyCabeçalho azul marinho com linha dourada

Moedas Suportadas

EUR, BRL, USD, GBP, JPY, CAD, AUD, CHF, CNY, INR, AED, SAR, SGD, NZD, KRW, MXN, ZAR, SEK, NOK, DKK