Integração Vendus: faturas automáticas a cada venda na Shelf
Atualizado a 21 de outubro de 2026
Um webhook envia cada venda paga da tua loja para um endereço teu, em segundos: produto, cliente (nome, email e NIF quando o indica), valor, cupão e método de pagamento. Com o Make (tem plano gratuito) e a API da Vendus, isso chega para emitir a fatura-recibo (FR) a cada venda. Não precisas de saber programar: é copiar, colar e mapear campos.
1. Gerar a chave da API na Vendus
- 1No backoffice da Vendus, no canto inferior esquerdo, abre Configuração → Integrações → API Vendus.
- 2Confirma que Acesso API está ligado e copia o conteúdo do campo API key. A chave pertence a um utilizador da Vendus: as faturas emitidas pela API ficam em nome dele.
Guarda a chave só no Make: quem a tiver consegue emitir documentos em teu nome. Em contas Vendus mais antigas, a opção pode aparecer em APPS → API.
2. Criar o cenário no Make e copiar o URL
- 1No Make, cria um cenário novo e adiciona o módulo Webhooks → Custom webhook.
- 2Clica em Add, dá-lhe um nome (por exemplo «Vendas Shelf») e copia o URL que o Make mostra (começa por
https://hook.).
3. Ligar à Shelf
- 1No painel, vai a Definições → Integrações → Webhooks, cola o URL e clica em Ligar webhook.
- 2Clica em Enviar evento de teste.
- 3No Make, o webhook mostra que recebeu os dados: uma venda de exemplo (Cliente Teste, NIF 123456789) com todos os campos para mapear.
O NIF do cliente chega em data.buyer.nif: nos checkouts pagos, quem compra pode abrir Quero fatura com NIF e escrevê-lo, se quiser (ligas ou desligas em Definições → Faturação). Sem NIF, o campo vem a null e a fatura fica para consumidor final. Não é preciso criar um campo personalizado.
4. Deixar passar só as vendas pagas
- 1Clica na ligação a seguir ao webhook e escolhe Set up a filter: continua só se
typefor igual asale.paid, setestnão existir e sedata.amount.totalfor maior que 0. Uma venda com cupão de 100% chega com total 0.00 ecoupon_full: true; o evento de teste traztest: true.
5. Saber o ID do método de pagamento na Vendus
A fatura-recibo regista o pagamento com o ID de um método de pagamento da tua conta Vendus. Só precisas de o ver uma vez:
- 1Adiciona, só por agora, um módulo HTTP → Make a request: URL
https://www.vendus.pt/ws/v1.1/documents/paymentmethods, método GET e um cabeçalhoAuthorizationcom o valorBearer A_TUA_CHAVE. - 2Corre-o com Run once e, na resposta, copia o
iddo método que queres usar (o de cartão ou de pagamento online, por exemplo). Depois apaga este módulo.
6. Emitir a fatura-recibo na Vendus
- 1A seguir ao filtro, adiciona um Router com duas rotas: Com NIF (filtro:
data.buyer.nifexiste) e Sem NIF (filtro:data.buyer.nifnão existe). A Vendus pede que não se envie o cliente sem NIF, e nunca com 999999990. - 2Em cada rota, adiciona HTTP → Make a request: URL
https://www.vendus.pt/ws/v1.1/documents, método POST, cabeçalhoAuthorizationcomBearer A_TUA_CHAVE, Body type Raw e Content type JSON (application/json). - 3Cola o corpo abaixo. No Make, os campos do webhook aparecem como
{{1.data…}}(o 1 é o número do módulo do webhook): escolhe-os na lista para os inserir. TrocaID_DO_METODOpelo ID do passo 5. Na rota Sem NIF, apaga o blococlient. - 4O artigo vai com o preço antes do cupão (
data.amount.original) e o desconto do cupão (data.amount.discount), por isso a fatura mostra, por exemplo, 15,00 − 1,50 = 13,50; o pagamento é o que o cliente pagou (data.amount.total). Sem cupão, o desconto vem a 0.00. Se quiseres o código do cupão na fatura, junta ao artigo"text": "Cupão {{1.data.amount.coupon}}"(deixa-o só numa rota para vendas com cupão, para não aparecer «Cupão» vazio). - 5Faz o primeiro teste com
"mode": "tests", o modo de testes da API da Vendus, e confirma o documento na Vendus. Quando estiver certo, muda para"normal"e liga o cenário com Scheduling: Immediately.
{
"type": "FR",
"mode": "tests",
"external_reference": "{{1.data.order_id}}",
"client": {
"name": "{{1.data.buyer.name}}",
"fiscal_id": "{{1.data.buyer.nif}}",
"email": "{{1.data.buyer.email}}",
"send_email": "yes"
},
"items": [
{
"reference": "{{1.data.product.id}}",
"title": "{{1.data.product.title}}",
"qty": 1,
"gross_price": "{{1.data.amount.original}}",
"discount_amount": "{{1.data.amount.discount}}",
"type_id": "S",
"tax_id": "NOR"
}
],
"payments": [
{
"id": "ID_DO_METODO",
"amount": "{{1.data.amount.total}}"
}
]
}| Vendus | Campo do webhook |
|---|---|
| client.name | data.buyer.name |
| client.email | data.buyer.email |
| client.fiscal_id | data.buyer.nif (vazio: sem bloco client, consumidor final) |
| items.title | data.product.title |
| items.reference | data.product.id |
| items.gross_price (preço com IVA, antes do cupão) | data.amount.original |
| items.discount_amount (desconto em euros) | data.amount.discount (0.00 sem cupão) |
| payments.amount (o que o cliente pagou) | data.amount.total |
| external_reference | data.order_id |
Se usas order bumps: numa venda com cupão, data.amount.original é só o preço do produto principal; sem cupão, é o total da venda, já com os order bumps. Para a fatura bater certo em todas as vendas, numa venda com order bumps (data.bumps não vazio) usa uma linha com gross_price = data.amount.total e sem discount_amount, numa rota à parte do Router.
O IVA vai em tax_id: NOR (taxa normal), INT (intermédia), RED (reduzida), ISE (isento) ou NS (não sujeito). Se estiveres isento, usa ISE com o motivo em tax_exemption (por exemplo M10, regime de isenção). type_id é S para serviços e P para produtos. Confirma a taxa, o motivo e o tipo com o teu contabilista.
O evento
sale.paid: uma venda paga. Odata.amount.totalé o que o cliente pagou, com IVA e com os order bumps incluídos (cada order bump vem também emdata.bumps, com título e valor). Uma venda com cupão de 100% chega com total 0.00 ecoupon_full: true.lead.created(alguém recebe um produto gratuito) também chega ao webhook: o filtro do passo 4 deixa-o de fora.
Perguntas frequentes
Posso usar o Zapier ou o n8n em vez do Make?+
Sim. O webhook é o mesmo e o corpo JSON também. No Zapier, usa Webhooks by Zapier → Catch Hook e depois Webhooks by Zapier → Custom Request para a API da Vendus; no n8n, o nó Webhook e o nó HTTP Request.
O que acontece se o meu cenário estiver desligado?+
Tentamos de novo até 8 vezes ao longo de cerca de 45 horas. Se o endereço responder 410 (removido), o webhook é desligado; reativa-o em Definições → Integrações.
Onde vejo se os envios estão a funcionar?+
Na Shelf, em Definições → Integrações → Webhooks, na lista Últimos envios: cada evento com o estado e o código de resposta. No Make, o histórico do cenário mostra cada execução e a resposta da Vendus.
Que taxa de IVA ou motivo de isenção devo usar?+
Depende da tua atividade e do teu regime. Confirma com o teu contabilista e escreve no corpo o tax_id (e o tax_exemption, se fores isento) que ele indicar.
O cliente recebe a fatura por email?+
Na rota Com NIF, sim: send_email: yes pede à Vendus que a envie para data.buyer.email. Sem NIF a fatura fica para consumidor final, sem dados do cliente.