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