Cal.com Orgs / Users API
The Orgs / Users API from Cal.com — 2 operation(s) for orgs / users.
The Orgs / Users API from Cal.com — 2 operation(s) for orgs / users.
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-users-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 / Users API
description: ''
version: 1.0.0
contact: {}
servers: []
tags:
- name: Orgs / Users
paths:
/v2/organizations/{orgId}/users:
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: OrganizationsUsersController_getOrganizationsUsers
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: The number of items to return
schema:
minimum: 1
maximum: 1000
example: 10
type: number
- name: skip
required: false
in: query
description: The number of items to skip
schema:
minimum: 0
example: 0
type: number
- name: emails
required: false
in: query
description: The email address or an array of email addresses to filter by
schema:
example:
- user1@example.com
- user2@example.com
type: array
items:
type: string
- name: assignedOptionIds
required: false
in: query
description: Filter by assigned attribute option ids. ids must be separated by a comma.
schema:
minItems: 1
example: ?assignedOptionIds=aaaaaaaa-bbbb-cccc-dddd-eeeeee1eee,aaaaaaaa-bbbb-cccc-dddd-eeeeee2eee
type: array
items:
type: string
- name: attributeQueryOperator
required: false
in: query
description: Query operator used to filter assigned options, AND by default.
schema:
default: AND
example: NONE
type: string
enum:
- OR
- AND
- NONE
- name: teamIds
required: false
in: query
description: Filter by teamIds. Team ids must be separated by a comma.
schema:
minItems: 1
example: ?teamIds=100,200
type: array
items:
type: number
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetOrganizationUsersResponseDTO'
summary: Get all users
tags:
- Orgs / Users
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.
This endpoint creates a brand-new Cal.com user account and attaches them to the organization. If the email already belongs to an existing Cal.com user, the request fails with `409 Conflict`. When the user is already a member of this organization the message is `A user already exists with that email and is already a member of this organization`. When the user exists but is not a member, the message is `A user already exists with this email. Use POST /v2/organizations/{orgId}/memberships to add them to this organization.`. A common case is re-adding someone who was previously removed from the organization via the dashboard: the membership is gone, but the underlying Cal.com user account still exists.
To attach an existing Cal.com user to the organization, use `POST /v2/organizations/{orgId}/memberships` with the `email` field instead.'
operationId: OrganizationsUsersController_createOrganizationUser
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
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrganizationUserInput'
responses:
'201':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetOrganizationUserOutput'
summary: Create a user
tags:
- Orgs / Users
x-oauth-scopes:
- ORG_MEMBERSHIP_WRITE
x-platform-plan: ESSENTIALS
/v2/organizations/{orgId}/users/{userId}:
patch:
description: 'Required membership role: `org admin`. PBAC permission: `organization.editUsers`. 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: OrganizationsUsersController_updateOrganizationUser
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: userId
required: true
in: path
schema:
type: number
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateOrganizationUserInput'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetOrganizationUserOutput'
summary: Update a user
tags:
- Orgs / Users
x-oauth-scopes:
- ORG_MEMBERSHIP_WRITE
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: OrganizationsUsersController_deleteOrganizationUser
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: userId
required: true
in: path
schema:
type: number
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetOrganizationUserOutput'
summary: Delete a user
tags:
- Orgs / Users
x-oauth-scopes:
- ORG_MEMBERSHIP_WRITE
x-platform-plan: ESSENTIALS
components:
schemas:
UpdateOrganizationUserInput:
type: object
properties:
email:
type: string
format: email
description: User email address
example: user@example.com
username:
type: string
description: Username
example: user123
name:
type: string
minLength: 0
description: Full name of the user
example: Alice Smith
maxLength: 50
weekday:
type: string
description: Preferred weekday
example: Monday
brandColor:
type: string
pattern: ^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$
description: Brand color in HEX format
example: '#FFFFFF'
bio:
type: string
description: Bio
example: I am a bio
metadata:
type: object
additionalProperties: true
description: You can store any additional data you want here. Metadata must have at most 50 keys, each key up to 40 characters, and values up to 500 characters.
example:
key: value
darkBrandColor:
type: string
pattern: ^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$
description: Dark brand color in HEX format
example: '#000000'
hideBranding:
type: boolean
description: Hide branding
example: false
timeZone:
type: string
description: Time zone
example: America/New_York
theme:
type:
- string
- 'null'
description: Theme
example: dark
appTheme:
type:
- string
- 'null'
description: Application theme
example: light
timeFormat:
type: number
description: Time format
example: 24
defaultScheduleId:
type: number
minimum: 0
description: Default schedule ID
example: 1
locale:
type:
- string
- 'null'
default: en
description: Locale
example: en
avatarUrl:
type: string
description: Avatar URL
example: https://example.com/avatar.jpg
GetOrganizationUsersResponseDTO:
type: object
properties:
status:
enum:
- success
- error
type: string
example: success
data:
type: array
items:
$ref: '#/components/schemas/GetOrgUsersWithProfileOutput'
required:
- status
- data
GetOrgUsersWithProfileOutput:
type: object
properties:
id:
type: number
description: The ID of the user
example: 1
uuid:
type: string
format: uuid
description: The UUID of the user
example: 3f2504e0-4f89-41d3-9a0c-0305e82c3301
username:
type:
- string
- 'null'
description: The username of the user
example: john_doe
name:
type:
- string
- 'null'
description: The name of the user
example: John Doe
email:
type: string
description: The email of the user
example: john@example.com
emailVerified:
format: date-time
type:
- string
- 'null'
description: The date when the email was verified
example: '2022-01-01T00:00:00Z'
bio:
type:
- string
- 'null'
description: The bio of the user
example: I am a software developer
avatarUrl:
type:
- string
- 'null'
description: The URL of the user's avatar
example: https://example.com/avatar.jpg
timeZone:
type: string
description: The time zone of the user
example: America/New_York
weekStart:
type: string
description: The week start day of the user
example: Monday
appTheme:
type:
- string
- 'null'
description: The app theme of the user
example: light
theme:
type:
- string
- 'null'
description: The theme of the user
example: default
defaultScheduleId:
type:
- number
- 'null'
description: The ID of the default schedule for the user
example: 1
locale:
type:
- string
- 'null'
description: The locale of the user
example: en-US
timeFormat:
type:
- number
- 'null'
description: The time format of the user
example: 12
hideBranding:
type: boolean
description: Whether to hide branding for the user
example: false
brandColor:
type:
- string
- 'null'
description: The brand color of the user
example: '#ffffff'
darkBrandColor:
type:
- string
- 'null'
description: The dark brand color of the user
example: '#000000'
allowDynamicBooking:
type:
- boolean
- 'null'
description: Whether dynamic booking is allowed for the user
example: true
createdDate:
format: date-time
type: string
description: The date when the user was created
example: '2022-01-01T00:00:00Z'
verified:
type:
- boolean
- 'null'
description: Whether the user is verified
example: true
invitedTo:
type:
- number
- 'null'
description: The ID of the user who invited this user
example: 1
metadata:
type: object
additionalProperties: true
example:
key: value
profile:
description: organization user profile, contains user data within the organizaton context
allOf:
- $ref: '#/components/schemas/ProfileOutput'
required:
- id
- uuid
- email
- timeZone
- weekStart
- hideBranding
- createdDate
- profile
CreateOrganizationUserInput:
type: object
properties:
email:
type: string
format: email
description: User email address
example: user@example.com
username:
type: string
description: Username
example: user123
name:
type: string
minLength: 0
description: Full name of the user
example: Alice Smith
maxLength: 50
weekday:
type: string
description: Preferred weekday
example: Monday
brandColor:
type: string
pattern: ^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$
description: Brand color in HEX format
example: '#FFFFFF'
bio:
type: string
description: Bio
example: I am a bio
metadata:
type: object
additionalProperties: true
description: You can store any additional data you want here. Metadata must have at most 50 keys, each key up to 40 characters, and values up to 500 characters.
example:
key: value
darkBrandColor:
type: string
pattern: ^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$
description: Dark brand color in HEX format
example: '#000000'
hideBranding:
type: boolean
description: Hide branding
example: false
timeZone:
type: string
description: Time zone
example: America/New_York
theme:
type:
- string
- 'null'
description: Theme
example: dark
appTheme:
type:
- string
- 'null'
description: Application theme
example: light
timeFormat:
type: number
description: Time format
example: 24
defaultScheduleId:
type: number
minimum: 0
description: Default schedule ID
example: 1
locale:
type:
- string
- 'null'
default: en
description: Locale
example: en
avatarUrl:
type: string
description: Avatar URL
example: https://example.com/avatar.jpg
organizationRole:
default: MEMBER
enum:
- MEMBER
- ADMIN
- OWNER
type: string
autoAccept:
type: boolean
default: true
description: Must be true to ensure the organization membership is created in accepted state. If false, the user will have a pending membership and will not be able to access the organization.
skipNotificationEmail:
type: boolean
default: false
description: If true, the signup notification email will not be sent to the new user.
required:
- email
GetOrganizationUserOutput:
type: object
properties:
status:
enum:
- success
- error
type: string
example: success
data:
$ref: '#/components/schemas/GetOrgUsersWithProfileOutput'
required:
- status
- data
ProfileOutput:
type: object
properties:
id:
type: number
description: The ID of the profile of user
example: 1
organizationId:
type: number
description: The ID of the organization of user
example: 1
userId:
type: number
description: The IDof the user
example: 1
username:
type:
- string
- 'null'
description: The username of the user within the organization context
example: john_doe
required:
- id
- organizationId
- userId
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)