Skip to content

Getting started

From nothing to a loaded dataset. Four steps, roughly twenty minutes.

1. Get a token

Ask the customer system's IdentityServer for a token using the client_credentials grant and the scope ticketinghub-api. No user, no browser, no redirect — this is a server-to-server credential, valid for one hour.

Detail, including the one requirement that catches people out, is in Authentication.

2. Pull a dataset, naming your columns

GET https://<your-api-host>/api/ticketinghub/odata/v1/Tickets?$select=TicketInternalId,FaireventName,TicketGrossPrice,CurrencyShort
Authorization: Bearer <token>

Name the columns you actually load. A full ticket row carries 342 columns and weighs about 10 KB; most warehouses want a fraction of that. Projecting is also the single biggest lever on speed.

3. Follow the next link until it stops

Each response carries a page of rows and an @odata.nextLink. Request that link, repeat, and when a response comes back without one you have the complete dataset.

Paging is keyset-based, so the last page costs what the first one did, and rows written while you read cannot be skipped or duplicated. Do not build your own paging with $skip.

4. Do the same for the other three, then model in your warehouse

Tickets is the wide, denormalised centre. TicketUsages adds the scans, Surveys the survey answers, and StatisticGroups the article-to-group relation that the ticket rows cannot express on their own.

Building the extract turns these four steps into a production-ready loader, with retry, incremental loading and scheduling.

The reading order that saves time

ReadWhen
How ticketing data worksbefore you model anything, if our domain is new to you
Authenticationfirst call, always
Queryingbefore your first full extract
Datasets → Reading the columnsbefore you decide which columns to load
Datasets → Column valueswhen you filter or group on a status column
Getting the numbers rightbefore you publish any figure
Recipeswhen you have a specific question to answer
Errorswhen something answers 4xx