Providers
tracekit connects to fitness platforms through a provider system. Each provider reads and writes activity data using a consistent interface, letting you sync, compare, and back up workouts across services.
Current Providers
The following providers are fully implemented and available today.
Full read/write integration with Strava via the official Strava API and OAuth 2.0.
- Reads and creates activities
- Updates activity name and gear
- Reads bikes and shoes from athlete profile
- Handles token refresh and rate limits automatically
Pulls activities from Garmin Connect using your Garmin account credentials via OAuth.
- Reads activities by date range
- Fetches activity metadata including device info
- Supports updating activity name
- Reads gear (devices)
Integrates with Ride with GPS using API key authentication.
- Reads and creates trips
- Updates activity name and gear
- Reads gear from user profile
Integrates with Intervals.icu using API key authentication.
- Reads activities by date range
- Fetches full activity details
- Supports downloading original source files
- Updates activity name
Files
Imports activity files directly from your filesystem — no external API required.
- Supports GPX, FIT, and TCX formats (including gzipped)
- Idempotent: skips already-processed files using checksums
- Read-only: does not support creating or updating activities
Wandrer.earth Coming Soon
Integration with Wandrer.earth is planned for a future release.
Becoming a Provider
If you run a fitness platform and want tracekit to support it, this section describes exactly what your API needs to expose. You don't need to write any tracekit code yourself — just make sure your platform meets the requirements below, then open an issue.
What your API needs
tracekit needs two things from your platform:
-
A JSON REST API over HTTPS. Endpoints
must return
application/json. No special framework is required — any HTTP server that can handle GET, POST, and PATCH requests will work. -
Per-user API keys. Each user must be
able to generate a personal API key from their account
settings. tracekit passes this key as a header on every
request:
OAuth is also supported if you already have it. API keys are simpler to integrate, but OAuth is better!Authorization: Bearer <user_api_key>
Other APIs out there
Required endpoints
The following four endpoints are the minimum tracekit needs. Field names can differ — the tracekit provider maps your schema to its internal model. Endpoints can have any URL structure as long as they respond to the correct HTTP method and accept necessary parameters.
List activities by date range
At a minimum, have an endpoint that returns a list of IDs for a date range. Ideally, include a little bit more metadata to help the sync process run smoothly. We recommend accepting page size and page number params to support pagination. Example:
GET /activities?after=1700000000&before=1702000000
Authorization: Bearer <api_key>
[
{
"id": "abc123",
"name": "Morning Run",
"type": "run",
"start_time": 1700500000,
"duration_seconds": 3600,
"distance_miles": 6.2
}
]
Get a single activity
At a minimum, have an endpoint that returns the full set of metadata about a single activity. It can be a ?id paramater or part of a REST URL. If you can support providing the original activity file via a param to this api method, or you can provide another API endpoint for the source file, thats great and make you an awesome player in this ecosystem. Users should own their data! Example:
GET /activities/abc123
Authorization: Bearer <api_key>
{
"id": "abc123",
"name": "Morning Run",
"type": "run",
"start_time": 1700500000,
"duration_seconds": 3600,
"distance_miles": 6.2,
"description": "Felt great, nice weather!"
}
Update an activity
At minimum the name field must be writable.
Other fields (type, notes, gear) can also be accepted here
if your platform supports them. POST or PUT is ok too. As is
the activity id as a paramater. Example:
PATCH /activities/abc123
Authorization: Bearer <api_key>
Content-Type: application/json
{ "name": "Easy 10K" }
Create an activity
Create an activity based on simple metadata, and return the new activity's ID in the response so tracekit can reference it later. Preferably, this endpoint would accept a file upload of the "source" data for an activity and do the magic based on that. See Strava's API for an example Strava Upload Activity (createUpload).
POST /activities
Authorization: Bearer <api_key>
Content-Type: application/json
{
"name": "Morning Run",
"type": "run",
"start_time": 1700500000,
"duration_seconds": 3600
}
{ "id": "xyz789" }
Optional endpoints
Gear support is optional. If your platform tracks equipment (bikes, shoes, devices), two additional endpoints allow tracekit to read and assign gear. Tracekit can also build a gear mapping based on the gear attribute on activities if you don't maintain this as a table.
GET /gear
Authorization: Bearer <api_key>
[{ "id": "g1", "name": "Trek Domane" }]
PATCH /activities/abc123
Authorization: Bearer <api_key>
Content-Type: application/json
{ "gear_id": "g1" }
Request tracekit support
You don't need to write any tracekit code. Once your API is ready, open an issue on GitHub titled "Provider request: [Your Platform Name]" and include:
- A link to your API documentation
- Confirmation that per-user API keys are available, or OAuth availability
- Which of the optional endpoints (gear) you support
- An email address so we can reach out to set up a test account — tracekit needs to authenticate against a real account to build and verify the integration

