Live

Zen Planner logo

Zen Planner API and MCP server

zenplanner.com

Yes, but only for partners: Zen Planner has an API on the Daxko Partners portal, and its docs say "Contact your Daxko sales representative to request access" (checked 11 Oct 2026). Cotlet is a hosted MCP server and REST API for Zen Planner with 14 endpoints (8 read, 6 write): your AI agent signs in as you and does the work.

Endpoints
14 8 read, 6 write
Updated
How Cotlet connects your agent to Zen Planner
  1. Your agent

    Claude Code, Codex, Cursor or a script

  2. Cotlet

    MCP server and REST API · 14 endpoints

    cotlet.dev/mcp/v1

  3. Zen Planner logo

    Zen Planner

    Signed in as you on zenplanner.com

You sign in once. We never store your password.

Official API

Does Zen Planner have an official API?

Yes, but only for partners: Zen Planner has an API on the Daxko Partners portal, and its docs say "Contact your Daxko sales representative to request access" (checked 11 Oct 2026). Studios cannot create a key themselves in Zen Planner Studio.

What Zen Planner's own tools do compared with Cotlet
Task Zen Planner official Cotlet
Look up members and their memberships Partly Partner API only, via Daxko sales Yes
Reserve and cancel class spots Partly Partner API only, via Daxko sales Yes
Check members into a class Partly Partner API only, via Daxko sales Yes
Enroll a member in a membership Partly Partner API only, via Daxko sales Yes
Add prospects Partly Partner API can create, not list them Yes
List failed payments No Shown in Zen Planner reports, not in the API Yes
Revenue reports by membership type, class or instructor No Shown in Zen Planner reports, not in the API Yes
Promote a student to a new rank No Yes

Sources: Daxko Partners API documentation (Zen Planner API) · Zen Planner integrations · Zen Planner reporting and dashboards · Zen Planner help: preset automations (failed payment, absent member, new prospect) · Zen Planner Engage (add-on marketing automation)

Common use cases

What can an AI agent do in Zen Planner?

Cotlet is best for gym and studio owners and managers who want their AI agent to chase failed payments, book classes, check in rosters and pull revenue in Zen Planner without running or fixing a server.

  • Follow up on failed payments Runs: Weekly

    Every Monday, list last week's failed Zen Planner payments, sorted by what each member has to do to fix them, with phone numbers, and tell me which of those people are still coming to class. Your agent calls list_failed_payments, get_member and list_attendance.

  • Book members into classes

    Book Sarah Lee into tomorrow's 6:00 class. Your agent calls list_members, list_classes and book_class.

  • Find members who stopped coming Runs: Weekly

    Every Friday, find Zen Planner members who used to train at least twice a week but have not checked in for 14 days, and give me a call list for the coaches with their usual class. Your agent calls list_members, list_attendance and get_member.

  • Import leads as prospects

    Add the leads from open-house.csv to Zen Planner as prospects with source Open house. Skip anyone who is already in Zen Planner and show me the list before you add them. Your agent calls list_members, create_prospect and list_prospects.

  • Check in a class roster

    Check in everyone on the 9:00 kids class roster except Sam and Mia. Your agent calls get_class_roster and check_in_member.

  • Monthly revenue by membership type Runs: Monthly

    Compare September and August revenue by membership type. Your agent calls get_revenue_report.

Endpoints

What is the Zen Planner API?

Cotlet's Zen Planner API exposes 14 endpoints for your own Zen Planner account: list members, get member, list classes, get class roster, list attendance, list prospects, list failed payments, get revenue report, book class, cancel reservation, check in member, create prospect, enroll in membership and promote rank. The list_members endpoint returns people in your studio with status, email, phone and memberships. Each endpoint takes simple JSON inputs like person_id, from or to and works both as an MCP tool for agents and as a REST call for scripts.

All endpoints · 14 total

missing one? request an endpoint

  • POST

    list_members

    read

    Lists people in your studio, filtered by name or email, status or last change date. Each item has a person_id, contact details and the names of their active memberships. Pages hold up to 200 people; pass next_cursor back as cursor for the next page.

    POST /api/v1/zen-planner/list_members

    Input

    Input: list_members
    Parameter Type Description
    query string Name or email to search for.
    status enum member, prospect, alumni or all. Default: member.
    modified_after date Only people changed on or after this date.
    limit integer 1 to 200. Default: 50.
    cursor string Next page cursor from the previous call.

    Example response

    {
      "members": [
        {
          "person_id": "p253ac9b9",
          "name": "Sarah Lee",
          "status": "member",
          "email": "sarah.lee@example.com",
          "phone": "+1 555 0142",
          "memberships": [
            "Unlimited Monthly"
          ]
        }
      ],
      "next_cursor": null
    }
  • POST

    get_member

    read

    Returns one person with contact details, their memberships with start dates and the family members linked to the account. Use it to get a phone number or email before contacting someone.

    POST /api/v1/zen-planner/get_member

    Input

    Input: get_member
    Parameter Type Description
    person_id required string Person ID from list_members.

    Example response

    {
      "person_id": "p253ac9b9",
      "name": "Sarah Lee",
      "email": "sarah.lee@example.com",
      "phone": "+1 555 0142",
      "memberships": [
        {
          "membership_id": "ms_3310",
          "type": "Unlimited Monthly",
          "start_date": "2026-03-01"
        }
      ],
      "family": []
    }
  • POST

    list_classes

    read

    Returns the classes in a date range in start order, each with class_id, time, instructor, capacity and open spots. Filter by location or program to narrow the list. Use class_id with book_class and get_class_roster.

    POST /api/v1/zen-planner/list_classes

    Input

    Input: list_classes
    Parameter Type Description
    from required date First day.
    to date Last day. Default: same as from.
    location_id string Only classes at this location.
    program_id string Only classes of this program.

    Example response

    {
      "classes": [
        {
          "class_id": "c7e2a91f",
          "name": "CrossFit WOD",
          "starts_at": "2026-10-12T06:00:00-04:00",
          "instructor": "Coach Alex",
          "capacity": 12,
          "open_spots": 4
        }
      ]
    }
  • POST

    get_class_roster

    read

    Returns the people who reserved one class, each with a reservation_id and whether they are checked in. Use reservation_id with cancel_reservation and person_id with check_in_member.

    POST /api/v1/zen-planner/get_class_roster

    Input

    Input: get_class_roster
    Parameter Type Description
    class_id required string Class ID from list_classes.

    Example response

    {
      "class_id": "c4d8b1e0",
      "name": "Kids Karate",
      "starts_at": "2026-10-11T09:00:00-04:00",
      "roster": [
        {
          "reservation_id": "r_5501",
          "person_id": "p253ac9b9",
          "name": "Ava Lee",
          "checked_in": false
        },
        {
          "reservation_id": "r_5502",
          "person_id": "p77a1d03e",
          "name": "Sam Ortiz",
          "checked_in": false
        }
      ]
    }
  • POST

    list_attendance

    read

    Returns the classes one person checked into between two dates, newest first. An empty list means no visits in that range. Run it once per person.

    POST /api/v1/zen-planner/list_attendance

    Input

    Input: list_attendance
    Parameter Type Description
    person_id required string Person ID from list_members.
    from date Start date. Default: 30 days ago.
    to date End date. Default: today.

    Example response

    {
      "person_id": "p253ac9b9",
      "attendance": [
        {
          "class_id": "c3a90b12",
          "name": "CrossFit WOD",
          "checked_in_at": "2026-10-07T06:02:00-04:00"
        }
      ]
    }
  • POST

    list_prospects

    read

    Lists prospects in your studio, newest first, filtered by status, source or date added. Status values are the ones set up in your studio. Use it to skip leads that already exist before create_prospect.

    POST /api/v1/zen-planner/list_prospects

    Input

    Input: list_prospects
    Parameter Type Description
    status string Prospect status as set up in your studio.
    source string Lead source, e.g. Website or Walk-in.
    since date Only prospects added on or after this date.
    cursor string Next page cursor from the previous call.

    Example response

    {
      "prospects": [
        {
          "person_id": "p9be2c71a",
          "name": "Dana Ortiz",
          "source": "Open house",
          "status": "New",
          "added_on": "2026-10-09"
        }
      ],
      "next_cursor": null
    }
  • POST

    list_failed_payments

    read

    Returns the payments Zen Planner marks as failed in a date range, newest first, with member, amount, date and the reason shown in the report. It is not the past-due total, which Zen Planner counts separately. The total is the sum of the listed amounts.

    POST /api/v1/zen-planner/list_failed_payments

    Input

    Input: list_failed_payments
    Parameter Type Description
    from date Start date. Default: 7 days ago.
    to date End date. Default: today.
    location_id string Only this location.

    Example response

    {
      "payments": [
        {
          "person_id": "p253ac9b9",
          "name": "Sarah Lee",
          "amount": 129,
          "date": "2026-10-08",
          "reason": "Card declined"
        },
        {
          "person_id": "p41c7f0d2",
          "name": "Marcus Webb",
          "amount": 89,
          "date": "2026-10-06",
          "reason": "Expired card"
        }
      ],
      "total": 218,
      "currency": "USD"
    }
  • POST

    get_revenue_report

    read

    Returns revenue for one date range as Zen Planner reports it, grouped the way you choose. One call covers one period; compare two months with two calls. The total is the sum of the groups.

    POST /api/v1/zen-planner/get_revenue_report

    Input

    Input: get_revenue_report
    Parameter Type Description
    from required date Start date.
    to required date End date.
    group_by enum membership_type, class, instructor, location or retail. Default: membership_type.

    Example response

    {
      "from": "2026-09-01",
      "to": "2026-09-30",
      "group_by": "membership_type",
      "groups": [
        {
          "name": "Unlimited Monthly",
          "revenue": 18450
        },
        {
          "name": "3x Week",
          "revenue": 9200
        },
        {
          "name": "Drop-in",
          "revenue": 1350
        }
      ],
      "total": 29000,
      "currency": "USD"
    }
  • POST

    book_class

    write

    Reserves one spot in one class for one member and returns a reservation_id. The member is booked as your staff account does it in Zen Planner Studio. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/zen-planner/book_class

    Input

    Input: book_class
    Parameter Type Description
    class_id required string Class ID from list_classes.
    person_id required string Person ID from list_members.

    Example response

    {
      "reservation_id": "r_5510",
      "status": "reserved",
      "class": {
        "name": "CrossFit WOD",
        "starts_at": "2026-10-12T06:00:00-04:00",
        "instructor": "Coach Alex"
      },
      "open_spots_left": 3
    }
  • POST

    cancel_reservation

    write

    Cancels one reservation, which frees the spot. Get reservation_id from get_class_roster or book_class. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/zen-planner/cancel_reservation

    Input

    Input: cancel_reservation
    Parameter Type Description
    class_id required string Class ID from list_classes.
    reservation_id required string Reservation ID from get_class_roster.

    Example response

    {
      "reservation_id": "r_5510",
      "status": "cancelled"
    }
  • POST

    check_in_member

    write

    Checks one member into one class, which adds a visit to their attendance. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/zen-planner/check_in_member

    Input

    Input: check_in_member
    Parameter Type Description
    class_id required string Class ID from list_classes.
    person_id required string Person ID from list_members.

    Example response

    {
      "class_id": "c4d8b1e0",
      "person_id": "p253ac9b9",
      "status": "checked_in",
      "checked_in_at": "2026-10-11T09:04:00-04:00"
    }
  • POST

    create_prospect

    write

    Adds one prospect and returns its person_id. If your studio has lead follow-up workflows set up in Zen Planner, a new prospect can start them. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/zen-planner/create_prospect

    Input

    Input: create_prospect
    Parameter Type Description
    first_name required string First name.
    last_name required string Last name.
    email string Email address.
    phone string Phone number.
    source string Lead source, e.g. Open house.

    Example response

    {
      "person_id": "p9be2c71a",
      "status": "created",
      "name": "Dana Ortiz",
      "source": "Open house"
    }
  • POST

    enroll_in_membership

    write

    Adds a membership to a member from a given start date. Billing then follows the terms of that membership type in your studio, so this reaches money. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/zen-planner/enroll_in_membership

    Input

    Input: enroll_in_membership
    Parameter Type Description
    person_id required string Person ID from list_members.
    membership_type_id required string Membership type, e.g. Unlimited Monthly.
    start_date date Default: today.

    Example response

    {
      "membership_id": "ms_4402",
      "person_id": "p253ac9b9",
      "type": "Unlimited Monthly",
      "start_date": "2026-10-12",
      "status": "active"
    }
  • POST

    promote_rank

    write

    Records a new rank for a student from your own rank structure, as in Zen Planner's belt and skill tracking. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/zen-planner/promote_rank

    Input

    Input: promote_rank
    Parameter Type Description
    person_id required string Person ID from list_members.
    rank required string New rank name from your rank structure.
    promoted_on date Promotion date. Default: today.

    Example response

    {
      "person_id": "p77a1d03e",
      "rank": "Yellow Belt",
      "promoted_on": "2026-10-11",
      "status": "promoted"
    }

Setup

How do I connect Zen Planner to Claude Code, Codex or Cursor?

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

Connect Zen Planner over MCP

  1. 1

    Create an account

    Sign up and add Zen Planner in the console. Your API key is there too.

  2. 2

    Sign in to Zen Planner once

    Open the connect page from the console and sign in to Zen Planner the way you always do. We keep the session, never your password, and you can revoke it anytime.

  3. 3

    Add Cotlet to your agent

    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"

    Paste the snippet for your client. The same server and key serve every app you connect, so you do this once.

  4. 4

    Ask your agent

    Prompt

    Every Monday, list last week's failed Zen Planner payments, sorted by what each member has to do to fix them, with phone numbers, and tell me which of those people are still coming to class.

    Ask in plain words. Your agent finds the Zen Planner 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.

Call Zen Planner over REST

  1. 1

    Export your API key

    Shell

    export COTLET_API_KEY="cotlet_..."

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

  2. 2

    Call a tool

    curl

    curl https://cotlet.dev/api/v1/zen-planner/book_class \
      -H "Authorization: Bearer $COTLET_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"class_id":"c7e2a91f","person_id":"p253ac9b9"}'

    Every tool is a POST endpoint at /api/v1/zen-planner/{tool}. Send its parameters as JSON, exactly as listed in the endpoints above.

  3. 3

    Read the result

    Example response · book_class

    {
      "reservation_id": "r_5510",
      "status": "reserved",
      "class": {
        "name": "CrossFit WOD",
        "starts_at": "2026-10-12T06:00:00-04:00",
        "instructor": "Coach Alex"
      },
      "open_spots_left": 3
    }

    You get plain JSON back, ready for your script. A failed call costs nothing.

Why Cotlet

Why use Cotlet for Zen Planner? Hosted, safe and kept working.

  • 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 Zen Planner 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 Zen Planner changes, the tool pauses until we fix it.
    • Failed calls cost nothing.

Alternatives

Is there a Zen Planner MCP server on GitHub?

The official route is the Daxko partner API: you ask a Daxko sales rep for credentials, build the integration yourself, and it does not cover failed payments or revenue reports. Cotlet works in your own staff account with no partner agreement, and our team keeps it working.

Cotlet compared with a Daxko partner API
Daxko partner API Cotlet
Access Credentials only through a Daxko sales rep, under a partner agreement Request access, then sign in to Zen Planner once in your browser
Whose account A partner integration, set up by developers Your own staff account, the whole studio
Failed payments and revenue Not in the API; read them in Zen Planner reports list_failed_payments and get_revenue_report
Setup and upkeep You build, host and maintain the code that calls it Hosted: one MCP server or API key, nothing to maintain
When Zen Planner changes You update your own code Our team tests it daily and fixes it for you; failed calls are free
Where it runs Wherever you host your code Claude Code, Codex, Cursor, n8n and scripts, also on a schedule
Price Set in your Daxko agreement 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 Zen Planner 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

For AI agents

Cotlet for Zen Planner in plain text The facts on this page in one block: status, endpoints, access, pricing, contact.

Endpoint health

verified 2h ago

  • list_members passing
  • get_member passing
  • list_classes passing
  • get_class_roster passing
  • list_attendance passing

+ 9 more endpoints

14/14 passing latest check self-healing

zen-planner.txt

Yes, but only for partners: Zen Planner has an API on the Daxko Partners portal, and its docs say "Contact your Daxko sales representative to request access" (checked 11 Oct 2026). Studios cannot create a key themselves in Zen Planner Studio.
Cotlet provides a hosted MCP server and REST API for Zen Planner: 14 tools (8 read, 6 write).
Access       Request access at https://cotlet.dev/app/signup?app=zen-planner; we email the API key.

MCP server   https://cotlet.dev/mcp/v1
REST base    https://cotlet.dev/api/v1/zen-planner
Auth         Authorization: Bearer <COTLET_API_KEY>. Listing endpoints and schemas needs no key; calling an endpoint needs one.
Tools        list_members, get_member, list_classes, get_class_roster, list_attendance, list_prospects, list_failed_payments, get_revenue_report, book_class, cancel_reservation, check_in_member, create_prospect, enroll_in_membership, promote_rank
Confirm      book_class, cancel_reservation, check_in_member, create_prospect, enroll_in_membership, promote_rank (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/zen-planner-api-mcp-server.md

How access works:
1. The user requests access at https://cotlet.dev/app/signup?app=zen-planner (Zen Planner is pre-selected). Each request is reviewed and the API key is sent by email.
2. The user signs in to Zen Planner 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 Zen Planner 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 Zen Planner 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 Zen Planner's terms; Cotlet is not affiliated with Zen Planner.
Full page as Markdown

Automations

Can Zen Planner automations run on a schedule in n8n, Make or Zapier?

Yes. Cotlet does not replace your automation platform: it gives it a Zen Planner 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 follow up on failed payments, and the schedule runs on its own. Cotlet runs in the cloud, so it keeps going while your computer is off.

Where to run Zen Planner automations through Cotlet, and how to schedule them
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/zen-planner/{tool}. Schedule Trigger node.
Make HTTP module: POST https://cotlet.dev/api/v1/zen-planner/{tool} with an Authorization: Bearer header and a JSON body. Scenario schedule.
Zapier Webhooks by Zapier: POST https://cotlet.dev/api/v1/zen-planner/{tool} with the same header and body. Schedule by Zapier trigger.
Your own script POST https://cotlet.dev/api/v1/zen-planner/{tool} with your API key. cron or GitHub Actions.

Pricing & limits

How much does the Zen Planner API cost?

Free 7-day trial with 5,000 credits, no card needed. After that, the Zen Planner 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.

Cotlet plan sizes: price, monthly credits and price per credit
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.

About Cotlet

How Cotlet holds your access

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

Company details
The legal name, address and registration numbers of the company behind Cotlet are in the Terms of service. Terms
Your session
You sign in to Zen Planner 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 Zen Planner tool you allowed. When it expires, your agent gives you a link to sign in again. Security
Revoking access
Disconnect Zen Planner 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.
Zen Planner's terms
You use your own Zen Planner account and stay responsible for following Zen Planner's terms. Cotlet is independent and not affiliated with Zen Planner. Terms
Contact
Questions about the company, security or an app: contact@cotlet.dev
About Cotlet

Frequently asked questions

How do I get access?

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

Do I need to be technical?

No. You sign in to Zen Planner 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 Zen Planner session would leave my computer.

Cotlet keeps your Zen Planner 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.

Do I need Daxko API credentials?

No. Cotlet works in your own Zen Planner Studio staff account and does not use the Daxko partner API, whose credentials come only through a Daxko sales rep (checked 11 Oct 2026).

Can my agent post or send messages in Zen Planner without asking me?

No. Every call to book_class, cancel_reservation, check_in_member, create_prospect, enroll_in_membership or promote_rank waits for your OK by default. For scheduled automations you can switch confirmation off per tool in your dashboard, for example only for approvals.

Can I use the Zen Planner 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/zen-planner/{tool} from the HTTP Request node.

Give your agent access to Zen Planner.

Request access and pick it. We review each request and email you your API key. Free 7-day trial with 5,000 credits, no card needed.