O que é um webhook?
Um webhook é uma mensagem automática enviada pelo nosso sistema para outra aplicação sempre que acontece algo importante, como quando uma fatura é criada ou revertida. Recebes estas notificações instantaneamente, o que te permite reagir em tempo real.
Isto permite-te:
Sincronizar faturas com ferramentas de contabilidade
Acionar automações
Manter os sistemas externos atualizados em tempo real
Nota: os webhooks requerem uma configuração técnica e não são funcionalidades plug-and-play. Certifica-te de que tens conhecimentos de desenvolvimento de software antes de avançares até ao final deste guia.
Antes de começares
Para utilizar webhooks de fatura, precisas de um endpoint HTTPS seguro (URL) capaz de receber pedidos POST com dados JSON.
Guia passo a passo
Depois de teres o teu endpoint pronto, acede a https://backoffice.bsport.io/settings/webhook.
Clica no botão "Adicionar um webhook"
Seleciona o evento ao qual queres subscrever (tipos de evento indicados aqui).
Introduz o URL para o qual queres que o webhook envie a mensagem.
Clica em confirmar.
Agora podes ver o teu novo webhook a ser criado 🎉.
(Opcional) Ao clicar no botão "Testar", podes simular um evento para confirmar que o teu webhook está a funcionar.
Tipos de eventos
Podes subscrever diferentes eventos relacionados com o ciclo de vida de uma fatura:
invoice-finalize– Acionado quando uma fatura é criada e aberta (finalizada).invoice-revert– Acionado quando uma fatura é revertida (cancelada ou reembolsada)invoice-pay– Acionado quando uma fatura é totalmente paga.invoice-dispute– Acionado quando uma fatura é contestada.
Os seguintes eventos de fatura estão obsoletos e, por isso, não devem ser utilizados.
invoice-createinvoice-update
Payload do evento
Cada um destes eventos envia a mesma estrutura de payload, definida da seguinte forma.
Também podes encontrar aqui a descrição do JSON Schema do payload.
Descrição dos campos
Campo | Tipo | Descrição | Exemplo |
| string |
| |
| número (timestamp) | Timestamp de quando o evento foi acionado |
|
| Objeto | Detalhes sobre o evento e a fatura (ver abaixo). | - |
|
|
| "2025-11-04T09:03:11.653072Z" |
| string (uuid) | Identificador único da fatura | "923e2c97-8228-4d42-8a44-1783c70c50a1" |
| string | Tipo de objeto (sempre |
|
| string | Estado da fatura ( |
|
| string (date-time) | Quando a fatura foi criada (UTC). |
|
| string (date-time) | Quando a fatura foi criada (UTC). |
|
| string (date-time) | Quando a fatura foi emitida (UTC). |
|
| string (date-time) | Data de vencimento do pagamento (UTC). |
|
| string (date-time) | null | Quando a fatura foi cancelada (se aplicável). |
|
| string | Moeda da fatura (código ISO 4217). |
|
| número (cêntimos) | Valor total da fatura na unidade mais pequena (por exemplo, cêntimos). |
|
| número (cêntimos) | Valor em dívida na unidade mais pequena (por exemplo, cêntimos). |
|
| número (cêntimos) | Valor já pago na unidade mais pequena (por exemplo, cêntimos). |
|
| objeto | Empresa que emite a fatura. |
|
| número | ID único da empresa. Para saberes o ID da tua empresa, acede a esta página do backoffice página. |
|
| string | Nome da empresa. |
|
| string | Código do país. |
|
| string | Cidade. |
|
| string | Morada. |
|
| string | Código postal. |
|
| objeto | null | Cliente a quem é emitida a fatura (pode ser |
|
| número | ID único do cliente/membro. |
|
| string | Tipo de cliente (sempre |
|
| string | Nome completo. |
|
| string | Primeiro nome. |
|
| string | Apelido. |
|
| string | E-mail de contacto. |
|
| string | Número de telefone. |
|
| string | Documento oficial/nacional (pode ser o NIF). |
|
| objeto | Morada do cliente. |
|
| string | Morada (rua). |
|
| string (opcional) | Informação adicional da morada. |
|
| string | Cidade. |
|
| string | Código postal. |
|
| string | Estado/região. |
|
| string | Código do país. |
|
| objeto | Contentor das linhas de fatura. |
|
| número | Número de linhas de fatura. |
|
| array<objeto> | Array de linhas de fatura. |
|
| número | Identificador único da linha de fatura. |
|
| string | Nome/etiqueta do produto ou serviço. |
|
| número | Número de unidades adquiridas. |
|
| número (cêntimos) | Preço unitário com imposto incluído, em cêntimos. |
|
| número (cêntimos) | Preço total com imposto incluído antes do desconto ( |
|
| número (cêntimos) | Desconto/voucher aplicado a esta linha, em cêntimos. |
|
| número (cêntimos) | Valor final da linha após o desconto, em cêntimos. |
|
| objeto | Detalhes do cálculo do imposto. |
|
| número (%) | Percentagem da taxa de imposto (por exemplo, 20 = 20%). |
|
| número (cêntimos) | Imposto total incluído nesta linha, em cêntimos. |
|
| número (cêntimos) | Imposto incluído por unidade, em cêntimos. |
|
| string | Tipo de artigo bsport ( |
|
| string (url) | Link para o PDF da fatura. |
|
| string (url) | null | Link para o PDF do recibo de pagamento (se aplicável). |
|
| número | Tipo de fatura: 0=normal, 1=reversão, 2=nota de crédito, 3=migração. |
|
| string (uuid) | null | UUID da fatura original cancelada através desta (se aplicável). |
|
Exemplo
{
"event_type": "invoice-finalize",
"date": 1762246989,
"data": {
"date": "2025-11-04T09:03:11.653072Z",
"object": {
"id": "923e2c97-8228-4d42-8a44-1783c70c50a1",
"object": "invoice",
"status": "open",
"date_created": "2025-11-04T09:03:06.515219Z",
"date_issued": "2025-11-04T09:03:08.225042Z",
"date_due": "2025-11-04T09:03:07.292000Z",
"date_cancelled": null,
"currency": "eur",
"total": 36665,
"amount_due": 36665,
"amount_paid": 0,
"company": {
"id": 85329,
"name": "SaudeViva Portugal",
"country": "PT",
"city": "Lisbon",
"address": "Rua do Ouro 115",
"postal_code": "1100-062"
},
"customer": {
"id": 7644312,
"type": "individual",
"name": "Maria Oliveira",
"first_name": "Maria",
"last_name": "Oliveira",
"email": "maria.oliveira77@example.com",
"phone": "+351 912 345 678",
"official_document_id": "PT-19847765",
"address": {
"line1": "Avenida da Liberdade 202",
"line2": "4º Esq.",
"city": "Lisbon",
"postal_code": "1250-147",
"state": "Lisboa",
"country": "PT"
}
},
"line_items": {
"line_count": 6,
"data": [
{
"id": 2153,
"description": "£100 General Gift Voucher",
"quantity": 1,
"tax_included_unit_amount": 10000,
"tax_included_amount": 10000,
"voucher_applied": 0,
"line_total": 10000,
"tax_breakdown": {
"rate": 0,
"total_tax": 0,
"unit_tax": 0
},
"item_type": "consumer_giftcard"
},
{
"id": 249955,
"description": "Classic Jumper - Peacoat Navy",
"quantity": 2,
"tax_included_unit_amount": 4500,
"tax_included_amount": 9000,
"voucher_applied": 964,
"line_total": 8036,
"tax_breakdown": {
"rate": 20,
"total_tax": 1339,
"unit_tax": 670
},
"item_type": "shop-product"
},
{
"id": 15305,
"description": "Single 60 Minute Reiki Treatment",
"quantity": 1,
"tax_included_unit_amount": 7500,
"tax_included_amount": 7500,
"voucher_applied": 1384,
"line_total": 6116,
"tax_breakdown": {
"rate": 20,
"total_tax": 1019,
"unit_tax": 1019
},
"item_type": "private_pass"
},
{
"id": 15301,
"description": "Single 60 Minute Session",
"quantity": 1,
"tax_included_unit_amount": 7500,
"tax_included_amount": 7500,
"voucher_applied": 1383,
"line_total": 6117,
"tax_breakdown": {
"rate": 20,
"total_tax": 1019,
"unit_tax": 1019
},
"item_type": "private_pass"
},
{
"id": 427448,
"description": "Newbies",
"quantity": 1,
"tax_included_unit_amount": 4900,
"tax_included_amount": 4900,
"voucher_applied": 904,
"line_total": 3996,
"tax_breakdown": {
"rate": 20,
"total_tax": 666,
"unit_tax": 666
},
"item_type": "pass"
},
{
"id": 427451,
"description": "1 Session",
"quantity": 1,
"tax_included_unit_amount": 2500,
"tax_included_amount": 2500,
"voucher_applied": 100,
"line_total": 2400,
"tax_breakdown": {
"rate": 20,
"total_tax": 400,
"unit_tax": 400
},
"item_type": "pass"
}
]
},
"invoice_pdf": "https://assets.staging.bsport.io/invoices/2025-11-04/5cab7c93-cd01-4d15-9362-46b0a89919b5/invoice-24092226.pdf",
"receipt_pdf": null,
"invoice_type": 0,
"source_invoice_id": null
}
}
}




