# TrueCoach API and MCP server

> TrueCoach has no public API and no developer docs (checked 11 Oct 2026). The only programmatic access is its Zapier app, which its help center lists for the Pro plan or higher: 4 triggers and 1 action, "Add a Client to TrueCoach".

Online coaching app for personal trainers and strength coaches: a workout builder, reusable programs, client groups, compliance rates, metrics and in-app messaging.

## What is the TrueCoach API?

Cotlet's TrueCoach API exposes 15 endpoints for your own TrueCoach account: list clients, get client, get dashboard, list workouts, get workout, list programs, list metrics, list messages, create client, create workout, assign program, unassign program, add client to group, update metric and send message. The list_clients endpoint returns your clients with client type, groups, 7, 30 and 90 day compliance rates and due date. Each endpoint takes simple JSON inputs like client_id, client_type or limit and works both as an MCP tool for agents and as a REST call for scripts.

- **Category:** [Courses & training](https://cotlet.dev/integrations/category/courses-training)
- **Endpoints:** 15 (8 read, 7 write)
- **Updated:** 2026-10-11

TrueCoach has no public API and no developer docs (checked 11 Oct 2026). Cotlet is a hosted MCP server and REST API for TrueCoach with 15 endpoints (8 read, 7 write): your AI agent signs in as you and does the work.

## Does TrueCoach have an official API?

TrueCoach has no public API and no developer docs (checked 11 Oct 2026). The only programmatic access is its Zapier app, which its help center lists for the Pro plan or higher: 4 triggers and 1 action, "Add a Client to TrueCoach".

| Task | TrueCoach official | Cotlet |
|---|---|---|
| Add a client | Yes: Zapier action "Add a Client to TrueCoach" | Yes |
| React to completed workouts | Partly: Zapier trigger "Workout Completed" fires on new events, it cannot read past results | Yes |
| List clients with compliance rates and due dates | No: Zapier trigger "New Client" fires on new clients only | Yes |
| Add a client to a group | Partly: Zapier can only react when a client is "Added to a Client Group" | Yes |
| Write a workout on a client calendar | No: Zapier trigger "Workout Created" only reports workouts | Yes |
| Assign or unassign a program | No | Yes |
| Update a client metric | No | Yes |
| Message a client or a group | No | Yes |

Sources: [TrueCoach Help: Zapier Integration](https://help.truecoach.co/en/articles/8688374-zapier-integration), [TrueCoach pricing](https://truecoach.co/pricing/), [TrueCoach Help: Compliance Rates](https://help.truecoach.co/en/articles/2403738-compliance-rates), [TrueCoach Help: Programs](https://help.truecoach.co/en/articles/3047401-programs), [TrueCoach blog: The Fastest Way to Build a Client Program in 2025 (AI Workout Builder)](https://truecoach.co/blog/the-fastest-way-to-build-a-client-program-in-2025/)

## For AI agents

```text
TrueCoach has no public API and no developer docs (checked 11 Oct 2026). The only programmatic access is its Zapier app, which its help center lists for the Pro plan or higher: 4 triggers and 1 action, "Add a Client to TrueCoach".
Cotlet provides a hosted MCP server and REST API for TrueCoach: 15 tools (8 read, 7 write).
Access       Request access at https://cotlet.dev/app/signup?app=truecoach; we email the API key.

MCP server   https://cotlet.dev/mcp/v1
REST base    https://cotlet.dev/api/v1/truecoach
Auth         Authorization: Bearer <COTLET_API_KEY>. Listing endpoints and schemas needs no key; calling an endpoint needs one.
Tools        list_clients, get_client, get_dashboard, list_workouts, get_workout, list_programs, list_metrics, list_messages, create_client, create_workout, assign_program, unassign_program, add_client_to_group, update_metric, send_message
Confirm      create_client, send_message (by default the user approves each call; the user can switch this off per tool, e.g. for scheduled automations)
Markdown     https://cotlet.dev/integrations/truecoach-api-mcp-server.md

How access works:
1. The user requests access at https://cotlet.dev/app/signup?app=truecoach (TrueCoach is pre-selected). Each request is reviewed and the API key is sent by email.
2. The user signs in to TrueCoach once in a browser. An agent cannot do this step.
3. The API key goes into the MCP client or the REST call as a bearer token.

Fits: people who want a hosted TrueCoach server that someone else maintains, including non-developers.

Policy: Cotlet never stores passwords, never solves CAPTCHAs, never bypasses MFA.
Company: legal details in the Terms of service at https://cotlet.dev/terms. Contact contact@cotlet.dev.
Session: the user signs in to TrueCoach in a browser; Cotlet keeps only the session, AES-256 encrypted, revocable in the dashboard at any time.
Terms: the user stays responsible for following TrueCoach's terms; Cotlet is not affiliated with TrueCoach.
```

## What can an AI agent do in TrueCoach?

Cotlet is best for solo coaches and small studios who write programming and follow up with clients every week without running or fixing a server.

- **Weekly client compliance check** (runs: weekly): "Which clients dropped in compliance this week, and who runs out of programming in the next 7 days?" → `get_dashboard`, `list_clients`
- **[Write workouts from a text prompt](https://cotlet.dev/integrations/truecoach-api-mcp-server/write-workouts-from-text)**: "Write Thursday's lower body session for Sam: warmup, back squat 5x5 at 3010 tempo, RDL 3x8, then a 10 min EMOM of KB swings and push-ups." → `list_clients`, `list_workouts`, `create_workout`
- **[Assign a program to a client group](https://cotlet.dev/integrations/truecoach-api-mcp-server/assign-program-to-group)** (runs: weekly): "Assign my 12 Week Hypertrophy program to the Bootcamp group from Monday 19 Oct on day 1. Skip anyone who already has it and tell me whose current block runs past that date." → `list_programs`, `list_clients`, `get_client`, `assign_program`, `unassign_program`
- **[Check in with clients who missed workouts](https://cotlet.dev/integrations/truecoach-api-mcp-server/check-in-with-clients-who-missed-workouts)** (runs: weekly): "Find clients who missed two or more workouts this week or show up under Needs Attention, and draft a short personal check-in for each. Skip anyone who already told me why." → `get_dashboard`, `list_clients`, `list_workouts`, `list_messages`, `send_message`
- **[Onboard new clients from a list](https://cotlet.dev/integrations/truecoach-api-mcp-server/onboard-new-clients)**: "Add the five new sign-ups from leads.csv as Remote clients, put them in the January group and start them on my Onboarding Sequence program tomorrow." → `list_clients`, `create_client`, `add_client_to_group`, `assign_program`

## Can TrueCoach automations run on a schedule in n8n, Make or Zapier?

Yes. Cotlet does not replace your automation platform: it gives it a TrueCoach connection it does not have, with the same API key as your agent. Write actions ask for your OK by default; switch that off in your dashboard for the tools you choose, for example to weekly client compliance check, and the schedule runs on its own. Cotlet runs in the cloud, so it keeps going while your computer is off.

| Where | How to connect | How to schedule |
|---|---|---|
| Your AI agent | Add https://cotlet.dev/mcp/v1 with your API key. | A scheduled agent run, for example a Claude Code routine. |
| n8n | MCP Client node with https://cotlet.dev/mcp/v1, or an HTTP Request node to https://cotlet.dev/api/v1/truecoach/{tool}. | Schedule Trigger node. |
| Make | HTTP module: POST https://cotlet.dev/api/v1/truecoach/{tool} with an Authorization: Bearer header and a JSON body. | Scenario schedule. |
| Zapier | Webhooks by Zapier: POST https://cotlet.dev/api/v1/truecoach/{tool} with the same header and body. | Schedule by Zapier trigger. |
| Your own script | POST https://cotlet.dev/api/v1/truecoach/{tool} with your API key. | cron or GitHub Actions. |

## Tools

**For AI agents:** Every endpoint and its schema is public. The 15 endpoints on this page, with parameters and example responses, can be listed without an account. Calling one returns 403 until the account has an API key with access to TrueCoach.

### list_clients

Your clients with client type, groups, 7, 30 and 90 day compliance rates and due date. Access: read. REST: `POST /api/v1/truecoach/list_clients`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `group` | string | no | Only clients in this client group. |
| `client_type` | enum | no | remote, dual or in_person. Default: all. |
| `archived` | boolean | no | List archived clients instead of active ones. Default: false. |
| `limit` | integer | no | Page size. Default: 50. |
| `cursor` | string | no | Next page cursor from the previous call. |

Returns one item per client, active clients by default. Compliance is completed against assigned exercises, as TrueCoach shows it. Due date is the date of the furthest programmed workout. Results come in pages; use the cursor for the next one.

Example response:

```json
{
  "clients": [
    {
      "client_id": "4821907",
      "name": "Sam Rivera",
      "client_type": "remote",
      "groups": [
        "Bootcamp"
      ],
      "compliance_7d": 50,
      "compliance_30d": 82,
      "compliance_90d": 88,
      "due_date": "2026-10-18"
    },
    {
      "client_id": "4821955",
      "name": "Alex Kim",
      "client_type": "dual",
      "groups": [
        "Bootcamp",
        "January"
      ],
      "compliance_7d": 100,
      "compliance_30d": 95,
      "compliance_90d": 91,
      "due_date": "2026-11-02"
    }
  ],
  "next_cursor": null
}
```

### get_client

One client: profile, client type, groups, compliance rates, due date and assigned programs. Access: read. REST: `POST /api/v1/truecoach/get_client`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from list_clients. |

Returns the profile fields TrueCoach holds for the client, the three compliance rates and the programs assigned to them. In-Person clients have no client account, so they have no login. Archived clients can be read too.

Example response:

```json
{
  "client_id": "4821907",
  "name": "Sam Rivera",
  "email": "sam.rivera@example.com",
  "client_type": "remote",
  "groups": [
    "Bootcamp"
  ],
  "compliance_7d": 50,
  "compliance_30d": 82,
  "compliance_90d": 88,
  "due_date": "2026-10-18",
  "programs": [
    {
      "program_id": "30517",
      "name": "12 Week Hypertrophy"
    }
  ]
}
```

### get_dashboard

Your overall compliance rate, clients under Needs Attention and clients due soon. Access: read. REST: `POST /api/v1/truecoach/get_dashboard`.

No parameters.

Returns what the TrueCoach dashboard shows. Needs Attention lists clients whose compliance rate dropped suddenly in a period. Due soon uses the threshold set in your TrueCoach settings.

Example response:

```json
{
  "overall_compliance": 84,
  "needs_attention": [
    {
      "client_id": "4821907",
      "name": "Sam Rivera",
      "period": "7d",
      "compliance": 50
    }
  ],
  "due_soon": [
    {
      "client_id": "4821907",
      "name": "Sam Rivera",
      "due_date": "2026-10-18"
    }
  ]
}
```

### list_workouts

Workouts on a client's workout calendar in a date range, with status. Access: read. REST: `POST /api/v1/truecoach/list_workouts`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from list_clients. |
| `from` | date | yes | First day of the range. |
| `to` | date | yes | Last day of the range. |
| `status` | enum | no | all, completed, missed or upcoming. Default: all. |

Returns workouts oldest first with date, title and status. A day can hold more than one workout. Use get_workout for the exercises and logged results.

Example response:

```json
{
  "workouts": [
    {
      "workout_id": "91374520",
      "date": "2026-10-08",
      "title": "Upper body A",
      "status": "completed"
    },
    {
      "workout_id": "91374611",
      "date": "2026-10-10",
      "title": "Lower body B",
      "status": "missed"
    }
  ]
}
```

### get_workout

Full workout: title, warmup, exercises and circuits, cooldown, and the results the client logged. Access: read. REST: `POST /api/v1/truecoach/get_workout`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `workout_id` | string | yes | Workout ID from list_workouts. |

Returns the parts in the order the client sees them. Results are what the client entered; for In-Person clients, the coach entered them. A missed workout has no results.

Example response:

```json
{
  "workout_id": "91374520",
  "client_id": "4821907",
  "date": "2026-10-08",
  "title": "Upper body A",
  "status": "completed",
  "warmup": "5 min row, band pull-aparts",
  "items": [
    {
      "type": "exercise",
      "name": "Bench Press",
      "description": "4 sets of 6, rest 2 min",
      "results": "4x6 at 80 kg"
    },
    {
      "type": "exercise",
      "name": "Pull-up",
      "description": "3 sets to near failure",
      "results": "8, 7, 6"
    }
  ],
  "cooldown": "5 min easy walk"
}
```

### list_programs

Programs in your account with tags and the clients they are assigned to. Access: read. REST: `POST /api/v1/truecoach/list_programs`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `tag` | string | no | Only programs with this program tag. |

Returns your programs, filtered by program tag if you give one. On Team Accounts, private programs are visible only to coaches with admin privileges.

Example response:

```json
{
  "programs": [
    {
      "program_id": "30517",
      "name": "12 Week Hypertrophy",
      "tags": [
        "strength"
      ],
      "weeks": 12,
      "assigned_clients": 6
    },
    {
      "program_id": "30644",
      "name": "Bootcamp Base",
      "tags": [
        "group"
      ],
      "weeks": 4,
      "assigned_clients": 11
    }
  ]
}
```

### list_metrics

A client's metrics (for example back squat or body fat %) with their values over time. Access: read. REST: `POST /api/v1/truecoach/list_metrics`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from list_clients. |

Returns the metrics assigned to the client, grouped as in the Metric Manager, with each recorded value and date, newest first. Metrics linked to a workout exercise update when the client logs a result.

Example response:

```json
{
  "client_id": "4821907",
  "metrics": [
    {
      "name": "Back Squat",
      "unit": "kg",
      "values": [
        {
          "date": "2026-10-08",
          "value": "110"
        },
        {
          "date": "2026-09-10",
          "value": "105"
        }
      ]
    }
  ]
}
```

### list_messages

Recent messages in your conversation with a client, newest first. Access: read. REST: `POST /api/v1/truecoach/list_messages`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from list_clients. |
| `limit` | integer | no | Number of messages. Default: 30. |

Returns text messages with sender and time. Reading does not mark anything as sent or change the conversation.

Example response:

```json
{
  "client_id": "4821907",
  "messages": [
    {
      "sender": "client",
      "sent_at": "2026-10-10T18:42:00+02:00",
      "body": "Sorry, travelling this week."
    },
    {
      "sender": "coach",
      "sent_at": "2026-10-08T09:10:00+02:00",
      "body": "Great session yesterday."
    }
  ]
}
```

### create_client

Add a client. Remote and Dual clients get the TrueCoach invitation email right away. Access: write, asks the user first. REST: `POST /api/v1/truecoach/create_client`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `first_name` | string | yes | First name. |
| `last_name` | string | yes | Last name. |
| `email` | string | no | Required for remote and dual clients. |
| `client_type` | enum | no | remote, dual or in_person. Default: remote. |

Creates the client in your list. First and last name are required; email is required for remote and dual clients. In-Person clients get no invitation and no account. A client who already has a TrueCoach account under another coach cannot be added with the same email. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "client_id": "4822040",
  "name": "Maya Okafor",
  "client_type": "remote",
  "invitation_sent": true
}
```

### create_workout

Write a workout on a client's workout calendar for a given day. Access: write. REST: `POST /api/v1/truecoach/create_workout`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from list_clients. |
| `date` | date | yes | Day on the workout calendar. |
| `title` | string | no | Workout title the client sees. |
| `warmup` | string | no | Warmup text, shown as written. |
| `items` | object | yes | Ordered list of exercises (name, description, optional superset link) and circuits (description). |
| `cooldown` | string | no | Cooldown text, shown as written. |

Adds the workout to the calendar and returns its ID. Warmup and cooldown are free text. Sets, reps, tempo and rest go in each exercise description. Exercise names come from the TrueCoach library. It does not ask for your OK: the client sees the workout on their calendar, but you can edit or delete it in TrueCoach.

Example response:

```json
{
  "workout_id": "91374700",
  "client_id": "4821907",
  "date": "2026-10-15",
  "title": "Lower body A",
  "status": "upcoming",
  "items": 3,
  "due_date": "2026-10-18"
}
```

### assign_program

Put a program on the workout calendars of clients or client groups. Access: write. REST: `POST /api/v1/truecoach/assign_program`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `program_id` | string | yes | Program ID from list_programs. |
| `client_ids` | string[] | no | Clients to assign. Give this or group_names. |
| `group_names` | string[] | no | Client groups to assign. |
| `start_date` | date | yes | Calendar date of the first workout. |
| `start_day` | integer | no | Program day to start on. Default: 1. |

Assigns from the start date on the program day you choose. Completed and missed workouts are never touched. Later edits to the program reach clients only if Sync is on for that program in TrueCoach. It does not ask for your OK, because unassign_program undoes it.

Example response:

```json
{
  "program_id": "30517",
  "assigned_clients": 6,
  "start_date": "2026-10-19",
  "start_day": 1
}
```

### unassign_program

Remove a program from a client's calendar. Completed and missed workouts stay. Access: write. REST: `POST /api/v1/truecoach/unassign_program`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `program_id` | string | yes | Program ID from list_programs. |
| `client_id` | string | yes | Client ID from list_clients. |

Removes the upcoming workouts of the program from the client calendar. It reaches no one and a new assign_program restores it, so it does not ask for your OK.

Example response:

```json
{
  "program_id": "30517",
  "client_id": "4821907",
  "unassigned": true
}
```

### add_client_to_group

Add a client to one of your client groups. A client can be in several groups. Access: write. REST: `POST /api/v1/truecoach/add_client_to_group`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from list_clients. |
| `group_name` | string | yes | Client group name. |

Adds the group to the client and keeps their other groups. The group must exist in Manage Groups. It reaches no one, and removing the client from the group in TrueCoach undoes it, so it does not ask for your OK.

Example response:

```json
{
  "client_id": "4822040",
  "groups": [
    "January"
  ]
}
```

### update_metric

Record a new value for one of a client's metrics. Access: write. REST: `POST /api/v1/truecoach/update_metric`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from list_clients. |
| `metric` | string | yes | Metric name from list_metrics. |
| `value` | string | yes | New value, in the metric's unit. |
| `date` | date | no | Date of the measurement. Default: today. |

Updates the metric as a coach would in the Metric Manager on the client calendar. The metric must already be assigned to the client. It does not ask for your OK; clients can see their own metrics.

Example response:

```json
{
  "client_id": "4821907",
  "metric": "Back Squat",
  "value": "112.5",
  "date": "2026-10-11"
}
```

### send_message

Message a client or every client in a group, as you. Access: write, asks the user first. REST: `POST /api/v1/truecoach/send_message`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | no | One client. Give this or group_name. |
| `group_name` | string | no | Each client in the group gets the message individually. |
| `body` | string | yes | Message text. |

A message to a group reaches each client individually, as in TrueCoach. Clients who are not logged in to TrueCoach get the message text by email. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "sent": 1,
  "client_id": "4821907",
  "sent_at": "2026-10-11T09:30:00+02:00"
}
```

## How do I connect TrueCoach to Claude Code, Codex or Cursor?

Connecting TrueCoach takes three steps: request access, sign in to TrueCoach once, then add one MCP server or call the REST API with the same key.

### Connect TrueCoach to your agent.

1. **Create an account** Sign up and add TrueCoach in the console. Your API key is there too.

2. **Sign in to TrueCoach once** Open the connect page from the console and sign in to TrueCoach the way you always do. We keep the session, never your password, and you can revoke it anytime.

3. **Add Cotlet to your agent** Paste the snippet for your client. The same server and key serve every app you connect, so you do this once.

   Claude Code:

```
claude mcp add --transport http cotlet \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
```

   Cursor:

```
{
  "mcpServers": {
    "cotlet": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": {
        "Authorization": "Bearer ${COTLET_API_KEY}"
      }
    }
  }
}
```

   Codex:

```
# ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
```

4. **Ask your agent** Ask in plain words. Your agent finds the TrueCoach tools on the server and calls them for you; anything that reaches other people waits for your OK unless you switch that off for a tool.

```
Which clients dropped in compliance this week, and who runs out of programming in the next 7 days?
```

### Call TrueCoach from your scripts.

1. **Export your API key** Your scripts use the same API key as your agent. Keep it in an environment variable, never in your code.

```
export COTLET_API_KEY="cotlet_..."
```

2. **Call a tool** Every tool is a POST endpoint at /api/v1/truecoach/{tool}. Send its parameters as JSON, exactly as listed in the endpoints above.

```
curl https://cotlet.dev/api/v1/truecoach/create_workout \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"4821907","date":"2026-10-15","title":"Lower body A","warmup":"5 min bike, 2 rounds: 10 glute bridges, 10 goblet squats","items":[{"type":"exercise","name":"Back Squat","description":"5 sets of 5, tempo 3010, rest 2 min"},{"type":"exercise","name":"Romanian Deadlift","description":"3 sets of 8, rest 90 s"},{"type":"circuit","description":"10 min EMOM: 12 KB swings, 8 push-ups"}],"cooldown":"5 min easy walk, hip flexor stretch"}'
```

3. **Read the result** You get plain JSON back, ready for your script. A failed call costs nothing.

```
{
  "workout_id": "91374700",
  "client_id": "4821907",
  "date": "2026-10-15",
  "title": "Lower body A",
  "status": "upcoming",
  "items": 3,
  "due_date": "2026-10-18"
}
```

## Why use Cotlet for TrueCoach?

**Built for agents**

- One MCP server for every app you connect.
- The same tools as a REST API for scripts and cron jobs.
- Works with Claude Code, Codex and Cursor.

**Your login stays yours**

- You sign in to TrueCoach yourself. We keep only the session, encrypted with AES-256.
- The model never sees a login.
- No stored passwords, no CAPTCHA solving, no MFA bypass.

**You stay in control**

- Pick read only, or read and write.
- Anything that reaches other people waits for your OK, unless you switch it off per tool.
- Revoke access in one click.

**Kept working for you**

- We test every integration daily.
- When TrueCoach changes, the tool pauses until we fix it.
- Failed calls cost nothing.

## Is there a TrueCoach MCP server on GitHub?

Zapier is the realistic option: it adds clients and reacts to four events. For everything else you work by hand in the TrueCoach web app. Cotlet covers the rest of the coach workflow with one key.

|  | Zapier | Cotlet |
|---|---|---|
| Setup | Connect TrueCoach in Zapier and build a Zap for each job | Request access, sign in to TrueCoach once, add one MCP server or API key |
| What it can do | Add a client; react to a new client, a group change, a created or completed workout | Read clients, workouts, results, metrics and messages; write workouts, programs, groups, metrics and messages |
| Reading data | Only events as they happen | On demand: any client, any date range |
| Plan needed | Pro or higher, per the TrueCoach help center | Whatever plan your TrueCoach account is on |
| Your TrueCoach session | Not used, Zapier connects with its own key | Encrypted in an EU vault, revoked in one click |
| When the app changes | Zapier maintains its connector | Our team tests it daily and fixes it; failed calls are free |
| Price | A Zapier plan on top of TrueCoach | Free 7-day trial with 5,000 credits, then credits per call |

### Which one fits you

**Pick Cotlet if**

- you are not a developer, or you do not want to maintain a server
- you need it to keep working when TrueCoach changes, without checking it yourself
- your agent or a script should run it on a schedule, also while your computer is off

**Pick an open-source server if**

- you are comfortable installing, updating and fixing it yourself
- you want the session to stay on your own computer
- you only need it now and then, from one MCP client

## How much does the TrueCoach API cost?

Free 7-day trial with 5,000 credits, no card needed. After that, the TrueCoach API comes with the Cotlet plan, from $29 a month for 3,000 credits, with no limit on apps. Each month's credits stay valid for 3 months, so unused credits add up.

| Size | Price | Credits / month | Per credit |
|---|---|---|---|
| Solo | $29/mo | 3,000 | about $0.0097 |
| Pro | $99/mo | 12,000 | about $0.0083 |
| Agency | $299/mo | 40,000 | $0.0075 |

Each successful call uses credits for the work it takes; failed calls and timeouts cost nothing. A hard spend cap is on by default. Authenticate with the `Authorization: Bearer` header. [See full pricing](https://cotlet.dev/pricing)

## How Cotlet holds your access

Cotlet hosts MCP servers and REST APIs for apps with no usable API. Your agent works in your own TrueCoach account.

- **Company details:** The legal name, address and registration numbers of the company behind Cotlet are in the Terms of service. [Terms](https://cotlet.dev/terms)
- **Your session:** You sign in to TrueCoach yourself, in your browser. We keep only the session, never your password: encrypted with AES-256 in an EU vault, isolated to your account and used only when your agent calls a TrueCoach tool you allowed. When it expires, your agent gives you a link to sign in again. [Security](https://cotlet.dev/security)
- **Revoking access:** Disconnect TrueCoach in your dashboard: the session is deleted and access ends at once. Actions that reach other people wait for your OK unless you switch that off per tool.
- **What we never do:** Store passwords, solve CAPTCHAs or bypass MFA.
- **TrueCoach's terms:** You use your own TrueCoach account and stay responsible for following TrueCoach's terms. Cotlet is independent and not affiliated with TrueCoach. [Terms](https://cotlet.dev/terms)
- **Contact:** Questions about the company, security or an app: [contact@cotlet.dev](mailto:contact@cotlet.dev)

## Frequently asked questions

**How do I get access?**

Request access and pick TrueCoach. Cotlet reviews each request and emails you your API key.

**Do I need to be technical?**

No. You sign in to TrueCoach once in your browser and paste one command into your agent, or one URL into n8n. Your agent can walk you through it. There is no server to install, update or fix.

**Is a hosted server safe? My TrueCoach session would leave my computer.**

Cotlet keeps your TrueCoach session encrypted with AES-256 in an EU vault, isolated to your account and used only for the tools you allow: read only, or read and write. The AI model never sees it, and you revoke it in one click. A local server keeps the same session in a file on your computer, readable by any program you run, and needs a fresh sign-in whenever it expires.

**Does it work on every TrueCoach plan?**

Cotlet signs in as you in the web app, so it does not need the Pro plan that the Zapier app needs per the TrueCoach help center. What you can use depends on your account, for example metrics and groups only if they are enabled for you.

**Can it add an In-Person client?**

Yes. create_client with client_type in_person adds the client without an email; TrueCoach sends no invitation and creates no client account for In-Person clients.

**Can my agent post or send messages in TrueCoach without asking me?**

No. Every call to create_client or send_message waits for your OK by default. For scheduled automations you can switch confirmation off per tool in your dashboard, for example only for approvals. create_workout, assign_program, unassign_program, add_client_to_group, update_metric runs without asking, because it sends nothing to anyone and one call undoes it.

**Can I use the TrueCoach API in n8n?**

Yes. Add https://cotlet.dev/mcp/v1 with your API key in n8n's MCP Client node, or call https://cotlet.dev/api/v1/truecoach/{tool} from the HTTP Request node.
