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 ` where `` 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 ` where `` 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 ` where `` 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 ` where `` 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 ` where `` 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)