Pagination
How Eventdoor REST API list operations page their results with a limit and a cursor.
List operations return one page at a time. You choose the page size with limit and move to the next page with cursor.
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | "all" | 20 | Items per page: 1-100, or all for the whole list in one response. An integer out of range is clamped to 1-100, not refused, except 0: 0 or a value that is not a number means the default, 20. |
cursor | string | The paging.next value from the previous page. Leave it out for the first page. |
The response
A list response holds the items, the total count and the paging state:
{
"broadcasts": [ ... ],
"total": 134,
"paging": { "next": "eyJvIjoyMH0", "hasMore": true }
}- The list key is
hubs,broadcastsorchanges, depending on the operation. totalis the number of items across all pages.paging.nextis the cursor for the next page, andnullon the last page.paging.hasMoresays whether another page follows.
The change history has no total; see The change history is different.
To read the next page, pass paging.next back as ?cursor=, with the same filters. Treat the cursor as opaque: don't build or change one yourself. On a hub or broadcast list, a cursor the API cannot read returns the first page.
Read every page
This loop reads every broadcast in a hub, 100 at a time.
cursor=""
while :; do
args=(-s -G -H "Authorization: Bearer $EVENTDOOR_TOKEN" --data-urlencode "limit=100")
[ -n "$cursor" ] && args+=(--data-urlencode "cursor=$cursor")
page=$(curl "${args[@]}" "$EVENTDOOR_API/organizations/acme/hubs/home-games/broadcasts")
echo "$page" | jq -r '.broadcasts[].slug'
[ "$(echo "$page" | jq -r '.paging.hasMore')" = "true" ] || break
cursor=$(echo "$page" | jq -r '.paging.next')
doneEach page is one request against your rate limit. limit=all returns the whole list in one request, which also costs one.
Filters
Filters narrow a list before it is paged. Keep the same filters on every page of one read.
Broadcast lists
List broadcasts in a hub and list an organization's broadcasts take:
| Parameter | Values |
|---|---|
state | upcoming, active, live or past. live is not paged: see below. |
startsAfter, startsBefore, endsAfter, endsBefore | A date-time, for example 2026-03-01T00:00:00Z |
tag, tagCategory | A tag or tag-category slug |
collection, collectionCategory | A collection or collection-category slug |
collectionItem | A collection item id |
mode | live or vod |
state=live returns at most limit broadcasts in one response, with paging.hasMore false and no next, even when more are live. total counts every live broadcast. Pass limit=all to get them all, or compare total with the number returned.
curl -s -G -H "Authorization: Bearer $EVENTDOOR_TOKEN" \
--data-urlencode "state=upcoming" \
"$EVENTDOOR_API/organizations/acme/hubs/home-games/broadcasts"Hub lists
List hubs takes:
| Parameter | Values |
|---|---|
query | Text to search hub names for |
parentId | A parent hub's id, or root for top-level hubs only |
state | upcoming, active or past |
startsAfter, startsBefore, endsAfter, endsBefore | A date-time |
tag, tagCategory, collection, collectionCategory, collectionItem | As for broadcasts |
Filter by tag category
All three lists also filter by tag: any other query parameter is read as a tag-category slug, and its value as a comma-separated list of tag slugs in that category. Within one category a row matches any of the tags; across categories it must match every category. For example, ?age_group=5-8,9-12&sport=swimming returns rows tagged 5-8 or 9-12 in age_group and also tagged swimming in sport.
Because an unrecognised parameter is read as a tag category, a misspelt filter returns an empty list rather than an error.
With at least one tag-category filter, add facets=true to get a facets array next to paging: for each category you filter on, its tags and how many rows would match each tag under your other category filters.
The change history is different
Listing a broadcast's changes pages the same way, with cursor and paging, with four differences:
- Its
limitis 1-50, default 20. It has noall. - An integer
limitout of range, including0, is clamped to 1-50. Anything else, includingall, means 20, with no error. - A cursor it cannot read is refused with
400 Invalid cursorinstead of returning the first page. - Its response has
changesandpagingonly, with nototal.