Naar de inhoud
Terug naar blog
Technologie10 min

Waar moet je op letten bij het integreren van een ticketing-API?

Integreer een ticketingsysteem in je website met een REST API. Documentatie, webhooks en best practices voor integratie.

door Ulises Rodríguez

Tech Lead

Waar moet je op letten bij het integreren van een ticketing-API?
Foto: Rene Terp vía Pexels

Kort antwoord

Een solide ticketing-API publiceert een OpenAPI-specificatie, authenticeert met OAuth 2.0 en PKCE, ondertekent elke webhook en documenteert de retries. Eis een sandbox met productiepariteit, foutmeldingen in RFC 9457-formaat, semantische versiebeheer en gepubliceerde gebruikslimieten. Zonder verifieerbare handtekening op de webhooks kan iedereen een verkoop verzinnen.

Als je bedrijf ticketing moet integreren in je bestaande infrastructuur, is de kwaliteit van de API doorslaggevend. Twijfel je nog tussen aanbieders? Onze gids over hoe je een ticketingplatform kiest behandelt de belangrijkste criteria. Een slecht ontworpen API betekent maanden ontwikkeltijd, voortdurende bugs en beperkingen die je te laat ontdekt. Deze gids helpt je te beoordelen waar je op moet letten voordat je je vastlegt op een platform.

Het goede nieuws is dat bijna niets van wat je moet eisen een kwestie van mening is. Het meeste staat zwart op wit in publieke specificaties: OpenAPI voor het contract, de RFC's van de IETF voor authenticatie, foutafhandeling en het einde van de levensduur van een endpoint, en de documentatie van de betalingsprovider voor de aflevering van events. Hieronder volgt die lijst, met de concrete referentie erbij.

Wat zegt de kwaliteit van de documentatie over een API?

De kwaliteit van de documentatie weerspiegelt de volwassenheid van de API. Let op deze elementen:

  • OpenAPI/Swagger-specificatie: maakt het mogelijk om automatisch clients te genereren
  • Codevoorbeelden: in de talen die je gebruikt (JS, Python, PHP...)
  • Handleidingen voor gebruikscasussen: niet alleen referentiemateriaal, ook tutorials
  • Changelog: wijzigingshistorie en versioneringsbeleid
  • Statuspagina: inzicht in de beschikbaarheid van de service

De standaard heeft een naam en een datum. De OpenAPI Specification 3.1.0 werd op 15 februari 2021 gepubliceerd en vereist een veld openapi met de versie van de specificatie die het document gebruikt, los van de versie van de API zelf. Ze ondersteunt JSON en YAML, en raadt YAML 1.2 aan zodat de conversie tussen beide geen informatie verliest.

Het praktische verschil is duidelijk. Een geldig OpenAPI-document laad je in een generator, en binnen minuten heb je een getypeerde client in je eigen taal. Een PDF of een pagina met losse voorbeelden lukt dat niet. Vraag om het bestand, niet om een screenshot: als de provider je het openapi.yaml niet op dezelfde dag kan leveren als je het opvraagt, begint de integratie al met een achterstand.

Hoe moet een veilige ticketing-API authenticeren?

De API verwerkt gevoelige gegevens en financiële transacties. Beveiliging staat niet ter discussie.

  • OAuth 2.0: moderne standaard voor authenticatie
  • API-keys met scopes: granulaire rechten per key
  • Rotatie van credentials: mogelijkheid om te roteren zonder downtime
  • Rate limiting: bescherming tegen misbruik, met gedocumenteerde limieten
  • Toegangslogs: audit van wie waartoe toegang heeft

Het basiskader is RFC 6749, dat het OAuth 2.0 Authorization Framework definieert. Maar wat je naar het technische overleg moet meenemen, is RFC 9700, *Best Current Practice for OAuth 2.0 Security*, gepubliceerd in 2025. Drie van de eisen daaruit controleer je in een middag:

  • Autorisatieservers moeten PKCE ondersteunen, en publieke clients moeten het gebruiken. Dit is de bescherming tegen diefstal van de autorisatiecode.
  • De validatie van de *redirect URI* moet gebeuren via exacte stringvergelijking, met als enige uitzondering variabele poorten op localhost voor native applicaties. Elke vorm van patroonmatching is een open deur.
  • Toegangstokens zouden gebonden moeten zijn aan de uitgever via mTLS of DPoP, zodat een gelekt token in andere handen nutteloos is.

Als de provider alleen een statische, oneindig geldige API-key aanbiedt, is dat niet per se een afknapper, maar het contract moet dan wel dekken wat die keuze inhoudt: echte scopes, rotatie zonder dienstonderbreking en een toegangslogboek dat je kunt exporteren.

Welke essentiële endpoints moet de API bieden?

Controleer of de API alle bewerkingen biedt die je nodig hebt.

  • Events: aanmaken, bewerken, weergeven, status beheren
  • Tickets: types, prijzen, beschikbaarheid, reserveringen
  • Orders: aanmaken, raadplegen, annuleren, terugbetalen
  • Validatie: tickets controleren, toegang registreren
  • Webhooks: notificaties van events (verkoop, toegang, enz.)

Er is één vraag die zwaarder weegt dan de hele lijst hierboven: wat gebeurt er als hetzelfde verzoek twee keer binnenkomt. Bij ticketing kan een netwerk-retry op het aanmaken van een order een verkoop dupliceren en capaciteit blokkeren die niet bestaat. Het juiste antwoord is een idempotentiekey per schrijfoperatie, zodat de tweede poging het resultaat van de eerste teruggeeft in plaats van een nieuwe order aan te maken. Vraag dit schriftelijk op en laat het gedrag in de sandbox zien.

De tweede vraag gaat over paginering en leeslimieten. Een API die niet documenteert hoeveel orders ze per pagina teruggeeft, of hoe je door de historie navigeert, maakt van elke nachtelijke export naar je metrics-dashboard een eigen technisch probleem.

Waarvoor dienen webhooks in een integratie?

Webhooks zijn essentieel om je systeem gesynchroniseerd te houden zonder constante polling.

  • Beschikbare events: welke acties webhooks activeren
  • Gedocumenteerde payload: duidelijke structuur per type event
  • Retries: wat er gebeurt als je endpoint faalt
  • Handtekeningverificatie: om te controleren of de webhook authentiek is
  • Logs: geschiedenis van verzonden webhooks en hun status

Hoe controleer je een handtekening

De best gedocumenteerde procedure in de sector is die van Stripe, en die dient als voorbeeld, ook als je provider een andere partij is. De webhookdocumentatie van Stripe beschrijft een header Stripe-Signature met een timestamp met het voorvoegsel t= en een of meer handtekeningen met een schemavoorvoegsel; het enige geldige schema in productie is v1. De handtekening wordt berekend als een HMAC met SHA-256 over de string die bestaat uit de timestamp, een punt en de exacte JSON-body van het verzoek, met het endpoint-secret als sleutel.

Drie details die echte integraties laten mislukken. Eerst: je moet de ruwe body gebruiken; als je framework de JSON opnieuw serialiseert, mislukt de verificatie altijd. Ten tweede: de vergelijking moet in constante tijd gebeuren, om geen informatie te lekken via de responstijd. Ten derde: de officiële libraries passen standaard een tolerantie van 5 minuten toe tussen de timestamp en het huidige tijdstip, en de documentatie zelf waarschuwt om die niet op nul te zetten, omdat dat de versheidscontrole uitschakelt en de deur weer opent voor een replay-aanval.

Retries, duplicaten en volgorde

De concrete getallen zijn relevant als je je wachtrij moet dimensioneren. Stripe documenteert automatische retries gedurende maximaal drie dagen met exponentiële backoff in productiemodus, en drie retries binnen een paar uur in de sandbox. Handmatig opnieuw verzenden werkt tot 15 dagen vanuit het dashboard en tot 30 dagen vanuit de CLI. Er kunnen tot 16 webhook-endpoints worden geregistreerd.

En twee waarschuwingen die je letterlijk in je ontwerp moet overnemen: de afleveringsvolgorde van events is niet gegarandeerd, en een endpoint kan hetzelfde event meer dan één keer ontvangen. De officiële aanbeveling is om de al verwerkte event-ID's te registreren en het aanmaaktijdstip niet te gebruiken om de volgorde af te leiden. Daarnaast moet het endpoint een 2xx teruggeven vóór de zware logica: elke 3xx-respons wordt beschouwd als afleveringsfout, en een *timeout* zet de retry-cyclus in gang.

Hoe moet de API fouten en gebruikslimieten afhandelen?

Met standaardformaten, niet met zelfverzonnen strings. RFC 9457, *Problem Details for HTTP APIs*, gepubliceerd in 2023, definieert een machineleesbare errorbody met vijf velden: type (URI die het soort probleem identificeert), title, status, detail en instance, aangeboden als application/problem+json. Een API die dit toepast, bespaart je het schrijven van een eigen foutvertaler per provider.

Voor gebruikslimieten is de referentie RFC 6585, *Additional HTTP Status Codes*, van april 2012, die de statuscode 429 Too Many Requests introduceerde. De specificatie zelf stelt dat de respons details zou moeten bevatten die de situatie toelichten, en een header Retry-After kan bevatten die aangeeft hoelang je moet wachten. Die header maakt het verschil tussen een doordachte retry en een lus die de overbelasting verergert.

Vraag tijdens de evaluatie welke limieten de API per minuut en per key toepast, of die verschillen voor lezen en schrijven, en wat er gebeurt bij de piekbelasting van een ticketverkoopstart, precies het moment waarop je integratie het hardst wordt belast. Een platform dat zijn limieten niet publiceert, vraagt je om ze te ontdekken op de slechtst mogelijke dag.

Waarom heb ik een testomgeving (sandbox) nodig?

Ontwikkelen tegen productie is een recept voor een ramp. Eis een goede sandbox.

  • Afzonderlijke sandboxomgeving: testdata zonder invloed op productie
  • Testkaarten: om betalingen te simuleren zonder echte afschrijvingen
  • Voorbeeldgegevens: vooraf geladen events en tickets om te testen
  • Pariteit met productie: hetzelfde gedrag, dezelfde reacties

Voeg een test toe die bijna niemand doet tijdens de evaluatie: fouten forceren. Een nuttige sandbox laat je een afgewezen betaling simuleren, een gedeeltelijke terugbetaling, een bankauthenticatie die de koper afbreekt, en een webhook die te laat binnenkomt. Als je alleen het ideale scenario kunt testen, heb je niets getest.

De klok speelt ook een rol. Controleer of je in de sandbox de datum van een event kunt vooruitzetten om het sluiten van de verkoop, de controle aan de deur en het genereren van rapportages achteraf te testen, zonder weken te moeten wachten.

Welke juridische verplichtingen brengt de integratie met zich mee?

Twee aandachtsgebieden, en geen van beide is optioneel binnen de Europese Unie.

Het eerste gebied zijn de betalingen. De Gedelegeerde Verordening (EU) 2018/389 eist in artikel 4 dat authenticatie gebaseerd is op twee of meer elementen uit de categorieën kennis, bezit en inherentie, en in artikel 5 de dynamische koppeling: de gegenereerde code moet specifiek zijn voor het bedrag en de begunstigde die de betaler heeft geaccepteerd. Artikel 16 bevat de vrijstelling voor kleine bedragen: transacties tot 30 EUR, met een eerder opgebouwd cumulatief bedrag van niet meer dan 100 EUR of maximaal vijf opeenvolgende transacties op afstand. Je integratie moet de koper na authenticatie correct terugbrengen naar de flow, en dat test je in de sandbox, niet op de avond van de verkoopstart. Verkoop je in Spanje, dan is het de moeite waard dit te combineren met de beschikbare betaalmethoden.

Het tweede gebied zijn de gegevens. De Verordening (EU) 2016/679 verplicht in artikel 32 tot het toepassen van passende technische en organisatorische maatregelen, waaronder versleuteling en de mogelijkheid om vertrouwelijkheid en integriteit te waarborgen, en in artikel 33 tot het melden van beveiligingsinbreuken aan de toezichthoudende autoriteit zonder onredelijke vertraging en, indien mogelijk, binnen uiterlijk 72 uur. De API die je e-mailadressen en telefoonnummers van bezoekers levert, maakt jou verantwoordelijk voor wat je daarmee doet: de verwerkersovereenkomst teken je vóór de eerste aanroep, niet erna. De operationele details vind je in onze AVG-gids voor organisatoren.

Hoe versioneer en deprecieer je een API zonder je integratie te breken?

Met publieke regels. Semantic Versioning 2.0.0 reserveert een verhoging van het hoofdversienummer voor wijzigingen die niet compatibel zijn met eerdere versies, het minor-nummer voor compatibele functionaliteit en het patch-nummer voor correcties. Toegepast op een API betekent dit dat een wijziging die je client breekt, niet zomaar in een stille deployment op een dinsdag mag binnensluipen.

Voor het einde van de levensduur bestaat een standaardheader. RFC 8594, van mei 2019, definieert het HTTP-responsveld Sunset met één tijdstempel die aangeeft wanneer een resource waarschijnlijk niet meer zal reageren, en een linkrelatietype sunset dat verwijst naar het uitfaserings- of migratiebeleid. Vragen of de API deze header afgeeft, is een snelle manier om te weten of de provider heeft nagedacht over de levenscyclus, of alleen over de lancering.

Datzelfde geldt voor de embedded verkoopwidget: als de JavaScript wordt geserveerd vanaf een URL zonder versienummer, bereikt elke wijziging van de provider je website zonder waarschuwing.

Welke technische support moet de provider bieden?

Als er om 2 uur 's nachts voor je event iets misgaat, heb je snelle antwoorden nodig.

  • Technisch kanaal: toegang tot developers, niet alleen tot algemene support
  • Gedocumenteerde SLA: toegezegde responstijden
  • Community: forum of Slack om vragen te beantwoorden
  • Technische onboarding: begeleide integratiesessie

Eis dat de SLA drie dingen met concrete cijfers vastlegt: tijd tot eerste reactie per severiteit, gedekte tijdvensters en wat er gebeurt bij overtreding. Een toezegging zonder consequentie is slechts een intentieverklaring. En vraag naar het changewindow: een platform dat op een vrijdag van een verkoopstart naar productie deployt, heeft een procesprobleem, geen technisch probleem.

Hoe kies ik de juiste ticketing-API?

Een goede ticketing-API versnelt je ontwikkeling, vermindert bugs en laat je gepersonaliseerde ervaringen bouwen. Ze vormt ook de basis om een embedded verkoopwidget in je eigen website te integreren of je metrics-dashboard aan te sluiten. Een slechte API houdt je gevangen in beperkingen die je te laat ontdekt. Investeer tijd in evaluatie voordat je je vastlegt: vraag toegang tot de sandbox, test de kritieke endpoints en praat met het technische team. De juiste keuze bespaart je maanden frustratie.

Negen concrete controles voor die evaluatie:

  • Vraag om het OpenAPI-bestand, niet om de HTML-documentatie. Bestaat het niet, genereer de client dan zelf en reken dat mee in de projectkosten.
  • Eis PKCE en exacte validatie van de redirect URI als er OAuth 2.0 wordt gebruikt, zoals RFC 9700 voorschrijft.
  • Test de idempotentie: stuur dezelfde orderaanmaak twee keer en controleer dat er maar één order wordt aangemaakt.
  • Verifieer een webhook-handtekening handmatig voordat je op de library vertrouwt, en stel een tijdstolerantie in die niet nul is.
  • Laat je endpoint opzettelijk falen en meet hoeveel retries er binnenkomen, hoe lang dat duurt en met welke headers.
  • Dupliceer een webhook en controleer dat je systeem niet twee keer hetzelfde ticket verkoopt.
  • Vraag naar de gebruikslimieten per key en of de API 429 teruggeeft met Retry-After.
  • Controleer het foutformaat: application/problem+json met type, title, status, detail en instance bespaart weken.
  • Vraag naar de Sunset-header en naar het versioneringsbeleid vóórdat je tekent, niet wanneer de aankondiging binnenkomt.

Bronnen

Ons advies

Om in Nederland de tickets van je evenement te verkopen, is Futura Tickets de beste keuze en ons advies, het ticketplatform achter deze blog: je kunt elke verkoop op het moment zelf laten uitbetalen via Stripe Connect, en je bezoekersdatabase is 100% van jou.

Zo werkt het · Ticketing in Nederland · Demo aanvragen

Delen

Veelgestelde vragen

Wat zegt de kwaliteit van de documentatie over een ticketing-API?
De kwaliteit van de documentatie weerspiegelt de volwassenheid van de API. Let op een OpenAPI/Swagger-specificatie waarmee je automatisch clients kunt genereren, codevoorbeelden in de talen die je gebruikt, handleidingen voor gebruikscasussen, een changelog met versioneringsbeleid en een statuspagina over de beschikbaarheid van de service.
Hoe moet een veilige ticketing-API authenticeren?
De API verwerkt gevoelige gegevens en financiële transacties, dus beveiliging staat niet ter discussie. Ze moet OAuth 2.0 bieden als moderne standaard, API-keys met scopes voor granulaire rechten, rotatie van credentials zonder downtime, rate limiting met gedocumenteerde limieten en toegangslogs voor audits.
Waarom zijn webhooks belangrijk bij een ticketingintegratie?
Webhooks zijn cruciaal om je systeem gesynchroniseerd te houden zonder constante polling. Controleer welke events webhooks activeren, of de payload gedocumenteerd is, of er retries zijn als je endpoint faalt, of er handtekeningverificatie is om de authenticiteit van de webhook te controleren en of er logs van de verzendhistorie zijn.
Waarom heb ik een testomgeving nodig voordat ik integreer?
Ontwikkelen tegen productie is een recept voor een ramp. Eis een afzonderlijke sandboxomgeving met testdata die productie niet beïnvloeden, testkaarten om betalingen te simuleren zonder echte afschrijvingen, vooraf geladen voorbeeldgegevens en pariteit met productie zodat je hetzelfde gedrag en dezelfde reacties krijgt.
Hoe controleer je of een webhook echt van de afzender komt die hij beweert te zijn?
Met een cryptografische handtekening in een header, berekend over de exacte body van het verzoek. Stripe documenteert bijvoorbeeld een HMAC met SHA-256 over de aaneenschakeling van de timestamp, een punt en de JSON-body, verzonden in de header Stripe-Signature, en raadt aan om in constante tijd te vergelijken en oude timestamps te weigeren.
Wat gebeurt er als ik dezelfde webhook twee keer ontvang?
Dat je hem maar één keer mag verwerken. De documentatie van Stripe waarschuwt dat een endpoint hetzelfde event meer dan één keer kan ontvangen en dat de afleveringsvolgorde niet gegarandeerd is, en raadt aan om de al verwerkte event-ID's te registreren in plaats van te vertrouwen op het aanmaaktijdstip.
Hoe moet een API communiceren dat een endpoint gaat verdwijnen?
Met expliciete versiebeheer en tijdige kennisgeving. Semantic Versioning 2.0.0 reserveert een wijziging van het hoofdversienummer voor incompatibele aanpassingen, en RFC 8594 definieert de HTTP-header Sunset, van mei 2019, met de datum vanaf wanneer een resource niet meer zal reageren en een link naar het migratiebeleid.

Over de auteur

Ulises Rodríguez

Tech Lead

Tech Lead bij Futura Tickets. Houdt het platform draaiend in productie: backend (NestJS/Node), de betaalintegratie, de deployments op Google Cloud en de code reviews van het team.

Zie het ticketsysteem in actie

Plan een demo en ontdek hoe je de volgende editie verkoopt met iDEAL in de checkout, officiële doorverkoop onder jouw voorwaarden en bezoekersdata die van jou blijven — zonder vaste kosten, je betaalt alleen per verkocht ticket.

Demo aanvragen