> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.kennis.shop/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Webhook toevoegen aan je betaalpagina of product

Het toevoegen van een Webhook aan je betaalpagina is heel eenvoudig en kan in een paar stappen worden gedaan:

Ga naar de betaalpagina waar je de Webhook wilt toevoegen.

1. Klik op **Na aankoop acties**


![](https://storage.crisp.chat/users/helpdesk/website/f44907f4a96da000/1_1umevqi.png)

2. Klik op **Actie toevoegen** 


![](https://storage.crisp.chat/users/helpdesk/website/f44907f4a96da000/2_1a04bf9.png)

3. Kies voor **Betaalpagina** of **Product**
4. Klik op **Kies software**
5. Klik op **Webhook**
6. Voeg je **URL** toe en 
7. Klik op **Opslaan**


![](https://storage.crisp.chat/users/helpdesk/website/f44907f4a96da000/ks-1_13awrt2.png)


Nu is je webhook actief. 🙌


# ${color}[#c7c7c7](Technische documentatie)

Bouw je zelf de software die de webhook ontvangt? Hieronder vind je alle details om de integratie op te zetten.

## Wanneer wordt de webhook verstuurd?

De webhook wordt verstuurd **nadat de bestelling succesvol is betaald**. Het versturen gebeurt via een wachtrij, dus meestal binnen enkele seconden na de betaling — niet noodzakelijk op exact hetzelfde moment.

Er wordt **geen webhook** verstuurd voor mislukte of openstaande betalingen.

## Technische specificaties

| Eigenschap | Waarde |
|---|---|
| HTTP-methode | `POST` |
| Content-Type | `application/json` |
| Header | `kennis-api-version: 1` |
| Verwachte response | HTTP-statuscode tussen `200` en `299` |
| Authenticatie | Geen — de URL zelf is het geheim |

### Over authenticatie

We sturen geen handtekening of token mee. Behandel de webhook-URL daarom als een geheim: deel 'm niet publiekelijk en gebruik een URL die lastig te raden is (bijvoorbeeld met een willekeurige token in het pad).

### Response

Stuur een HTTP-statuscode tussen 200 en 299 terug om aan te geven dat je de webhook correct hebt ontvangen. Bij andere statuscodes markeren wij de poging als mislukt.

## Payload

De body die we versturen is een JSON-object met één veld `data`, waarin alle ordergegevens staan.

### Voorbeeld

```json
{
  "data": {
    "order_date": "2026-04-14T10:32:17.000Z",
    "order_id": 227666,
    "customer_email": "klant@voorbeeld.nl",
    "customer_first_name": "Jan",
    "customer_last_name": "de Vries",
    "customer_phone_number": "+31612345678",
    "newsletter_consent": 1,
    "checkout_url": "https://jouwschool.kennis.shop/pay/voorbeeld-checkout",
    "customer_address": {
      "business_name": "Voorbeeld B.V.",
      "country": "NL",
      "address_line_1": "Hoofdstraat 1",
      "address_line_2": "",
      "city": "Amsterdam",
      "postal_code": "1011AA",
      "state": "",
      "tax_id": "NL123456789B01"
    },
    "amount_total_incl_tax": 121.00,
    "amount_total_ex_tax": 100.00,
    "bought_products": [
      {
        "product_id": 42,
        "product_name": "Cursus Fotografie",
        "product_quantity": 1,
        "product_unit_price": 121.00,
        "product_total_incl_tax": 121.00,
        "product_total_ex_tax": 100.00,
        "event_date": "2026-05-20T09:00:00.000Z",
        "event_end_date": "2026-05-20T17:00:00.000Z",
        "event_location_type": "physical",
        "event_location_name": "Studio Centraal",
        "event_address": "Hoofdstraat 1, Amsterdam, 1011AA, NL"
      }
    ]
  }
}
```

### Velden-overzicht

#### Hoofdvelden

| Veld | Type | Uitleg |
|---|---|---|
| `order_date` | datetime (ISO 8601) | Tijdstip van betaling |
| `order_id` | getal | Uniek ordernummer |
| `customer_email` | tekst | E-mailadres van de klant |
| `customer_first_name` | tekst | Voornaam |
| `customer_last_name` | tekst | Achternaam |
| `customer_phone_number` | tekst | Telefoonnummer (indien ingevuld) |
| `newsletter_consent` | getal (`0` of `1`) | `1` als de klant heeft aangevinkt dat je hem/haar mag benaderen voor nieuwsbrieven |
| `checkout_url` | tekst | URL van de betaalpagina waarop is besteld |
| `amount_total_incl_tax` | getal | Totaalbedrag **inclusief** btw, in euro's |
| `amount_total_ex_tax` | getal | Totaalbedrag **exclusief** btw, in euro's |

> **Let op:** bedragen worden in euro's verstuurd (bijv. `121.00`), niet in centen.

#### `customer_address`

| Veld | Type | Uitleg |
|---|---|---|
| `business_name` | tekst | Bedrijfsnaam (leeg bij particulier) |
| `country` | tekst | Land (ISO-code, bijv. `NL`) |
| `address_line_1` | tekst | Straat + huisnummer |
| `address_line_2` | tekst | Extra regel (bijv. appartementnummer) |
| `city` | tekst | Plaats |
| `postal_code` | tekst | Postcode |
| `state` | tekst | Provincie/staat (indien van toepassing) |
| `tax_id` | tekst | Btw-nummer (leeg bij particulier) |

#### `bought_products` (array)

Eén item per gekocht product. Bevat per regel:

| Veld | Type | Uitleg |
|---|---|---|
| `product_id` | getal | Uniek productnummer |
| `product_name` | tekst | Naam van het product |
| `product_quantity` | getal | Aantal |
| `product_unit_price` | getal | Prijs per stuk, in euro's |
| `product_total_incl_tax` | getal | Regeltotaal inclusief btw, in euro's |
| `product_total_ex_tax` | getal | Regeltotaal exclusief btw, in euro's |
| `event_date` | datetime of `null` | Startdatum van het event (alleen bij event-producten) |
| `event_end_date` | datetime of `null` | Einddatum van het event |
| `event_location_type` | tekst of `null` | Bijv. `physical` of `online` |
| `event_location_name` | tekst of `null` | Naam van de locatie |
| `event_address` | tekst of `null` | Volledig adres van de locatie (samengevoegd) |

## Meerdere webhooks op dezelfde betaalpagina

Je kunt meerdere webhooks instellen op één betaalpagina. Bij een bestelling krijgt **elke ingestelde URL zijn eigen call** met dezelfde payload.

## Testen

Voordat je de webhook op je eigen systeem aansluit, kun je 'm eerst testen met een gratis tool als [webhook.site](https://webhook.site). Plak de tijdelijke URL in het webhook-veld, plaats een testbestelling, en bekijk de payload die binnenkomt. Pas daarna stel je de definitieve URL in.

## Veelgestelde vragen

**Wordt de webhook opnieuw geprobeerd als mijn server niet reageert?**
Als we geen 2xx-statuscode terugkrijgen, markeren we de poging als mislukt. Zorg dus dat je server beschikbaar is en snel een 2xx terugstuurt zodra je de data hebt ontvangen (je mag de verwerking daarna op de achtergrond doen).

**Kan ik de webhook handmatig opnieuw laten versturen?**
Neem hiervoor contact met ons op — we kunnen de webhook op basis van het ordernummer opnieuw aftrappen.

**Welke versie gebruik ik?**
Op dit moment is `kennis-api-version: 1` de enige ondersteunde versie. Nieuwe velden binnen deze versie voegen we alleen toe — bestaande velden verwijderen of hernoemen we niet. Zo blijft je integratie werken.


# ${color}[#c7c7c7](Relevante Artikelen)

* [Koppeling met ActiveCampaign / MailBlue](https://help.kennis.shop/nl/article/koppeling-met-activecampaign-mailblue-l5xwfm/)
* [Koppelen met Moneybird](https://help.kennis.shop/nl/article/koppelen-met-moneybird-weg5ve/)
* [Kennis.shop koppelen met Zapier](https://help.kennis.shop/nl/article/kennisshop-koppelen-met-zapier-1xyn116/)
