---
title: "Every service the athlete can connect, with its connection"
method: GET
path: "/integrations"
tags: ["Connections"]
---

# Every service the athlete can connect, with its connection

`GET /integrations`

## Request

- Base URL: `https://bodylab.lol/api/v1`
- URL: `https://bodylab.lol/api/v1/integrations`
- Auth: HTTP bearer

## Headers

- `X-Client-Platform` string
- `X-Client-Version` string

## Response `200`

OK

- object[]
  - `provider` string, required: A connected service. Known values: garmin, oura, apple_health. Treat unknown values as "other".
  - `label` string, required
  - `imports` boolean, required: Whether Body Lab imports data from this service yet. One that doesn't can be linked ahead of time.
  - `connect` object, required
    - `shape` string, required: How the athlete connects this service. Known values: oauth_redirect, credentials, native_permission. Treat unknown values as "other".
    - `availableOn` string[], required: Where connecting works. A surface that isn't listed doesn't offer the service at all.
    - `summary` string, required: What connecting brings, in a sentence for someone who hasn't connected it.
    - `note` string, nullable, required: Said beside the connect control: how signing in works and what Body Lab keeps. Null when there's nothing to add.
    - `identifierLabel` string, nullable, required: credentials only: the label for the account field, e.g. the service's email. Null for other shapes.
    - `identifierIsEmail` boolean, required: credentials only: the account field is an email address.
    - `mayAskForCode` boolean, required: credentials only: the service may ask for a one-time code after the password (verifyCode).
    - `disconnectWarning` string, nullable, required: What disconnecting does to what was already imported, for the athlete to confirm before disconnect is sent. Null where Body Lab can't disconnect it (a permission the device holds).
    - `deletesOnDisconnect` boolean, required: Whether disconnecting deletes what this service imported, rather than leaving it in the athlete's history. The same fact `disconnectWarning` states in words, as a flag, so a client can label the confirming control for what it does — 'Disconnect and delete' rather than 'Disconnect' — without matching on prose. False where there is nothing to disconnect.
  - `connection` object, nullable, required: Null when the service isn't connected.
    - `status` string, required: The connection's state. Known values: connecting, pending_mfa, active, reauth_required. Treat unknown values as "other".
    - `accountLabel` string, nullable, required
    - `codeRequired` boolean, required: Sign-in is waiting for a one-time code.
    - `lastSyncedAt` string, date-time, nullable, required: An instant: ISO-8601 with offset, e.g. 2026-09-13T06:30:00Z.
    - `lastError` string, nullable, required
    - `cooldownUntil` string, date-time, nullable, required: An instant: ISO-8601 with offset, e.g. 2026-09-13T06:30:00Z.
    - `importingHistory` boolean, required
    - `syncing` boolean, required
    - `lastRun` object, nullable, required
      - `status` string, required: How a sync run went (running while it's in progress). Known values: running, ok, partial, rate_limited, reauth_required, error. Treat unknown values as "other".
      - `startedAt` string, date-time, required: An instant: ISO-8601 with offset, e.g. 2026-09-13T06:30:00Z.
      - `activitiesAdded` integer, required
      - `wellnessDays` integer, required
    - `deepHistory` object, required: The slow import of history older than the first year, which runs on its own.
      - `importing` boolean, required: The first year is in and there's more to look for.
      - `completedAt` string, date-time, nullable, required: An instant: ISO-8601 with offset, e.g. 2026-09-13T06:30:00Z.
      - `activitiesBackTo` string, date, nullable, required: A day on the athlete's own calendar: YYYY-MM-DD, no time zone.
      - `wellnessBackTo` string, date, nullable, required: A day on the athlete's own calendar: YYYY-MM-DD, no time zone.

## Other responses

- `401`: Error: UNAUTHORIZED.

---

[API](https://skmtc.dev/bodylab/apis/body-lab-api.md) · [All operations](https://skmtc.dev/bodylab/apis/body-lab-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bodylab/apis/body-lab-api/revisions/544c201eaf88?raw)
