⌘K
Versioning
How the TimeTracking API is versioned (/v1 path, spec version 1.1.0), what counts as a breaking change, and how to detect the version you are talking to.
Last updated: · Markdown version
- The major version is in the path:
https://app.timetracking.tech/api/v1. - The spec version is in
info.versionofGET /api/v1/openapi.json. It is currently1.1.0. /v1is stable. Breaking changes get a new major path (/v2), and the old version keeps running for at least 12 months (as stated in the spec description).
Non-breaking changes (can happen within v1)
- New endpoints, new optional request fields, new query parameters.
- New fields in responses. Clients must ignore unknown fields. For example, v1.1 added
external_source/external_refto people, clients and placements. - New webhook event types (you only receive the events you subscribe to) and new fields in event
data. - New enum values in fields that are documented as open:
hourType,source, errormessages. - New error
codes for new situations.
Breaking changes (only in a new major version)
- Removing or renaming endpoints, fields or event types.
- Changing a field's type or unit (minutes stay minutes, cents stay cents).
- Making an optional request field required.
- Changing the default shape of an existing response. v1.1 therefore returns
{items, next_cursor}on/people,/clientsand/placementsonly when you send a paging parameter (see pagination).
Detecting the version
curl -s https://app.timetracking.tech/api/v1/openapi.json | jq -r .info.version
# 1.1.0
Each operation in the spec has a stable operationId (e.g. getOrgWeek, listDays, upsertPersonByExternal). Use these for client generation.
Client generation
The spec is OpenAPI 3.1 with response schemas, so generators such as openapi-typescript or openapi-python-client work:
npx openapi-typescript https://app.timetracking.tech/api/v1/openapi.json -o timetracking.d.ts
Planned: official TypeScript and Python SDKs.
See the changelog for what changed per version.