Cal.com Orgs / Memberships API
The Orgs / Memberships API from Cal.com — 2 operation(s) for orgs / memberships.
The Orgs / Memberships API from Cal.com — 2 operation(s) for orgs / memberships.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/cal-com:cal-com-orgs-memberships-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Cal.com API v2 Orgs / Memberships API
description: ''
version: 1.0.0
contact: {}
servers: []
tags:
- name: Orgs / Memberships
paths:
/v2/organizations/{orgId}/memberships:
get:
description: 'Required membership role: `org admin`. PBAC permission: `organization.readMemberships`. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control. If accessed using an OAuth access token, the `ORG_MEMBERSHIP_READ` scope is required.'
operationId: OrganizationsMembershipsController_getAllMemberships
parameters:
- name: Authorization
in: header
description: For non-platform customers - value must be `Bearer <token>` where `<token>` is api key prefixed with cal_
required: false
schema:
type: string
- name: x-cal-secret-key
in: header
description: For platform customers - OAuth client secret key
required: false
schema:
type: string
- name: x-cal-client-id
in: header
description: For platform customers - OAuth client ID
required: false
schema:
type: string
- name: orgId
required: true
in: path
schema:
type: number
- name: take
required: false
in: query
description: Maximum number of items to return
schema:
minimum: 1
maximum: 250
default: 250
example: 25
type: number
- name: skip
required: false
in: query
description: Number of items to skip
schema:
minimum: 0
default: 0
example: 0
type: number
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetAllOrgMemberships'
summary: Get all memberships
tags:
- Orgs / Memberships
x-mcp:
name: get_org_memberships
guidance: List all memberships in an organization. Supports pagination with take/skip (take max 250).
x-oauth-scopes:
- ORG_MEMBERSHIP_READ
x-platform-plan: ESSENTIALS
post:
description: 'Required membership role: `org admin`. PBAC permission: `organization.invite`. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control. If accessed using an OAuth access token, the `ORG_MEMBERSHIP_WRITE` scope is required.
Two identifier modes are accepted in the request body:
1. **`userId`** — attach an existing user (by id) directly. Use when the caller already knows the Cal.com user id and just needs the membership row created/updated. No notification email is sent.
2. **`email`** — invite an existing Cal.com user (by email). Runs the same invite flow the dashboard uses; the user must already exist (if not, the request returns `404` — create them first via `POST /v2/organizations/{orgId}/users`). What happens next depends on the organization''s settings:
- **Auto-attach path.** When the organization is verified by Cal.com and the invitee''s email domain matches the organization''s configured auto-accept domain (both set by Cal.com during organization verification — not editable by the organization''s own admins), the user is added as an accepted member: their organization profile is created, the membership is created with `accepted: true`, and they receive a "you''ve been added to the organization" notification email.
- **Pending-invite path.** If either condition is not met, the user receives an "accept your invite" notification email and the membership is created with `accepted: false` until they accept it via the dashboard. No organization profile is created until acceptance.
Either way the response''s `accepted` value reflects the outcome, seat addition is recorded, and the new seat count is pushed to the billing provider.'
operationId: OrganizationsMembershipsController_createMembership
parameters:
- name: Authorization
in: header
description: For non-platform customers - value must be `Bearer <token>` where `<token>` is api key prefixed with cal_
required: false
schema:
type: string
- name: x-cal-secret-key
in: header
description: For platform customers - OAuth client secret key
required: false
schema:
type: string
- name: x-cal-client-id
in: header
description: For platform customers - OAuth client ID
required: false
schema:
type: string
- name: orgId
required: true
in: path
schema:
type: number
requestBody:
required: true
description: Either `userId` to attach an existing org user directly, or `email` to invite an existing Cal.com user via the dashboard's invite flow.
content:
application/json:
schema:
oneOf:
- title: Member by User ID
$ref: '#/components/schemas/CreateOrgMembershipDto'
- title: Member by Email
$ref: '#/components/schemas/CreateOrgMembershipByEmailDto'
responses:
'201':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrgMembershipOutput'
summary: Create a membership
tags:
- Orgs / Memberships
x-oauth-scopes:
- ORG_MEMBERSHIP_WRITE
x-platform-plan: ESSENTIALS
/v2/organizations/{orgId}/memberships/{membershipId}:
get:
description: 'Required membership role: `org admin`. PBAC permission: `organization.readMemberships`. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control. If accessed using an OAuth access token, the `ORG_MEMBERSHIP_READ` scope is required.'
operationId: OrganizationsMembershipsController_getOrgMembership
parameters:
- name: Authorization
in: header
description: For non-platform customers - value must be `Bearer <token>` where `<token>` is api key prefixed with cal_
required: false
schema:
type: string
- name: x-cal-secret-key
in: header
description: For platform customers - OAuth client secret key
required: false
schema:
type: string
- name: x-cal-client-id
in: header
description: For platform customers - OAuth client ID
required: false
schema:
type: string
- name: orgId
required: true
in: path
schema:
type: number
- name: membershipId
required: true
in: path
schema:
type: number
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetOrgMembership'
summary: Get a membership
tags:
- Orgs / Memberships
x-mcp:
name: get_org_membership
guidance: Get a specific organization membership by its numeric ID.
x-oauth-scopes:
- ORG_MEMBERSHIP_READ
x-platform-plan: ESSENTIALS
delete:
description: 'Required membership role: `org admin`. PBAC permission: `organization.remove`. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control. If accessed using an OAuth access token, the `ORG_MEMBERSHIP_WRITE` scope is required.'
operationId: OrganizationsMembershipsController_deleteMembership
parameters:
- name: Authorization
in: header
description: For non-platform customers - value must be `Bearer <token>` where `<token>` is api key prefixed with cal_
required: false
schema:
type: string
- name: x-cal-secret-key
in: header
description: For platform customers - OAuth client secret key
required: false
schema:
type: string
- name: x-cal-client-id
in: header
description: For platform customers - OAuth client ID
required: false
schema:
type: string
- name: orgId
required: true
in: path
schema:
type: number
- name: membershipId
required: true
in: path
schema:
type: number
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteOrgMembership'
summary: Delete a membership
tags:
- Orgs / Memberships
x-mcp:
name: delete_org_membership
guidance: Remove a membership from an organization. This action is irreversible — confirm with the user before proceeding.
x-oauth-scopes:
- ORG_MEMBERSHIP_WRITE
x-platform-plan: ESSENTIALS
patch:
description: 'Required membership role: `org admin`. PBAC permission: `organization.changeMemberRole`. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control. If accessed using an OAuth access token, the `ORG_MEMBERSHIP_WRITE` scope is required.'
operationId: OrganizationsMembershipsController_updateMembership
parameters:
- name: Authorization
in: header
description: For non-platform customers - value must be `Bearer <token>` where `<token>` is api key prefixed with cal_
required: false
schema:
type: string
- name: x-cal-secret-key
in: header
description: For platform customers - OAuth client secret key
required: false
schema:
type: string
- name: x-cal-client-id
in: header
description: For platform customers - OAuth client ID
required: false
schema:
type: string
- name: orgId
required: true
in: path
schema:
type: number
- name: membershipId
required: true
in: path
schema:
type: number
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateOrgMembershipDto'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateOrgMembership'
summary: Update a membership
tags:
- Orgs / Memberships
x-mcp:
name: update_org_membership
guidance: Update an organization membership. Can change role, accepted status, or impersonation settings.
x-oauth-scopes:
- ORG_MEMBERSHIP_WRITE
x-platform-plan: ESSENTIALS
components:
schemas:
DateAttribute:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
enum:
- date
description: Identifies a calendar-date attribute assignment.
option:
type: string
format: date
example: '2026-03-15'
description: Calendar date in YYYY-MM-DD format, with no time or time zone.
optionId:
type: string
description: ID of the stored attribute option containing this calendar date.
required:
- id
- name
- type
- option
- optionId
MultiSelectAttributeOption:
type: object
properties:
optionId:
type: string
option:
type: string
required:
- optionId
- option
TextAttribute:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
option:
type: string
optionId:
type: string
required:
- id
- name
- type
- option
- optionId
GetOrgMembership:
type: object
properties:
status:
enum:
- success
- error
type: string
example: success
data:
$ref: '#/components/schemas/OrganizationMembershipOutput'
required:
- status
- data
CreateOrgMembershipOutput:
type: object
properties:
status:
enum:
- success
- error
type: string
example: success
data:
$ref: '#/components/schemas/OrganizationMembershipOutput'
required:
- status
- data
MultiSelectAttribute:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
options:
type: array
items:
$ref: '#/components/schemas/MultiSelectAttributeOption'
required:
- id
- name
- type
- options
NumberAttribute:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
option:
type: number
optionId:
type: string
required:
- id
- name
- type
- option
- optionId
GetAllOrgMemberships:
type: object
properties:
status:
enum:
- success
- error
type: string
example: success
data:
$ref: '#/components/schemas/OrganizationMembershipOutput'
required:
- status
- data
CreateOrgMembershipDto:
type: object
properties:
userId:
type: number
accepted:
type: boolean
default: false
role:
default: MEMBER
enum:
- MEMBER
- OWNER
- ADMIN
type: string
description: If you are platform customer then managed users should only have MEMBER role.
disableImpersonation:
type: boolean
default: false
required:
- userId
- role
UpdateOrgMembership:
type: object
properties:
status:
enum:
- success
- error
type: string
example: success
data:
$ref: '#/components/schemas/OrganizationMembershipOutput'
required:
- status
- data
SingleSelectAttribute:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
option:
type: string
optionId:
type: string
required:
- id
- name
- type
- option
- optionId
UpdateOrgMembershipDto:
type: object
properties:
accepted:
type: boolean
role:
enum:
- MEMBER
- OWNER
- ADMIN
type: string
disableImpersonation:
type: boolean
MembershipUserOutputDto:
type: object
properties:
uuid:
type: string
format: uuid
example: 3f2504e0-4f89-41d3-9a0c-0305e82c3301
avatarUrl:
type: string
username:
type: string
name:
type: string
email:
type: string
bio:
type: string
metadata:
type: object
example:
key: value
required:
- uuid
- email
DeleteOrgMembership:
type: object
properties:
status:
enum:
- success
- error
type: string
example: success
data:
$ref: '#/components/schemas/OrganizationMembershipOutput'
required:
- status
- data
OrganizationMembershipOutput:
type: object
properties:
id:
type: number
userId:
type: number
teamId:
type: number
accepted:
type: boolean
role:
enum:
- MEMBER
- OWNER
- ADMIN
type: string
disableImpersonation:
type: boolean
user:
$ref: '#/components/schemas/MembershipUserOutputDto'
attributes:
type: array
items:
oneOf:
- title: Text
$ref: '#/components/schemas/TextAttribute'
- title: Date
$ref: '#/components/schemas/DateAttribute'
- title: Number
$ref: '#/components/schemas/NumberAttribute'
- title: Single Select
$ref: '#/components/schemas/SingleSelectAttribute'
- title: Multi-Select
$ref: '#/components/schemas/MultiSelectAttribute'
required:
- id
- userId
- teamId
- accepted
- role
- user
- attributes
CreateOrgMembershipByEmailDto:
type: object
properties:
email:
type: string
format: email
description: Email of an existing Cal.com user to invite to the organization.
role:
default: MEMBER
enum:
- MEMBER
- OWNER
- ADMIN
type: string
description: Role to assign to the invited user. If you are platform customer then managed users should only have MEMBER role.
required:
- email
- role
x-provenance:
method: harvested
publisher: Cal.com
source: https://cal.com/docs/api-reference/v2/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)