Skip to main content
GKL API is one Lambda serving one ASP.NET application, so its whole surface is a set of controllers under api/v1. This page is the map at controller level. It does not list every endpoint, because there are 88 of them and the code is the only listing that stays true. What it does list is who calls each area, what that area expects, and the endpoints that carry more weight than their neighbours. For how a caller proves who it is, see Authentication and Authorisation.

The Public Controllers

The Admin Controllers

Everything under api/v1/admin/ backs the Operator Dashboard, and with one exception every endpoint expects a signed in SUPER_ADMIN or an internal service.
The split is by audience, not by entity. Drivers and AdminDrivers both exist, and the difference is that the public one only ever answers about the calling user’s own drivers while the admin one answers about anyone’s. The same pattern holds for tickets and users.

Endpoints Worth Knowing Individually

The Money Path

The Four Webhooks

Vivenu calls four endpoints, all authenticated by signature rather than key, and all requiring a hubRegion query parameter:
The events webhook is the one that mirrors Vivenu’s event catalogue into our database, switching on the webhook type to create, update or remove the event document for that region. Every other event endpoint on this page reads what it wrote, so if it stops arriving the whole booking flow is working from a stale catalogue. An unrecognised webhook type throws rather than being ignored.
These four are the only way Vivenu state becomes real in our database. If they stop arriving, the booking website keeps taking money on Vivenu and nothing appears against a driver. See Authentication and Authorisation for why a missing hubRegion shows up as a 500 rather than a 401.

What Other Systems Depend On

Two endpoints exist mainly for Telemetry, and are the reason the TELEMETRY claim exists:
Both accept TELEMETRY or INTERNAL_SERVICE as well as a signed in SUPER_ADMIN. They are a published contract with another system, so changing their shape breaks conversion at the tracks rather than anything visible here. See The STL Database for what the race day answer decides.

Internal Only

Operator Actions With Consequences

Endpoints That Need No Credential

Eight endpoints are [AllowAnonymous]. This is the full list, and it is worth knowing because it is the API’s entire unauthenticated attack surface:
The last two return configuration straight from the database, and the region document also holds each region’s webhook secret, Vivenu secret and Teams URL. What keeps those out of the response is a five field allowlist in one DTO mapper, and an explicit exclusion in the other endpoint. See One Thing Not To Change.

Two Things That Will Trip You Up

Drivers is versioned and the others are not. DriversController serves both api/v1/drivers and api/v2/drivers, with paired ...AsyncV1 and ...AsyncV2 methods on the same controller. Everything else in the API is v1 only, so the version number in a URL is not a reliable guide to anything.
Many actions return dynamic. Responses are shaped by DTO mapper extension methods rather than by declared response types, so the contract of an endpoint is whatever its mapper projects. That is also why the mappers are the place a field gets accidentally exposed or accidentally dropped.

Key Files

All paths are under GklPlatformAPI/GklPlatform/GklPlatform.API.Core/ in the GKL Platform repository.
Last modified on September 8, 2026