---
title: "Finish connecting Oura"
method: POST
path: "/integrations/oura/complete"
tags: ["Connections"]
---

# Finish connecting Oura

`POST /integrations/oura/complete`

## Request

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

Takes what Oura's redirect carried. The state is single-use and must be the one ouraAuthorize issued to this athlete; the code is exchanged once and never retried.

## Headers

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

## Request body

- object
  - `code` string, required
  - `state` string, required
  - `scope` string: The space-separated scopes the athlete granted.

## Response `200`

OK

- object
  - `status` 'connected', required

## Other responses

- `401`: Error: UNAUTHORIZED.
- `409`: Error: OURA_NOT_CONFIGURED, OURA_LINK_EXPIRED, OURA_ACCOUNT_IN_USE.
- `422`: Error: OURA_SCOPES_MISSING, OURA_ACCESS_DENIED, OURA_LINK_FAILED.

---

[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)
