WHOOP API and MCP server Let your AI agent read your WHOOP data.

Read your WHOOP daily strain, recovery and sleep records through MCP or REST. Connect an AI agent or create a private reporting workflow with HTTP requests.

  • Free 7-day trial, no card
  • Unofficial, not affiliated with WHOOP
WHOOP logo WHOOP Cloud Browser

8 tools Read only

Recovery to workouts

What can you automate in WHOOP? Use an AI agent, a workflow or a script.

  • Brief you on today's recovery

  • Review a week of sleep stages

  • Compare strain with recovery

  • List and rank your workouts

  • Run a briefing every morning

  • Check your membership plan

API only, no MCP

Does WHOOP have an MCP server or an API? An API yes, an MCP server no.

WHOOP has an official developer API (v2, OAuth 2.0, read-only) but no official MCP server (checked 27 Oct 2026). Cotlet runs 8 WHOOP tools hosted, over MCP for agents and REST for scripts, in your own login.

  • The API returns profile, body measurements, cycles, recovery, sleep and workouts, and sends webhooks for recovery, sleep and workout changes. Its only write removes an app's access.
  • Using it means a developer team, an app, a redirect URL and an OAuth flow. An app WHOOP has not approved serves 10 members, and each step up is a manual review.
  • Zapier and n8n list no WHOOP app, and its limits are 100 requests a minute and 10,000 a day.
The WHOOP API, a GitHub MCP server and Cotlet compared
What you need WHOOP APIGitHub MCP serverCotlet
Recovery, sleep, strain, workouts Yes, in your own code Yes Yes
Works from Claude or ChatGPT No MCP server Desktop apps; web needs hosting Yes, hosted
No developer app or OAuth setup App and OAuth needed Your own app Yes
Membership plan No endpoint No Yes
Allowed by WHOOP's terms Yes, official Yes, on the official API Uses the web app

Checked 27 Oct 2026. Sources: WHOOP API docs · WHOOP Developer Platform: Getting Started · WHOOP Developer Platform: App Approval · WHOOP API rate limiting

Set up once

How does Cotlet connect to WHOOP? One account, two ways to connect.

  1. 1Sign in to WHOOP

    Use your own account in its Cotlet Cloud Browser.

  2. 2Choose MCP or REST

    Connect your agent or create a Cotlet API key.

  3. 3Run your workflow

    Ask your agent or send an HTTP request.

We never keep your WHOOP password, and every WHOOP tool only reads. Who can see your session

Any MCP client

Connect WHOOP to your agent or workflow

Use MCP with your AI agent, or HTTP requests in n8n, Make, Zapier and scripts. Follow the MCP setup below or jump to the REST guide.

  1. 1

    Enable WHOOP for agents. Sign up, log in to WHOOP in its Cloud Browser, then press Enable for agents.

  2. 2

    Paste the Cotlet address. Add https://cotlet.dev/mcp/v1 as an MCP server or connector in your agent.

  3. 3

    Approve the connection. Chat apps ask you to sign in to Cotlet. Editors, n8n and scripts use an API key from the console.

One shared address, https://cotlet.dev/mcp/v1, also carries WHOOP next to your other apps. If you enable WHOOP after connecting, refresh the connector so the new tools show up.

Claude
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect

Claude Code:
claude mcp add --transport http cotlet-whoop \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
ChatGPT
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth
Cursor
// ~/.cursor/mcp.json
{
  "mcpServers": {
    "cotlet-whoop": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
    }
  }
}
Codex
# ~/.codex/config.toml
[mcp_servers.cotlet-whoop]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
n8n
MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: whoop_read
Make, Zapier
Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: whoop_read
Scripts and HTTP

How to use the WHOOP REST API

Create your Cotlet API key

Create a Cotlet API key with access to WHOOP and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.

Sign in to WHOOP in its Cotlet Cloud Browser and enable the app for agents. Use the WHOOP membership account that owns your band.

Make your first WHOOP API request

REST
curl "https://cotlet.dev/api/v1/whoop/day-summary?date=2026-10-26" \
  -H "Authorization: Bearer $COTLET_API_KEY"

Read dated records and retain their units

A successful REST call puts the tool output in result. This illustrative response excerpt omits call IDs, messages and credit details.

Illustrative response excerpt
{
  "status": "success",
  "app": "whoop",
  "tool": "get_day_summary",
  "result": {
    "date": "2026-10-26",
    "strain": 12.4,
    "recovery_percent": 68,
    "sleep_performance_percent": 91,
    "hours_of_sleep": 7.4,
    "sleep_needed_hours": 8.1
  }
}

This request reads a named day; replace the date with the day you want. Read percentages as percentages and the sleep-duration fields as hours.

Daily summary has no pagination; the web view exposes six months of records. Today's strain remains partial until the day ends.

Recovery, sleep, workout and cycle lists use cursors, with 10 records by default and at most 25. Keep date filters fixed while paging; sleep-stage durations use minutes and HRV uses milliseconds.

WHOOP workflows for agents and automations

WHOOP workflows you configure
ToolConnect throughExample workflow
n8nHTTP RequestRead daily strain, recovery and sleep values into your private journal without changing recorded data.
MakeHTTP > Make a requestCombine sleep lists and sleep details into a factual duration and stage report that retains minutes and hours.
Python or Node.jsREST APIRead workout details into a personal strain and duration journal without generating training or medical advice.

Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.

Cotlet reads WHOOP; your workflow steps write to your chosen destination. These HTTP workflows do not require a native Cotlet connector or a prebuilt template.

Python and Node.js can use the same HTTP requests without an AI agent. Keep access keys in credentials, outside shared workflow exports.

The API and MCP reference lists operations and inputs. The REST API guide explains authentication, errors and approvals.

8 read, 0 write

WHOOP API endpoints and MCP tools

Recovery and day strain3

Recovery score, HRV, resting heart rate and day strain. The current day is still open, so its strain grows until the day ends.

  • get_day_summary One day's Strain, Recovery and Sleep Performance as the WHOOP web app shows them. read

    Returns the figures at the top of the web app's profile overview for one day: Strain, Recovery, Sleep Performance, and hours of sleep against sleep needed. Without a date it returns today. Strain is partial until the day ends. Nothing is changed. The web app shows 6 months of data, so earlier dates return nothing.

    MCP callwhoop_read → get_day_summary

    REST endpointGET https://cotlet.dev/api/v1/whoop/day-summary

    Parameters

    Parameters: get_day_summary
    NameTypeDescription
    date date date Day to read. Default: today.

    Example response

    {
      "date": "2026-10-26",
      "strain": 12.4,
      "recovery_percent": 68,
      "sleep_performance_percent": 91,
      "hours_of_sleep": 7.4,
      "sleep_needed_hours": 8.1
    }
  • list_recoveries Daily recovery with score, heart rate variability and resting heart rate. read

    Lists recoveries in a date range, newest first, with the recovery score, heart rate variability and resting heart rate. Pages hold up to 25 days; pass next_cursor back as cursor for the next page. Nothing is changed. The web app shows 6 months of data, so earlier dates return nothing.

    MCP callwhoop_read → list_recoveries

    REST endpointGET https://cotlet.dev/api/v1/whoop/recoveries

    Parameters

    Parameters: list_recoveries
    NameTypeDescription
    from date date Start of the range. Default: 7 days before to.
    to date date End of the range. Default: today.
    limit integer integer 1 to 25. Default: 10.
    cursor string string Next page cursor from the previous call.

    Example input

    {
      "from": "2026-10-24",
      "to": "2026-10-26"
    }

    Example response

    {
      "recoveries": [
        {
          "date": "2026-10-26",
          "recovery_percent": 68,
          "hrv_ms": 74,
          "resting_heart_rate": 52
        },
        {
          "date": "2026-10-25",
          "recovery_percent": 81,
          "hrv_ms": 88,
          "resting_heart_rate": 50
        },
        {
          "date": "2026-10-24",
          "recovery_percent": 43,
          "hrv_ms": 61,
          "resting_heart_rate": 57
        }
      ],
      "next_cursor": null
    }
  • list_cycles Physiological days with day strain and average heart rate. read

    Lists cycles, WHOOP's name for a day that runs from one sleep to the next, newest first, with day strain and average heart rate. The current cycle is still open and its strain grows until the day ends. Nothing is changed. The web app shows 6 months of data, so earlier dates return nothing.

    MCP callwhoop_read → list_cycles

    REST endpointGET https://cotlet.dev/api/v1/whoop/cycles

    Parameters

    Parameters: list_cycles
    NameTypeDescription
    from date date Start of the range. Default: 7 days before to.
    to date date End of the range. Default: today.
    limit integer integer 1 to 25. Default: 10.
    cursor string string Next page cursor from the previous call.

    Example response

    {
      "cycles": [
        {
          "date": "2026-10-26",
          "day_strain": 12.4,
          "average_heart_rate": 71,
          "open": true
        },
        {
          "date": "2026-10-25",
          "day_strain": 14.1,
          "average_heart_rate": 76,
          "open": false
        },
        {
          "date": "2026-10-24",
          "day_strain": 9.8,
          "average_heart_rate": 68,
          "open": false
        }
      ],
      "next_cursor": null
    }

Sleep2

Sleep Performance and minutes in each stage. get_sleep takes the sleep_id from list_sleeps.

  • list_sleeps Sleeps with performance percent and time in each stage. read

    Lists sleeps in a date range, newest first, each with its sleep_id, start and end, Sleep Performance and the minutes in each stage. Pass sleep_id to get_sleep for one night. Nothing is changed. The web app shows 6 months of data, so earlier dates return nothing.

    MCP callwhoop_read → list_sleeps

    REST endpointGET https://cotlet.dev/api/v1/whoop/sleeps

    Parameters

    Parameters: list_sleeps
    NameTypeDescription
    from date date Start of the range. Default: 7 days before to.
    to date date End of the range. Default: today.
    limit integer integer 1 to 25. Default: 10.
    cursor string string Next page cursor from the previous call.

    Example response

    {
      "sleeps": [
        {
          "sleep_id": "a1b2c3d4-0001",
          "start": "2026-10-25T23:12:00-07:00",
          "end": "2026-10-26T06:41:00-07:00",
          "performance_percent": 91,
          "stage_minutes": {
            "awake": 38,
            "light": 214,
            "slow_wave": 96,
            "rem": 101
          }
        },
        {
          "sleep_id": "a1b2c3d4-0002",
          "start": "2026-10-24T23:55:00-07:00",
          "end": "2026-10-25T07:20:00-07:00",
          "performance_percent": 84,
          "stage_minutes": {
            "awake": 45,
            "light": 226,
            "slow_wave": 82,
            "rem": 92
          }
        }
      ],
      "next_cursor": null
    }
  • get_sleep One sleep with its stages and Sleep Performance. read

    Returns one sleep: start and end, Sleep Performance, hours of sleep against sleep needed and the minutes in each stage. Use sleep_id from list_sleeps. Nothing is changed. The web app shows 6 months of data, so earlier dates return nothing.

    MCP callwhoop_read → get_sleep

    REST endpointGET https://cotlet.dev/api/v1/whoop/sleeps/{sleep_id}

    Parameters

    Parameters: get_sleep
    NameTypeDescription
    sleep_id string required string Sleep ID from list_sleeps.

    Example input

    {
      "sleep_id": "sleep_8c41d2"
    }

    Example response

    {
      "sleep_id": "a1b2c3d4-0001",
      "start": "2026-10-25T23:12:00-07:00",
      "end": "2026-10-26T06:41:00-07:00",
      "performance_percent": 91,
      "hours_of_sleep": 7.4,
      "sleep_needed_hours": 8.1,
      "stage_minutes": {
        "awake": 38,
        "light": 214,
        "slow_wave": 96,
        "rem": 101
      }
    }

Workouts2

Sport, duration, strain and average heart rate. list_workouts can keep one sport.

  • list_workouts Workouts with sport, strain and average heart rate. read

    Lists workouts in a date range, newest first, with sport, start time, duration, activity strain and average heart rate. Set sport to keep one sport. Pass workout_id to get_workout for one. Nothing is changed. The web app shows 6 months of data, so earlier dates return nothing.

    MCP callwhoop_read → list_workouts

    REST endpointGET https://cotlet.dev/api/v1/whoop/workouts

    Parameters

    Parameters: list_workouts
    NameTypeDescription
    from date date Start of the range. Default: 7 days before to.
    to date date End of the range. Default: today.
    sport string string Sport name as WHOOP shows it, e.g. Running.
    limit integer integer 1 to 25. Default: 10.
    cursor string string Next page cursor from the previous call.

    Example response

    {
      "workouts": [
        {
          "workout_id": "w5e6f7a8-0001",
          "sport": "Running",
          "start": "2026-10-26T17:30:00-07:00",
          "duration_minutes": 48,
          "strain": 11.2,
          "average_heart_rate": 152
        },
        {
          "workout_id": "w5e6f7a8-0002",
          "sport": "Strength Trainer",
          "start": "2026-10-24T07:10:00-07:00",
          "duration_minutes": 55,
          "strain": 9.6,
          "average_heart_rate": 121
        }
      ],
      "next_cursor": null
    }
  • get_workout One workout with strain, duration and heart rate. read

    Returns one workout: sport, start time, duration, activity strain and average heart rate. Use workout_id from list_workouts. Nothing is changed. The web app shows 6 months of data, so earlier dates return nothing.

    MCP callwhoop_read → get_workout

    REST endpointGET https://cotlet.dev/api/v1/whoop/workouts/{workout_id}

    Parameters

    Parameters: get_workout
    NameTypeDescription
    workout_id string required string Workout ID from list_workouts.

    Example input

    {
      "workout_id": "workout_8c41d2"
    }

    Example response

    {
      "workout_id": "w5e6f7a8-0001",
      "sport": "Running",
      "start": "2026-10-26T17:30:00-07:00",
      "duration_minutes": 48,
      "strain": 11.2,
      "average_heart_rate": 152
    }

Membership1

Your plan and renewal date. Changing or cancelling it is not a tool.

  • get_membership Your WHOOP plan and renewal date from the Membership page. read

    Returns the plan and renewal date the Membership page shows. It never returns card numbers or billing addresses. Nothing is changed. Changing or cancelling a plan is not a tool.

    MCP callwhoop_read → get_membership

    REST endpointGET https://cotlet.dev/api/v1/whoop/membership

    Parameters

    No parameters.

    Example response

    {
      "plan": "Peak",
      "status": "active",
      "renewal_date": "2027-03-14"
    }
Encrypted, revocable

Who can see my WHOOP session, and how do I revoke it?

  • What we store

    Your logged-in WHOOP profile, encrypted with AES-256-GCM, in Finland. Not the password.

  • What your agent gets

    The 8 WHOOP tools. Never the cookie.

  • What the session sees

    Your own account: recovery, sleep, strain, workouts and membership.

  • What no tool touches

    Plan changes, cancelling, payment details, password and deleting data.

  • If WHOOP asks to verify

    A new device can ask for a code. You type it in, we never do.

  • How to cut access

    Disable for agents, reset the browser, or sign out of WHOOP.

Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). There is no SOC 2 report or third-party pentest yet.

Account risk

Is it against WHOOP's terms? Account safety Their terms ban scraping, even with your permission.

"use of web scraping, web harvesting, or web data extraction methods from WHOOP Services even if the Account owner gives permission"
WHOOP Terms of Use, prohibited uses, as shown in search results on 27 Oct 2026

The terms also end your permission to use the Services on a violation. Cotlet reads your WHOOP web app, as you would, but WHOOP could read it as automation. The official API is the route its terms allow, and its own terms bar scraping and building permanent copies of WHOOP data. We found no public case of a WHOOP account closed for an AI agent or an MCP server (checked 27 Oct 2026). A competing tool that signs in with your password through WHOOP's private app API carries its own warning about suspension.

How we keep your account looking like you

  • Your own WHOOP account, logged in by you
  • One Cloud Browser with its own IP and cookies, so no new-device check every call
  • Every tool only reads: nothing is edited or deleted
  • No tool changes your plan or payment
  • If WHOOP objects, we pause the WHOOP tools for everyone within 24 h

If a ban on automation would cost you more than the convenience, use the official API with your own developer app instead.

Tested every 12 h

What happens when WHOOP changes? We repair the tool; your prompts stay the same.

between tests of the WHOOP reads
12 h
for a call to a WHOOP tool paused for repair
$0

When WHOOP moves a screen or renames a field, the fix happens on our side and your prompts keep working. The official API changes too: v2 launched on 1 Jul 2025 and v1 webhooks were removed. status.cotlet.dev watches the site, console and API every 3 minutes.

8 of 8 tools read only

Safety and mistakes Every WHOOP tool only reads.

  1. 01 Reads your day Recovery, sleep and strain for the dates you ask about.
  2. 02 Checks the window The web app shows 6 months, so older dates come back empty.
  3. 03 Marks an open day Today's strain is partial until the day ends.
  4. 04 Reports what it found Numbers as WHOOP shows them, with the dates.
What can go wrong with a WHOOP agent
CaseWhat happens
The agent asks for data before 6 months agoThe call returns an empty list; the agent says the window is 6 months
You ask to change your planThere is no tool for it; do it in WHOOP
The agent reads the wrong dayNothing changed, so ask again with the date

All 8 tools read, so none waits for your OK and nothing can edit, delete or send. Scheduled runs need no approval.

WHOOP data is health data. Share the agent's answers only with people you trust.

MCP call
{
  "name": "list_recoveries",
  "arguments": {
    "from": "2026-10-24",
    "to": "2026-10-26"
  }
}
REST
curl "https://cotlet.dev/api/v1/whoop/recoveries?from=2026-10-24&to=2026-10-26" \
  -H "Authorization: Bearer $COTLET_API_KEY"
Tool output
{
  "recoveries": [
    {
      "date": "2026-10-26",
      "recovery_percent": 68,
      "hrv_ms": 74,
      "resting_heart_rate": 52
    },
    {
      "date": "2026-10-25",
      "recovery_percent": 81,
      "hrv_ms": 88,
      "resting_heart_rate": 50
    },
    {
      "date": "2026-10-24",
      "recovery_percent": 43,
      "hrv_ms": 61,
      "resting_heart_rate": 57
    }
  ],
  "next_cursor": null
}

Scripts and cron jobs reach the same tools over REST at /api/v1/whoop, with the same key and price. A failed call costs nothing. The tools table lists the REST path of each tool.

Pay per call

How much does the WHOOP MCP server cost?

About $13 a monthfor a daily morning briefing and a weekly review, 2,270 credits. Your WHOOP membership is billed by WHOOP as before.

A month of WHOOP jobs for one member, in credits
JobCallsCredits
Morning recovery briefing, daily2 × 30600
Weekly sleep and strain review4 × 4160
Membership check1 × 110
Cloud Browser, 30 days1,500
Total2,270
  • Free 7-day trial, no card
  • 10 credits per successful call, MCP or REST
  • 50 credits a day for the Cloud Browser
  • Works on every WHOOP membership you can log in with

The month is our example: a two-call briefing every morning and a four-call review on four Sundays. No public figure for how often a member asks exists. Dollars at the $29 pack rate.

Cotlet credit packs: price, credits and calls at 10 credits each
Credits Price, one time Calls at 10 credits Per 1,000 credits
5,000 $29 500 $5.80
15,000 $79 1,500 $5.27
32,000 $149 3,200 $4.66
60,000 $249 6,000 $4.15

Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.

Other options

WHOOP MCP server on GitHub, hosted or the API: which to use Free options exist if you run them yourself.

Other WHOOP MCP options, checked 27 Oct 2026
OptionWhat it doesWhere it stops
shashankswe2020-ux/whoop-mcp16 read-only tools on the official API, 175 stars, last push 25 Oct 2026.Runs on your computer with your own developer app. Claude web, phone and ChatGPT need you to host it.
yuridivonis/whoop-mcp-serverRemote MCP for a Claude.ai custom connector on API v2, 16 stars, last push 21 Oct 2026.You host it and register the WHOOP app.
briangaoo/whoop-mcp55 tools with writes, 136 stars, through WHOOP's private iOS API.Needs your WHOOP password. Its own notice says it goes against WHOOP's terms.
Older servers (nissand, RomanEvstigneev, JedPattersonn)Claude Desktop servers with 13 to 27 stars.No push since Jul to Oct 2025.
Hosted WHOOP connectorsSeveral services run the official API for you, free or from about $39 a year, per their own pages.WHOOP serves 10 members on an unapproved app, so a shared app has a member cap.
Zapier and n8nNeither lists a WHOOP app (checked 27 Oct 2026).You build the API calls with a generic OAuth step.

If you are happy to register a developer app and run a server, a GitHub server on the official API is free and within WHOOP's terms. Cotlet is for people who want the same reading in Claude or ChatGPT with no app to register and no server to fix. It works in your web login, so it also carries the terms risk above.

EU company, since 2019

Who runs Cotlet A company you can look up.

Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), working since 2019, founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the WHOOP tools.

WHOOP API and MCP: questions

Can I use the WHOOP API without an AI agent?

Yes. Call Cotlet's REST API from a script or an HTTP step in n8n, Make or Zapier with your Cotlet key. MCP is the alternative for AI agents; you do not need to connect an agent to use REST.

How do I get access?

Create a free account at https://cotlet.dev, open WHOOP under Integrations in the console and log in to WHOOP in its Cloud Browser. The trial starts with your first app, no card asked.

Does the official WHOOP API need an approved app?

An app starts on the Sandbox tier, which lets up to 10 WHOOP members connect. More members need a request in the Developer Dashboard, and WHOOP reviews each one by hand (checked 27 Oct 2026). Cotlet does not use the API, so no app or approval is involved.

How far back does the data go?

The WHOOP web app shows 6 months of data (WHOOP Basics, checked 27 Oct 2026), and the tools read what the web app shows. Steps are not in the web app, so no tool returns them. The official API added a step count to cycles on 23 Sep 2026.

Does WHOOP send webhooks?

Yes, through the official API: recovery, sleep and workout updated and deleted events (checked 27 Oct 2026). A Cotlet agent does not receive them. Run it on a schedule instead, for example a morning list_recoveries call.

Is the data the same as in the official API?

The figures come from what the WHOOP web app shows, not from the API. Strain, Recovery and Sleep Performance are the same scores WHOOP computes. The API has fields the web app lacks, for example steps, which the web app does not show.

Can the agent log a workout or edit my journal?

No. All tools read. The official API is read-only as well, apart from revoking an app's access.

Is the MCP server different from the REST API?

Only the door is different. Both expose the same 8 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.

Is Cotlet affiliated with WHOOP?

No. Cotlet is independent and not affiliated with WHOOP, Inc.

Give your agent access to WHOOP.

Free 7-day trial with 2,000 credits, no card needed.