---
title: "API Documentatie - mssgs | Bouw Webhooks, Bots & Integraties"
description: "mssgs API documentatie. Bouw integraties en bots met webhooks, aangepaste triggers en de REST API. Inclusief voorbeelden, foutcodes en interactieve actions."
canonical: https://mss.gs/nl/docs
language: nl
---

# Webhooks & Integraties

Bouw bots, automatiseringen en integraties met mssgs webhooks en triggers

#### Botberichten

Rijke embed-kaarten, interactieve knoppen en live-bijgewerkte berichten voor bots.

#### Release notes

Nieuwe functies en fixes in elke mssgs-release.

## Aan de slag

Met mssgs webhooks kun je berichten naar kanalen sturen en interactieve bots bouwen die reageren op commando's.

#### Maak een webhook aan

Ga naar Serverinstellingen > Integraties en maak een nieuwe webhook of trigger aan.

#### Kopieer de URL

Kopieer de webhook-URL of trigger-GUID voor je integratie.

#### Begin met bouwen

Stuur JSON payloads naar de webhook-URL om berichten te plaatsen.

#### Twee manieren om te integreren

**Incoming Webhooks**: Stuur berichten naar mssgs vanuit externe tools (CI/CD, monitoring, etc.) **Webhook Triggers**: Bouw interactieve bots die reageren op commando's en knopkliks.

## Incoming Webhooks

Stuur berichten naar een kanaal via een webhook-URL. Ideaal voor CI/CD-notificaties, monitoring-alerts en andere automatiseringen.

### Request structuur

Stuur een POST request met je bericht payload als JSON body naar de webhook-URL. Genereer de URL in de app via **Beheer server → Webhooks**; de URL zelf authenticeert het verzoek, dus je stuurt geen token mee in de body.

```json
{
  "content": "Hello from my integration!",
  "color": "green",
  "title": "My Bot"
}
```

### Simple Format

De eenvoudigste manier om een bericht te versturen.

```json
{
  "content": "Server backup completed at 03:00 UTC",
  "color": "green",
  "title": "Backup Bot"
}
```

| Field | Type | Beschrijving |
| --- | --- | --- |
| content | string | Berichttekst required |
| color | string | blue , green , orange , red , yellow , purple |
| title | string | Titel boven het bericht |
| title_url | string | Maakt de titel een klikbare link |
| sub_title | string | Kleinere tekst onder de titel |
| avatar_url | string | Avatar afbeeldings-URL |

### Full Format (message_container)

Voor meer controle over het bericht, gebruik het volledige message_container object.

```json
{
  "message_container": {
    "type": "embed_message",
    "color": "blue",
    "title": "Order Update",
    "description": "Your order #12345 has been shipped!",
    "title_url": "https://example.com/orders/12345",
    "sub_title": "Estimated delivery: Tomorrow",
    "bot_name": "Order Bot",
    "fields": [
      { "field": "Status", "value": "Shipped" },
      { "field": "Tracking", "value": "ABC123456" }
    ]
  },
  "actions": [...]
}
```

| Field | Type | Beschrijving |
| --- | --- | --- |
| type | string | embed_message (standaard) of system_message |
| color | string | Accentkleur van het bericht |
| title | string | Titel van het bericht |
| description | string | Hoofdtekst required |
| title_url | string | Link achter de titel |
| sub_title | string | Ondertiteltekst |
| bot_name | string | Aangepaste botnaam |
| avatar_url | string | Avatar afbeelding |
| fields | array | Sleutel-waarde velden |

### Fields

Voeg gestructureerde sleutel-waarde data toe aan je bericht.

```json
{
  "fields": [
    { "field": "Status", "value": "Completed" },
    { "field": "Duration", "value": "2m 34s" },
    { "field": "Environment", "value": "Production" }
  ]
}
```

## Bouw je embed

Bewerk de velden of de JSON payload. Beide blijven in sync. Zie het bericht renderen precies zoals in een kanaal. Dit is de echte webhook body; kopieer hem als het goed staat.

## Webhook Triggers

Met webhook triggers kun je externe services koppelen aan je server. Wanneer een gebruiker een bijpassend commando typt (bijv. /help ) of op een action button klikt, stuurt de backend een POST naar je webhook-URL. Je webhook antwoordt met JSON om een bericht terug te sturen naar het kanaal.

#### Gebruiker typt een commando

Een gebruiker stuurt een bericht dat begint met het prefix van je trigger, bijv. /help

#### mssgs roept je webhook aan

De backend stuurt een POST-request naar je geconfigureerde webhook-URL met de berichtgegevens.

#### Je antwoordt met JSON

Je server retourneert een JSON-response met de berichtinhoud, embeds en actions.

#### Bericht verschijnt in het kanaal

mssgs toont de response als een bericht in het kanaal.

### Request die je webhook ontvangt

Wanneer een gebruiker een bericht stuurt dat begint met het trigger_match prefix van je trigger:

```json
{
  "server_guid": "abc12345-...",
  "channel_guid": "def67890-...",
  "trigger_match": "/help",
  "message": {
    "id": "d01ZZdef6-xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "content": "/help how do I create a channel?",
    "member_guid": "member-guid-here",
    "user_guid": "user-guid-here",
    "cms": 1234567890123,
    "group_guids": ["group-guid-1", "group-guid-2"]
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "stream_url": "https://mss.gs/api/v1/instant/6b1e...c0?token=a1b2c3d4-..."
}
```

#### Request via Action Button

Wanneer getriggerd via een trigger:{guid} action button, is de content altijd "[Action Triggered]" en bevat het de payload van de action:

```json
{
  "server_guid": "abc12345-...",
  "channel_guid": "def67890-...",
  "trigger_match": "/help",
  "message": {
    "id": "d01ZZdef6-xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "content": "[Action Triggered]",
    "member_guid": "member-guid-here",
    "user_guid": "user-guid-here",
    "cms": 1234567890123,
    "group_guids": ["group-guid-1", "group-guid-2"],
    "is_action_button": true,
    "action_payload": {
      "custom_key": "custom_value"
    }
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "stream_url": "https://mss.gs/api/v1/instant/6b1e...c0?token=a1b2c3d4-..."
}
```

#### Request Velden

| Field | Type | Beschrijving |
| --- | --- | --- |
| server_guid | string | De server waar de trigger is afgevuurd |
| channel_guid | string | Het kanaal waar het bericht is verstuurd |
| trigger_match | string | Het prefix dat overeenkomt (bijv. /help ) |
| message | object | Het bericht dat de webhook heeft getriggerd. Bij action-button triggers is dit een synthetisch "[Action Triggered]" -bericht, niet het bericht waar de knop op stond |
| message.id | string | Uniek bericht-ID. Bij action-button triggers wordt het vers gegenereerd voor het synthetische bericht — het is *niet* het ID van het bericht waar de knop op stond (dat ID bereikt de webhook-body nooit) |
| message.content | string | Volledige berichttekst (command match) of "[Action Triggered]" (action button) |
| message.member_guid | string | Het serverlid dat de trigger heeft afgevuurd |
| message.user_guid | string | De globale GUID van de gebruiker |
| message.group_guids | array | De servergroep-GUID's waar het lid bij hoort (gebruik om rollen zoals admin te controleren) |
| message.cms | number | Tijdstempel in milliseconden |
| message.is_action_button | boolean | true wanneer getriggerd via een action button (niet aanwezig bij command matches) |
| message.action_payload | object | Aangepaste data van de action button (alleen aanwezig bij action triggers) |
| callback_url | string | Unieke URL om het antwoordbericht bij te werken of te verwijderen (geldig voor 30 minuten) |
| stream_url | string | Unieke instant SSE-stream voor live interacties (replies, reacties, knopdrukken) met je antwoordbericht. Open hem om te luisteren; geldig voor 10 minuten |

### Response Format

Je webhook moet antwoorden met een 200 status en een JSON body. De response wordt een bericht in het kanaal.

#### Simpele response

```json
{
  "content": "Hello! How can I help you?"
}
```

#### Embed response

```json
{
  "message_container": {
    "type": "embed_message",
    "color": "blue",
    "title": "Help",
    "description": "Here's how to create a channel...",
    "title_url": "https://docs.example.com/channels",
    "sub_title": "Channel Guide",
    "avatar_url": "https://example.com/bot-avatar.png"
  }
}
```

#### Volledige response met actions

```json
{
  "content": "Here's what I found:",
  "message_container": {
    "type": "embed_message",
    "color": "green",
    "title": "Search Results",
    "description": "Found 3 matching items.",
    "title_url": "https://example.com/results",
    "sub_title": "Query: channels",
    "avatar_url": "https://example.com/bot-avatar.png"
  },
  "actions": [
    {
      "type": "button",
      "text": "View Details",
      "color": "blue",
      "triggers": [
        {
          "action": "ws:send",
          "payload": {
            "method": "USER_REQUESTED_TRIGGER",
            "server_guid": "server-guid",
            "channel_guid": "channel-guid",
            "trigger_guid": "details-trigger-guid",
            "action": { "result_id": "42" }
          }
        }
      ]
    },
    {
      "text": "Open Docs",
      "type": "url:https://docs.example.com"
    }
  ]
}
```

#### Response Velden

| Field | Type | Beschrijving |
| --- | --- | --- |
| content | string | Platte tekst berichtinhoud |
| message_container | object | Rijke embed/systeembericht weergave |
| message_container.type | string | embed_message (standaard) of system_message |
| message_container.color | string | blue , green , orange , red (standaard: blue ) |
| message_container.title | string | Embed titel |
| message_container.description | string | Embed inhoudstekst |
| message_container.title_url | string | Maakt de titel een klikbare link |
| message_container.sub_title | string | Kleinere tekst onder de titel |
| message_container.avatar_url | string | Avatar afbeeldings-URL naast de embed |
| actions | array | Action buttons (zie [Actions](#actions)) |

Minstens een van content , message_container of actions moet aanwezig zijn; anders wordt er geen bericht aangemaakt.

De berichtauteur is de post_app_name van je trigger (geconfigureerd in serverinstellingen). Als deze niet is ingesteld, wordt de servernaam gebruikt.

#### Timeout

Je webhook moet binnen **5 seconden** antwoorden. Bij een timeout wordt een foutmelding getoond aan de gebruiker. Gebruik de [callback URL](#callback-url) als je meer verwerkingstijd nodig hebt.

## Actions

Actions zijn interactieve knoppen die onder je bericht worden weergegeven. Er zijn drie soorten: url:{url} (open een link), trigger:{guid} (vuur een echte webhook trigger af) en webhook_action (server-gestuurde effecten; aanbevolen voor interactieve knoppen).

### Action Velden

| Field | Type | Beschrijving |
| --- | --- | --- |
| type | string | "webhook_action" (server-gestuurd), of shorthand "trigger:{guid}" / "url:{url}" required |
| text | string | Knoptekst (accepteert ook label ) required |
| color | string | green , blue , purple (primair) of red , orange , yellow (secundair) |
| id | string | Voor webhook_action : stabiele knop-id, wordt bij een druk teruggestuurd zodat de backend weet welke knop is ingedrukt |
| payload | object | Data die wordt teruggestuurd bij een druk ( trigger:{guid} en webhook_action ) |
| triggers | array | Server-side effect-stappen die draaien wanneer een webhook_action -knop wordt ingedrukt |

### Simple Shorthands

Voor eenvoudige actions, gebruik de type shorthand:

| Type | Beschrijving |
| --- | --- |
| trigger:{guid} | Vuurt een andere webhook trigger af op basis van GUID. De trigger ontvangt message.action_payload met de payload van de action. |
| url:{url} | Opent de URL in de browser van de gebruiker |

```json
{
  "actions": [
    {
      "text": "Check Status",
      "type": "trigger:abc123-trigger-guid",
      "payload": { "order_id": "12345" }
    },
    {
      "text": "View Order",
      "type": "url:https://example.com/orders/12345"
    }
  ]
}
```

#### Wat gebeurt er wanneer een action wordt geklikt?

Wanneer de gebruiker op "Check Status" klikt, ontvangt de webhook van de doeltrigger een nieuw request met message.content ingesteld op "[Action Triggered]" , message.is_action_button ingesteld op true , en message.action_payload ingesteld op { "order_id": "12345" } .

### Interactieve knoppen (server-gestuurd)

Een webhook_action -knop wordt **door de backend** afgehandeld; geen echte trigger nodig. Bij een druk stuurt de client een WEBHOOK_MESSAGE_ACTION -commando met het bericht-id, de id van de knop en de payload . De backend geeft de druk vervolgens door aan de instant SSE-stream van het bericht (als een apparaat luistert), draait de server-side triggers -stappen van de knop, en broadcast het resultaat naar **iedereen** in het kanaal. Omdat die stappen uit het opgeslagen bericht worden gelezen (nooit van de client), kan een lid alleen uitvoeren wat jij hebt gedefinieerd.

#### Server-side trigger-stappen

De triggers -array van een knop bevat de effect-stappen die bij een druk draaien, op volgorde. Ze draaien op de backend en broadcasten naar iedereen in het kanaal:

| action | Effect (broadcast naar iedereen) | Velden |
| --- | --- | --- |
| update_message | Vervang de container / knoppen; tekst aanpassen, knoppen herkleuren of vervangen, knoppen verwijderen ( actions: [] ), of de afbeelding wisselen | message_container , actions , content |
| remove_message | Verwijder het bericht | Geen |
| add_reaction | Voeg een reactie toe, als het drukkende lid | emoji |
| add_reply | Plaats een reply, als het drukkende lid | content |

Stappen draaien op volgorde en zijn best-effort; een mislukte stap wordt gelogd en de rest draait alsnog. Om een *echte* trigger af te vuren, gebruik de trigger:{guid} -shorthand, niet triggers .

#### Voorbeeld: zelf-updatende "Open Gate"-knop

Iedereen krijgt directe broadcast-feedback van de server-side stappen; het edge-apparaat zet de definitieve status via de callback-URL zodra de poort fysiek opent.

```json
{
  "message_container": { "color": "yellow", "title": "Front Door", "description": "Doorbell rang" },
  "actions": [
    {
      "type": "webhook_action",
      "id": "open_gate",
      "text": "Open Gate",
      "color": "green",
      "payload": { "btn": "open_gate" },
      "triggers": [
        {
          "action": "update_message",
          "message_container": { "color": "blue", "title": "Front Door", "description": "Opening..." },
          "actions": [ { "type": "webhook_action", "id": "opening", "text": "Opening...", "color": "blue" } ]
        },
        { "action": "add_reaction", "emoji": ":white_check_mark:" }
      ]
    }
  ]
}
```

#### Wat gebeurt er wanneer "Open Gate" wordt ingedrukt

1. Iedereen ziet de knop veranderen in "Opening..." en een vinkje-reactie verschijnen; de server-side stappen, gebroadcast door de backend (niet alleen de drukker). 2. Je edge-apparaat dat op de instant stream luistert ontvangt de druk, opent de poort, en doet dan een PUT op de callback_url om de definitieve status te zetten ("Opened").

#### Verwijderd: client-only stappen

De oude client-only local:update_message / local:remove_message -stappen zijn weg. Gebruik in plaats daarvan de server-side update_message / remove_message -stappen; die broadcasten naar iedereen, niet alleen de drukker. Een druk op een bericht dat niet meer bestaat geeft MESSAGE_NOT_FOUND .

#### Rate limit

Gebruikers worden beperkt in snelheid om spam te voorkomen bij het afvuren van triggers.

## Callback URL

Elk webhook-request bevat een callback_url : een unieke, token-geauthenticeerde URL die je service kan aanroepen om het antwoordbericht **bij te werken** of te **verwijderen** nadat het is geplaatst. De URL is geldig voor **30 minuten**.

#### Toepassingen

- Een "bezig met verwerken..."-bericht bijwerken met eindresultaten

- Live voortgang tonen (bijv. build-status, deployment)

- Een bericht verwijderen wanneer het niet meer relevant is

### Bericht bijwerken

```json
{
  "content": "Updated text content",
  "message_container": {
    "color": "green",
    "title": "Build Complete",
    "description": "All 42 tests passed."
  },
  "actions": []
}
```

Alle velden zijn optioneel; voeg alleen de velden toe die je wilt wijzigen. Om action buttons te verwijderen, stuur "actions": [] .

### Bericht verwijderen

Geen request body nodig. Het bericht wordt permanent verwijderd uit het kanaal.

### Responses

```javascript
// 200 OK
{ "success": true }

// 404 Not Found (callback token expired or invalid)
{ "error": "TOKEN_NOT_FOUND" }

// 400 Bad Request (no update fields provided)
{ "error": "MISSING_FIELDS" }
```

### Voorbeeld: Voortgangsupdates

```javascript
// 1. Your webhook responds immediately with a "loading" message
// Response:
{
  "message_container": {
    "color": "blue",
    "title": "Deploying...",
    "description": "Starting deployment to production."
  }
}

// 2. Your service updates the message as progress continues
// PUT {callback_url}
{
  "message_container": {
    "color": "blue",
    "title": "Deploying...",
    "description": "Step 2/3: Running migrations."
  }
}

// 3. Final update when done
// PUT {callback_url}
{
  "message_container": {
    "color": "green",
    "title": "Deploy Complete",
    "description": "v2.1.0 is now live on production."
  },
  "actions": [
    {
      "label": "View Logs",
      "type": "url:https://example.com/deploys/123/logs"
    }
  ]
}
```

#### Callback URL levensduur

Geldig voor **30 minuten** vanaf het moment dat de trigger afvuurt. Daarna retourneren update/delete-requests 404 . Zodra je het bericht verwijdert, is de callback URL verbruikt en kan niet opnieuw worden gebruikt.

### Zie het gebeuren

De volledige trigger-loop, live: commando, JSON-reply, knop-tik, callback-update.

##### Een commando vuurt je webhook af

Iemand typt /deploy. mssgs POST het bericht naar je endpoint, inclusief een callback_url voor dit bericht.

##### Je reply wordt een kaart

Antwoord met JSON en de kaart verschijnt in het kanaal: titel, beschrijving, status en knoppen.

##### Een knop-tik komt bij jou terug

De tik vuurt de trigger opnieuw naar je server, met een verse callback_url.

##### Je werkt de kaart op zijn plek bij

Eerst een loader terwijl jij het werk doet, daarna de eindstatus. Iedereen in het kanaal ziet de update live.

#### Deploy v2.1.0 to production?

#### Deploy complete

## MCP: AI-assistenten

De mssgs desktop-app heeft een ingebouwde **MCP-server** (Model Context Protocol), zodat AI-assistenten zoals Claude in je workspace kunnen meelezen en handelen. Hij draait lokaal op je machine en werkt via je ingelogde mssgs-sessie; geen apart botaccount of hosting nodig.

Authenticatie met een Bearer-token van de [AI / MCP-instellingenpagina](https://mss.gs/nl/help/bots-mcp/connect-your-ai) in de app: zet de server aan, kies de kanalen die je wilt blootstellen en druk op "Copy config"; het gekopieerde blok bevat al je poort en token. De server luistert alleen op localhost (standaardpoort 7444) en draait zolang mssgs open is en je bent ingelogd.

```bash
claude mcp add --transport http mssgs http://127.0.0.1:7444/mcp \
  --header "Authorization: Bearer <jouw-token>"
```

### Realtime events via SSE

Open het MCP-endpoint als stream ( GET /mcp met Accept: text/event-stream ) en je ontvangt JSON-RPC-notificaties zodra ze gebeuren:

| Notificatie | Vuurt bij |
| --- | --- |
| notifications/mssgs/message | Nieuwe berichten in kanalen die je kunt zien |
| notifications/mssgs/bot_event | Knopdrukken, reacties en replies op berichten die je assistent plaatste via send_bot_message |
| notifications/mssgs/presence | Presence-wijzigingen |
| notifications/mssgs/typing | Typindicatoren |
| notifications/mssgs/call | Voice-call events |

#### Interactieve botkaarten vanuit je assistent

Plaats een embed-kaart met knoppen via send_bot_message , luister naar bot_event op de stream (of poll get_bot_events ) en werk de kaart op zijn plek bij met edit_message . Zelfde kaartmodel als de [botberichten](https://mss.gs/nl/docs/bots)-docs.

### Bot-tools

| Tool | Beschrijving |
| --- | --- |
| send_bot_message | Plaats een bericht of embed-kaart (met knoppen) als je assistent |
| get_bot_events | Haal knopdrukken, reacties en replies op je botberichten op |
| edit_message | Werk de message_container van een geplaatst bericht op zijn plek bij |
| set_bot_status | Stel de presence/status van je assistent in |

Bot-tools zijn beschikbaar wanneer je bent ingelogd met een botaccount. De volledige toollijst (kanalen, zoeken, bestanden, calls en meer) staat in de app op de [AI / MCP-instellingenpagina](https://mss.gs/nl/help/bots-mcp/connect-your-ai).

## Errors

Bij fouten ontvang je een JSON error response.

```json
{
  "error": "ERROR_CODE"
}
```

### Foutcodes

| Code | Beschrijving |
| --- | --- |
| INVALID_TOKEN | Ongeldig authenticatie-token |
| MISSING_REQUIRED_FIELDS | Verplichte velden ontbreken in data |
| MISSING_CONTENT | Bericht vereist content of message_container.description |
| TOKEN_NOT_FOUND | Callback token verlopen of ongeldig |
| MISSING_FIELDS | Geen update-velden opgegeven in callback-request |
| UNSUPPORTED_GITHUB_EVENT | GitHub event type niet ondersteund |
| UNSUPPORTED_UNIFI_PROTECT_EVENT | UniFi Protect event niet ondersteund |

### Succes response

```json
{
  "success": true,
  "message_id": "aZZ1a2b-...",
  "callback_url": "https://mss.gs/api/v1/trigger-callback/8f14e45f-...",
  "stream_url": "https://mss.gs/api/v1/instant/6b1e...c0?token=a1b2c3d4-..."
}
```

Gebruik callback_url om het bericht later te [updaten of verwijderen](#callback-url). Als je bericht actieknoppen bevat, bevat de response ook een stream_url ; een instant SSE-stream voor live interacties (replies, reacties, knopdrukken) met dat bericht.

## Voorbeelden

### Simpele notificatie

```bash
curl -X POST https://mss.gs/api/v1/webhook/SERVER_GUID/CHANNEL_GUID \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Build completed successfully!"
  }'
```

### Gekleurd alert met link

```json
{
  "content": "Build #123 completed!",
  "color": "green",
  "title": "CI/CD Pipeline",
  "title_url": "https://github.com/org/repo/actions/runs/123"
}
```

### Fout-alert

```json
{
  "message_container": {
    "type": "system_message",
    "color": "red",
    "title": "Alert: Database Error",
    "description": "Connection failed: timeout after 30s",
    "sub_title": "prod-db-01"
  }
}
```

### Deployment-goedkeuring met actions

```json
{
  "message_container": {
    "color": "yellow",
    "title": "Deployment Request",
    "description": "User @johndoe requested a deployment to production."
  },
  "actions": [
    {
      "label": "Approve",
      "type": "trigger:approve-deploy-trigger-guid",
      "payload": { "deploy_id": "dep_123", "env": "production" }
    },
    {
      "label": "Reject",
      "type": "trigger:reject-deploy-trigger-guid",
      "payload": { "deploy_id": "dep_123" }
    },
    {
      "label": "View Changes",
      "type": "url:https://github.com/org/repo/compare/main...deploy"
    }
  ]
}
```

### Trigger response: privébericht

```json
{
  "message_container": {
    "description": "This is a private response only you can see."
  },
  "visible_to_member_guids": ["<member_guid from request>"],
  "ephemeral": true
}
```

### Trigger response: interactief menu

```json
{
  "message_container": {
    "title": "What would you like to do?",
    "description": "Choose an option below:"
  },
  "actions": [
    {
      "label": "Get Help",
      "type": "trigger:help-trigger-guid"
    },
    {
      "label": "View Stats",
      "type": "trigger:stats-trigger-guid",
      "payload": { "period": "weekly" }
    }
  ]
}
```

## Speciale Webhooks

mssgs herkent automatisch bepaalde webhook-types.

### GitHub Webhooks

Automatisch gedetecteerd via de x-github-event header. Ondersteunde events: Push, Pull Requests, Issues, Releases en meer.

### UniFi Protect Webhooks

Automatisch gedetecteerd via de user-agent: protect-alarm-manager header.

## Opmerkingen

- **Timeout:** Je webhook moet binnen **5 seconden** antwoorden. Bij een timeout wordt een foutmelding getoond aan de gebruiker. Gebruik de callback URL als je meer verwerkingstijd nodig hebt.

- **Berichtopslag:** Trigger response-berichten worden opgeslagen in de database en verschijnen in de kanaalgeschiedenis.

- **Callback URL levensduur:** Geldig voor 30 minuten vanaf het moment dat de trigger afvuurt. Daarna retourneren update/delete-requests 404 .

- **Rate limiting:** Gebruikers worden beperkt in snelheid om spam te voorkomen bij het afvuren van triggers.

## Vragen?

We helpen je graag verder met je integratie.
