Integração InvoiceXpress: faturas automáticas a cada venda na Shelf

Atualizado a 23 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 isso, o InvoiceXpress emite a fatura-recibo a cada venda.

Antes de começar

  • Uma conta InvoiceXpress (a API está em todos os planos).
  • Para o Make, o n8n ou código: a chave da API e o nome da conta. A chave está nas definições da API da tua conta InvoiceXpress; o nome da conta é a primeira parte do endereço com que entras, NOME.app.invoicexpress.com.
  • Para o Zapier: basta ligar a conta InvoiceXpress dentro do Zapier.

A chave da API do InvoiceXpress dá acesso a toda a conta. Guarda-a só na ferramenta de automação e não a partilhes.

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.

Ligar a Shelf ao InvoiceXpress

  1. 1No Make, cria um cenário novo e adiciona o módulo Webhooks → Custom webhook. Clica em Add, dá-lhe um nome (por exemplo «Vendas Shelf») e copia o URL que o Make mostra (começa por https://hook.).
  2. 2Na Shelf, vai a Definições → Integrações → Webhooks, cola o URL e clica em Ligar webhook. Depois clica em Enviar evento de teste.
  3. 3Clica na ligação a seguir ao webhook e escolhe Set up a filter. Primeira condição: type, Text operators: Equal to, sale.paid. Clica em Add AND rule; segunda condição: data → amount → total, Numeric operators: Greater than, 0. Assim ficam de fora os produtos gratuitos (lead.created) e as vendas com cupão de 100%.
  4. 4Clica no + à direita do filtro, pesquisa HTTP e escolhe Make a request. URL: https://NOME.app.invoicexpress.com/invoice_receipts.json?api_key=A_TUA_CHAVE (com o nome da tua conta e a tua chave), Method POST, Body type Raw, Content type JSON (application/json). Liga Parse response.
  5. 5Em Request content, cola o corpo abaixo. Os {{1.data…}} são os campos do webhook (o 1 é o número do módulo): se ficarem como texto simples, clica em cada um e escolhe o campo na lista.
  6. 6Clica em Run once e, na Shelf, outra vez em Enviar evento de teste. No InvoiceXpress aparece uma fatura-recibo em rascunho: confirma o cliente, o valor e o IVA, e apaga o rascunho.
{
  "invoice": {
    "date": "{{formatDate(now; DD/MM/YYYY)}}",
    "due_date": "{{formatDate(now; DD/MM/YYYY)}}",
    "reference": "{{1.data.order_id}}",
    "client": {
      "name": "{{1.data.buyer.name}}",
      "code": "{{ifempty(1.data.buyer.nif; 1.data.buyer.email)}}",
      "email": "{{1.data.buyer.email}}",
      "fiscal_id": "{{1.data.buyer.nif}}",
      "country": "Portugal"
    },
    "items": [
      {
        "name": "{{1.data.product.title}}",
        "description": "Venda na Shelf",
        "unit_price": "{{1.data.amount.total}}",
        "quantity": "1",
        "tax": {
          "name": "IVA0"
        }
      }
    ],
    "tax_exemption": "M10"
  }
}

O code identifica o cliente no InvoiceXpress: o NIF, ou o email quando não há NIF. Se já existir um cliente com esse código, o InvoiceXpress usa a ficha dele.

Passar a sério (Make)

  1. 1No filtro, clica em Add AND rule e junta uma terceira condição: test, Basic operators: Does not exist. Assim, o botão de teste da Shelf nunca emite uma fatura verdadeira.
  2. 2Para a fatura ficar emitida, junta outro módulo HTTP → Make a request depois do primeiro: Method PUT, URL https://NOME.app.invoicexpress.com/invoice_receipts/{{2.data.invoice_receipt.id}}/change-state.json?api_key=A_TUA_CHAVE (o 2 é o número do primeiro módulo HTTP; escolhe o id na lista), Body type Raw, JSON, e o corpo {"invoice": {"state": "finalized"}}.
  3. 3Para o cliente receber a fatura por email (opcional), mais um módulo HTTP: Method PUT, URL https://NOME.app.invoicexpress.com/invoice_receipts/{{2.data.invoice_receipt.id}}/email-document.json?api_key=A_TUA_CHAVE e o corpo abaixo.
  4. 4Liga o cenário no interruptor em baixo, com Immediately as data arrives. A partir daqui, cada venda paga emite a fatura-recibo.
{
  "message": {
    "client": {
      "email": "{{1.data.buyer.email}}",
      "save": "0"
    },
    "subject": "A tua fatura",
    "body": "Obrigado pela tua compra. Segue a fatura-recibo."
  }
}

Os campos da fatura

InvoiceXpressCampo do webhook
Nome do clientedata.buyer.name
Email do clientedata.buyer.email
NIFdata.buyer.nif (vazio: consumidor final)
Descrição do artigodata.product.title
Preçodata.amount.total
Referênciadata.order_id

O corpo vem para quem está isento de IVA pelo art. 53.º: IVA0 com o motivo M10. Se cobras IVA a 23%, usa "tax": {"name": "IVA23"}, apaga a linha tax_exemption e lembra-te de que o unit_price do InvoiceXpress é sem IVA: no Make, {{parseNumber(1.data.amount.total; ".") / 1.23}}. Se a tua loja cobra o IVA pela Shelf, o valor sem IVA já chega em data.tax.taxable_amount. Confirma no primeiro rascunho e com o teu contabilista.

O preço é o que o cliente pagou (data.amount.total), já com o cupão e os order bumps. Todos os campos da venda estão em Webhooks da Shelf.

Perguntas frequentes

O que acontece se a minha automação estiver desligada?+

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, no Zapier e no n8n, o histórico mostra cada execução e a resposta do programa de faturação.

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 usa a taxa ou o motivo de isenção que ele indicar.

Quantos webhooks posso ligar?+

Um por loja, por agora.

E se o meu produto já tem um campo personalizado «NIF»?+

Continua a funcionar. Nesse produto a Shelf não mostra o Quero fatura com NIF, e o que o cliente escrever no teu campo também chega em data.buyer.nif, se for um NIF válido.

Ainda não tens loja Shelf?

Cria a tua em minutos: 14 dias grátis, 0% de comissão sobre as vendas.

Criar a minha loja