Passer au contenu principal

Comment configurer et utiliser les webhooks "Factures"

Les webhooks "Factures" vous permettent d’envoyer automatiquement les données de facturation depuis bsport vers un autre système (comme votre logiciel de comptabilité ou vos outils internes) à chaque fois qu’un événement lié à une facture se produit.

G
Écrit par Georges Pirini
Mis à jour cette semaine

Qu’est-ce qu’un webhook ?

Un webhook est un message automatique envoyé par notre système à une autre application lorsqu’un événement important se produit, par exemple lorsqu’une facture est créée ou annulée.

Vous recevez ces notifications instantanément, ce qui vous permet de réagir en temps réel.

Cela vous permet de :

  • Synchroniser les factures avec des outils comptables

  • Déclencher des automatisations

  • Maintenir des systèmes externes à jour en temps réel

Remarque : Les webhooks nécessitent une configuration technique et ne sont pas des fonctionnalités prêtes à l’emploi. Assurez-vous de disposer de compétences en développement logiciel avant de suivre l’intégralité de ce guide.

Remarque : Les webhooks nécessitent une configuration technique et ne sont pas des fonctionnalités prêtes à l’emploi. Assurez-vous de disposer de compétences en développement logiciel avant de poursuivre ce guide.


Avant de commencer

Pour utiliser les webhooks de factures, vous devez disposer d’un endpoint HTTPS sécurisé (URL) capable de recevoir des requêtes POST contenant des données au format JSON.

Guide étape par étape

  1. Une fois votre endpoint prêt, rendez-vous sur :
    https://backoffice.bsport.io/settings/webhook

  2. Cliquez sur le bouton "Ajouter un Webhook"

  3. Sélectionnez l’événement auquel vous souhaitez vous abonner (types d’événements listés ci-dessous)

  4. Saisissez l’URL vers laquelle le webhook doit envoyer le message

  5. Cliquez sur "Valider"

  6. Votre nouveau webhook est maintenant créé 🎉

  7. (Optionnel) En cliquant sur le bouton "Tester", vous pouvez simuler un événement afin de vérifier que votre webhook fonctionne correctement.


Types d’événements

Vous pouvez vous abonner à différents événements liés au cycle de vie d’une facture:

  • invoice-finalize – Déclenché lorsqu’une facture est créée et ouverte (finalisée)

  • invoice-revert – Déclenché lorsqu’une facture est annulée (annulation ou remboursement)

  • invoice-pay – Déclenché lorsqu’une facture est entièrement payée

  • invoice-dispute – Déclenché lorsqu’une facture fait l’objet d’un litige

Les événements suivants sont obsolètes et ne doivent plus être utilisés :

  • invoice-create

  • invoice-update


Payload de l’événement

Chacun de ces événements envoie une payload ayant la même structure, définie ci-dessous.

Vous pouvez également consulter ici la description du JSON Schema de la payload.

Description

Field

Type

Description

Example

event_type

string

"invoice-finalize"

date

number (timestamp)

Horodatage du déclenchement de l’événement

1762246989

data

Object

Détails concernant l’événement et la facture (voir ci-dessous)

-

data.date

Date de l’événement (UTC)

"2025-11-04T09:03:11.653072Z"

data.object.id

string (uuid)

Identifiant unique de la facture

"923e2c97-8228-4d42-8a44-1783c70c50a1"

data.object.status

string

Statut de la facture (open, paid, refunded, voided)

data.object.date_created

string (date-time)

Date de création de la facture (UTC)

"2025-11-04T09:03:06.515219Z"

data.object.date_issued

string (date-time)

Date d’émission de la facture (UTC)

"2025-11-04T09:03:08.225042Z"

data.object.date_due

string (date-time)

Date d’échéance du paiement (UTC)

"2025-11-04T09:03:07.292000Z"

data.object.date_cancelled

string (date-time) | null

Date d’annulation (si annulée)

null

data.object.currency

string

Devise (ISO 4217 code).

"eur"

data.object.total

number (cents)

Montant total de la facture (plus petite unité monétaire)

36665

data.object.amount_due

number (cents)

Montant restant dû

36665

data.object.amount_paid

number (cents)

Montant déjà payé

0

data.object.company

object

Société émettrice

{ ... }

data.object.company.id

number

Identifiant unique de la société

85329

data.object.company.name

string

Nom de la société

"SaudeViva Portugal"

data.object.company.country

string

Code pays

"PT"

data.object.company.city

string

Ville

"Lisbon"

data.object.company.address

string

Adresse

"Rua do Ouro 115"

data.object.company.postal_code

string

Code postal/ZIP

"1100-062"

data.object.customer

object | null

Client (Peut être null pour des factures anonymes issues du Point de Vente.)

{ ... }

data.object.customer.id

number

Identifiant unique du client/membre

7644312

data.object.customer.type

string

Type de client (toujours individual)

"individual"

data.object.customer.name

string

Nom complet

"Maria Oliveira"

data.object.customer.first_name

string

Prénom

"Maria"

data.object.customer.last_name

string

Nom

"Oliveira"

data.object.customer.email

string

Email de contact

"maria.oliveira77@example.com"

data.object.customer.phone

string

Numéro de téléphone

"+351 912 345 678"

data.object.customer.official_document_id

string

Identifiant officiel (ex : NIF)

"PT-19847765"

data.object.customer.address

object

Adresse du client

{ ... }

data.object.customer.address.line1

string

Adresse principale

"Avenida da Liberdade 202"

data.object.customer.address.line2

string (optional)

Complément d’adresse

"4º Esq."

data.object.customer.address.city

string

Ville

"Lisbon"

data.object.customer.address.postal_code

string

Code Postal

"1250-147"

data.object.customer.address.state

string

Région

"Lisboa"

data.object.customer.address.country

string

Code pays

"PT"

data.object.line_items

object

Lignes de facture

{ ... }

data.object.line_items.line_count

number

Nombre de lignes

6

data.object.line_items.data

array<object>

Liste des lignes de facture

[{ ... }, { ... }]

data.object.line_items.data[].id

number

Identifiant unique de la ligne

2153

data.object.line_items.data[].description

string

Nom/description du produit ou service

"£100 General Gift Voucher"

data.object.line_items.data[].quantity

number

Quantité achetée

1

data.object.line_items.data[].tax_included_unit_amount

number (cents)

Prix unitaire TTC

10000

data.object.line_items.data[].tax_included_amount

number (cents)

Prix total TTC avant remise

10000

data.object.line_items.data[].voucher_applied

number (cents)

Remise appliquée

0

data.object.line_items.data[].line_total

number (cents)

Montant final après remise

10000

data.object.line_items.data[].tax_breakdown

object

Détail des taxes

{ ... }

data.object.line_items.data[].tax_breakdown.rate

number (%)

Taux de TVA (ex : 20 = 20 %)

0

data.object.line_items.data[].tax_breakdown.total_tax

number (cents)

Montant total de taxe inclus

0

data.object.line_items.data[].tax_breakdown.unit_tax

number (cents)

Taxe incluse par unité

0

data.object.line_items.data[].item_type

string

Type d’élément bsport (shop-product, pass, private_pass, consumer_giftcard, refund)

"consumer_giftcard"

data.object.invoice_pdf

string (url)

Lien vers le PDF de la facture

"https://assets.staging.bsport.io/.../invoice-24092226.pdf"

data.object.receipt_pdf

string (url) | null

Lien vers le reçu de paiement (le cas échéant)

null

data.object.invoice_type

number

Type de facture : 0=normale, 1=annulation (reverse), 2=avoir, 3=migration

0

data.object.source_invoice_id

string (uuid) | null

UUID de la facture originale annulée via celle-ci (le cas échéant)

null

Exemple

{
"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
}
}
}

Avez-vous trouvé la réponse à votre question ?