Paginering en filters
Elk lijst-endpoint deelt één envelop, één cursorpaginering en dezelfde conventies voor filters. Deze pagina behandelt ze één keer; de endpoint-referentie zegt welke parameters elk endpoint aanvaardt.
De lijstenvelop
{
"data": [ { "id": 4521, "title": "Insomnia Night: Autumn Opening" } ],
"pagination": {
"next_cursor": "eyJzb3J0X2tleSI6IjIwMjYtMTAtMDMiLCJpZCI6NDUyMX0",
"has_more": true,
"limit": 25
}
}
Eén bron (/v1/me, /v1/events/{id}, een POST-antwoord...) komt terug als het object zelf, zonder data-omhulsel en zonder pagination. Een paar kleine vaste lijsten (tickettypes, de dagen van een evenement) zitten in { "data": [...] } zonder pagination.
Cursorpaginering
Cursors zijn ondoorzichtig: ontleed of bouw ze niet zelf.
- Vraag de eerste pagina op zonder
cursor. - Zolang
has_moretrueis, vraag de volgende pagina op met?cursor={next_cursor}. - Stop wanneer
has_morefalseis.
curl "https://www.sway.events/api/v1/events?limit=50" \
-H "Authorization: Bearer sway_sk_YOUR_KEY"
curl "https://www.sway.events/api/v1/events?limit=50&cursor=eyJzb3J0X2tleSI6..." \
-H "Authorization: Bearer sway_sk_YOUR_KEY"
| Parameter | Standaard | Bereik |
|---|---|---|
limit | 25 | 1 tot 100 |
cursor | geen | de next_cursor van de vorige pagina |
Een misvormde of verouderde cursor antwoordt 400 invalid_cursor: begin opnieuw bij de eerste pagina. Er zijn geen paginanummers en geen totalen, en cursors blijven kloppen als gegevens veranderen tussen twee verzoeken.
Een pagina van meer dan 25 items kost meer van je werkbudget (één eenheid per 25): vraag wat je toont.
Evenementen filteren
GET /v1/events en GET /v1/events/search aanvaarden deze filters, allemaal optioneel en te combineren:
| Parameter | Waarden | Betekenis |
|---|---|---|
status | upcoming, past, all | Standaard upcoming: evenementen die nog niet afgelopen zijn. past: evenementen die dat wel zijn. |
from, to | ISO 8601-datum of datum-tijd | Evenementen die beginnen op of na from, op of voor to |
promoter_id, artist_id, venue_id | een id | Evenementen van die pagina (ze moet binnen het bereik van je crew liggen) |
genre | tot 10 genre-ids, kommagescheiden | Evenementen met een van deze genres (GET /v1/genres somt ze op) |
city | tekst | Evenementen in die stad |
country | ISO 3166-1 alfa-2 (BE) | Evenementen in dat land |
near | lat,lng | Evenementen rond een punt |
radius_km | 1 tot 500, standaard 25 | De straal rond near; alleen met near |
has_tickets | true, false | Evenementen met een publiek tickettype dat nu in verkoop is (binnen zijn verkoopvenster, niet uitverkocht), of zonder |
updated_since | ISO 8601-datum-tijd | Evenementen veranderd sinds dan: de manier om incrementeel te synchroniseren |
ids | tot 50 ids, kommagescheiden | Precies deze evenementen |
q | 2 tot 100 tekens | Zoeken: alleen op /v1/events/search |
curl "https://www.sway.events/api/v1/events?country=BE&from=2026-10-01&to=2026-10-31&genre=12,31" \
-H "Authorization: Bearer sway_sk_YOUR_KEY"
De andere feeds (/v1/promoters/{id}/events, /v1/artists/{id}/events, /v1/venues/{id}/events) aanvaarden status, en de promotor- en locatiefeed ook from en to. Aankomende evenementen komen eerst met de vroegste erbij, voorbije evenementen met de laatste erbij; er is geen parameter sort. Een ongeldige waarde antwoordt 400 validation_error, met de naam van de parameter.
Batchopvragingen
ids= op /v1/events, /v1/artists, /v1/promoters en /v1/venues haalt tot 50 bekende ids op in één verzoek, in plaats van 50 detailverzoeken. Het kost één werkeenheid per begonnen blok van tien ids.
Velden kiezen
fields= houdt alleen de velden over die je noemt, op de detail- en lijst-endpoints die het ondersteunen. id blijft altijd behouden, en één niveau nesting is toegestaan:
curl "https://www.sway.events/api/v1/events/4521?fields=title,starts_at,venue.name,lineup.name" \
-H "Authorization: Bearer sway_sk_YOUR_KEY"
{
"id": 4521,
"title": "Insomnia Night: Autumn Opening",
"starts_at": "2026-10-03T20:00:00+00:00",
"venue": { "id": 77, "name": "Fuse" },
"lineup": [ { "id": 501, "name": "Lucia Vega" } ]
}
Op een lijst geldt fields voor elk item in data. Tot 40 namen; een onbekende naam antwoordt 400 validation_error. Kleinere antwoorden reizen sneller en tellen minder mee voor je dagelijkse databudget.
Talen
locale= bepaalt de taal van de tekst die de API zelf schrijft: labels, kalender- en structured-datatekst, de Stripe-checkoutpagina. Het aanvaardt en, fr, de, es, it, nl of uk (fr-BE wordt gelezen als fr). Wat organisatoren en artiesten zelf schreven, komt terug zoals zij het schreven.
Uitbreiding
Twee endpoints sluiten gerelateerde bronnen in op verzoek met ?expand= (één niveau diep):
GET /v1/events/{id}: de locatie en de line-up zijn er altijd bij;expand=ticket_tiersvoegt de tickettypes toe.GET /v1/promoters/{id}/events: evenementen dragen een lichte locatie ({ id, name }) en geen line-up;expand=venuegeeft de volledige locatie,expand=lineupenexpand=ticket_tiersvoegen die arrays toe.
| Waarde | Sluit in |
|---|---|
venue | De locatie, publieke velden |
lineup | De line-up met elke artiest, podium en settijden |
ticket_tiers | De tickettypes, zoals GET /v1/events/{id}/ticket-tiers ze teruggeeft, met fee_amount en price_with_fee |
Elke waarde kost één werkeenheid extra op een ongecachet verzoek, en bespaart een verzoek per evenement. Andere endpoints antwoorden 400 validation_error op expand.
HEAD en voorwaardelijke verzoeken
Elk detailendpoint antwoordt op HEAD met de headers van de GET en zonder body. Elke cachebare read draagt een ETag: stuur hem terug als If-None-Match en een ongewijzigde bron antwoordt 304 Not Modified, gratis. Zie Caching.
Waarom een bron 404 geeft
De API onderscheidt beheerde bronnen (de pagina's van je crew en hun evenementen) van publieke bronnen die je via je evenementen bereikt (een gastartiest, een locatie die je niet beheert); zie het overzicht.
- Publieke bronnen verschijnen alleen binnenin de bronnen die ernaar verwijzen, met
"managed": falseen publieke velden. - Hem rechtstreeks opvragen (
GET /v1/artists/{id}voor een gastartiest) geeft 404. - Alles buiten het bereik van je crew geeft 404, nooit 403.
- Je roster-artiesten komen terug, ook ongepubliceerd. Elke andere bron geeft 404 (of ontbreekt in line-ups) tot ze gepubliceerd is.
Behandel elke 404 op dezelfde manier: de bron bestaat niet voor jouw sleutel.