Tillor
Ontwikkelaars

Server-Sent Events (SSE)

Stream realtime events via een langlopende verbinding

SSE biedt een langlopende stream van dezelfde events die webhooks ontvangen. Gebruik SSE wanneer je een persistente verbinding prefereert boven HTTP-callbacks.

Endpoint

GET /api/orgs/:orgId/realtime/subscribe

Authenticatie

SSE gebruikt dezelfde authenticatie als andere API-endpoints:

  • x-api-key - Jouw API-sleutel
  • X-Tillor-Org-Id - Organisatie-ID

Event-filtering

Gebruik de events query-parameter om te filteren op event type:

GET /api/orgs/:orgId/realtime/subscribe?events=invoice:created&events=invoice:paid

Gebruik events=* om alle events te ontvangen (zelfde als parameter weglaten).

Zie Event types voor de volledige lijst.


Event-formaat

Elk SSE-bericht bevat:

  • event - Event key (bijv. invoice:created)
  • data - JSON-object met event-payload
  • timestamp - Unix timestamp (ms)

Voorbeeld: Node.js

const orgId = "org_abc123";
const apiKey = "tkn_xxx";

const url = `https://app.tillor.eu/api/orgs/${orgId}/realtime/subscribe?events=invoice:created&events=customer:updated`;

const response = await fetch(url, {
  headers: {
    "x-api-key": apiKey,
    "X-Tillor-Org-Id": orgId,
    "Accept": "text/event-stream",
  },
});

const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;

  const chunk = decoder.decode(value, { stream: true });
  for (const line of chunk.split("\n")) {
    if (line.startsWith("data: ")) {
      const payload = JSON.parse(line.slice(6));
      console.log(payload.event, payload.data);
    }
  }
}

Voorbeeld: cURL

curl -N -H "x-api-key: tkn_xxx" \
     -H "X-Tillor-Org-Id: org_abc123" \
     "https://app.tillor.eu/api/orgs/org_abc123/realtime/subscribe"

Herverbinding

Als de verbinding verbreekt, herverbind met dezelfde URL en headers. De stream ondersteunt geen resumption; je ontvangt alleen nieuwe events na herverbinden.


Gerelateerd