canonical: https://jentic.com/apis/calm.com/calm

# Calm Partner API

Jentic publishes the only available OpenAPI specification for the Calm Partner API, keeping it validated and agent-ready. Calm's B2B partner API gives employers, benefits platforms, and health plans a way to grant their users access to Calm's meditation and sleep content as part of an employee or member benefit. The API is intentionally narrow with three operations - POST /v0/authorize to issue a partner access token, POST /v0/b2b/users/link to link a partner user ID to a Calm subscription, and DELETE /v0/b2b/users/{partner_user_id} to revoke that link when an employee leaves. Authentication is a JWT bearer token obtained from the authorize endpoint.

## For AI agents

Authorise a partner access token, link an employee or member to a Calm subscription, and revoke that link when entitlements change through the Calm Partner API.

## Scope

Does not handle content delivery, meditation playback, or analytics on user engagement - use for B2B Calm subscription provisioning and revocation only.

## Capabilities

- Issue a partner JWT bearer token via POST /v0/authorize
- Link a partner user identifier to a Calm subscription via POST /v0/b2b/users/link
- Revoke an employee or member's Calm subscription via DELETE /v0/b2b/users/{partner_user_id}
- Wire Calm into employee onboarding and offboarding workflows
- Authenticate every business call with a JWT bearer token in the Authorization header

## Use cases

### Employee Benefit Onboarding

When a new hire's onboarding completes, the HR system calls POST /v0/authorize to obtain a partner JWT, then POST /v0/b2b/users/link with the new employee's partner user ID. The employee is now entitled to Calm's content under the employer's group subscription, and Calm bills the employer rather than the individual.

Example prompt: POST to /v0/authorize to get a partner JWT then POST to /v0/b2b/users/link with the new hire's partner user ID.

### Offboarding and Subscription Revocation

When an employee leaves, the HR system calls DELETE /v0/b2b/users/{partner_user_id} to revoke their Calm access. This keeps the employer's seat count accurate and prevents former employees from continuing to use the benefit. The revocation is immediate from the API's perspective, but Calm's grace period rules govern when the user actually loses content access.

Example prompt: DELETE /v0/b2b/users/{partner_user_id} for the leaving employee on the day their offboarding is finalised.

### Health Plan Member Provisioning

Health plans that offer Calm as a covered benefit use the same link and unlink flow keyed by member ID. The plan's enrolment system handles the lifecycle so members get access automatically when they enrol and lose access when their plan ends, without any manual coordination with Calm support.

Example prompt: On enrolment events, POST to /v0/b2b/users/link with the member ID; on disenrolment, DELETE the same partner_user_id.

### AI Agent Calm Provisioning via Jentic

Through Jentic, an HR or benefits agent searches for an intent like 'link a user to a Calm subscription' and is returned the matching operation along with its input schema. The agent fills in the partner user ID, executes the call, and never holds the partner JWT or the static credentials needed to mint it. Setup is under 30 minutes versus a day or two of direct integration.

Example prompt: Use Jentic search for 'link a user to a Calm subscription', load the /v0/b2b/users/link schema, and execute it with the new hire's partner user ID.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /v0/authorize | Issue a partner JWT bearer token |
| POST | /v0/b2b/users/link | Link a partner user ID to a Calm subscription |
| DELETE | /v0/b2b/users/{partner_user_id} | Revoke a partner user's Calm access |

## Key resources

- **Authentication** — Issue a partner JWT bearer token used to authorise subsequent calls.
- **Users** — Link and revoke partner user IDs against Calm subscriptions.

## Why Jentic

- **Setup:** Wiring the Calm Partner API by hand means minting a JWT bearer token from your static partner credentials, then calling the authorize and B2B user routes on auth.calm.com yourself. Through Jentic you install once, import Calm from the API Directory, store the partner credentials once, and your agent calls it.
- **Permission scoping:** Calm puts the partner user id in the URL path (/v0/b2b/users/{partner_user_id}), so a rule can pin your agent to specific users it may provision. You choose the operations it may call, so the delete operation that revokes a user's subscription is not included unless you add it.
- **Credential handling:** Your Calm partner credentials are stored once, encrypted, by your own Jentic One instance, which mints the bearer JWT and injects it at execution time. The static credentials and the live token never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'link a user to a Calm subscription' or 'revoke Calm access', and Jentic returns the matching Calm Partner operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **C-Me API** — C-Me handles identity verification; pair with Calm provisioning when entitlement requires confirming the employee's identity first.
- **CallerAPI** — CallerAPI validates phone numbers used for outreach about Calm benefit eligibility.
- **CallFire API** — CallFire delivers SMS and voice campaigns; useful for announcing Calm benefit availability to a workforce.

## FAQ

### Why is there no official OpenAPI spec for the Calm Partner API?

Calm publishes documentation at partner.calm.com/docs/api but does not host a downloadable OpenAPI specification on a developer portal. Jentic generates and maintains this spec so that AI agents and developers can call the Calm Partner API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Calm Partner API use?

The Calm Partner API uses a JWT bearer token in the Authorization header. The token is minted by POST /v0/authorize using the partner credentials Calm issues to the employer or health plan. Through Jentic, the static credentials are stored encrypted in the vault and the JWT is fetched on demand, so the agent never holds either secret.

### Can I link a new employee to a Calm subscription with this API?

Yes. POST to /v0/b2b/users/link with the partner JWT and the employee's partner user ID. After the call succeeds the employee is entitled to Calm's content under the employer's group subscription.

### What are the rate limits for the Calm Partner API?

The OpenAPI specification does not declare rate limits. Limits are negotiated as part of the partner agreement - for high-volume onboarding events, contact your Calm account manager before scheduling bulk link or unlink runs.

### How do I revoke an employee's Calm access through Jentic?

Run a Jentic search for 'revoke a Calm subscription', load the DELETE /v0/b2b/users/{partner_user_id} schema, and execute it with the leaving employee's partner user ID. Install the SDK with pip install jentic and use the async search, load, and execute pattern.

### Is the Calm Partner API free?

The Calm Partner API is only available to employers and health plans with a B2B contract. Pricing is set by Calm based on seat count and is not declared in the OpenAPI spec - contact Calm partner sales for current rates.

### Can I limit what my agent is allowed to do with the Calm Partner API?

Yes. Jentic One runs self-hosted, so your own rules decide which of the three operations the agent may call: issuing a partner JWT via POST /v0/authorize, linking a user via POST /v0/b2b/users/link, and revoking access via DELETE /v0/b2b/users/{partner_user_id}. You can leave the revoke operation out entirely unless you choose to grant it, and because the partner user ID sits in the URL path you can pin the agent to specific users it is permitted to provision. Your Calm partner credentials stay with your instance, which mints and injects the token at execution time so the agent never handles the secret.
