ControlUp Users API

The Users API from ControlUp — 4 operation(s) for users.

Business capability
Identity & Access Management BC-620.20

Operations 6

GET /users/user-info Get current user information
GET /organizations/{orgId}/users List all users #
GET /organizations/{orgId}/users/{id} Retrieve a user #
PATCH /organizations/{orgId}/users/{id} Update a user #
DELETE /organizations/{orgId}/users/{id} Delete a user #
POST /organizations/{orgId}/users/{id}/revoke-api-keys Revoke a user’s API keys #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/controlup-users-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

controlup-users-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Controlup Users API
  version: '1.0'
  description: 'Operations tagged Users across 2 of this provider''s published API definitions: controlup-daas-iq-openapi.yml, controlup-dex-platform-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.controlup.com/daas-iq/v1
- url: https://api.controlup.com/v1
tags:
- name: Users
paths:
  /users/user-info:
    servers:
    - url: https://api.controlup.com/daas-iq/v1
    get:
      tags:
      - Users
      summary: Get current user information
      description: 'Returns the calling user''s identity, organization context, and permissions, read from the bearer token''s claims.

        Answers "who am I" and "which organization am I in"; it takes no user ID and cannot look anyone else up.'
      responses:
        '200':
          description: Successfully retrieved user information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserInfoDto'
              example:
                userId: user-123
                email: user@example.com
                name: John Doe
                firstName: John
                lastName: Doe
                region: us-east-1
                organizationId: 12345678-1234-1234-1234-123456789012
                organizationName: Example Corp
                organizationRegion: us
                isAdmin: false
                permissions:
                - CanViewSubscriptions
                - CanCreateSubscriptions
                tokenExpiresAt: '2024-01-01T12:00:00Z'
                tokenIssuedAt: '2024-01-01T06:00:00Z'
        '401':
          description: Unauthorized. User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Payment required. No active license for the organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden. User does not have permission to perform this action.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service unavailable. License status could not be verified. Try again later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - BearerAuth: []
      - CookieAuth: []
  /organizations/{orgId}/users:
    servers:
    - url: https://api.controlup.com/v1
    get:
      operationId: OrgUsersPublicController_getAll
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetUsersResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes__'
        '401':
          description: 'Unauthorized: Access is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__'
        '403':
          description: 'Forbidden: Access to this resource is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden__'
        '404':
          description: 'Not Found: The requested resource could not be found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound__'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError__'
      description: Returns a list of all users in your ControlUp organization, including users with a pending invitation.
      summary: List all users
      tags:
      - Users
      security:
      - apiKey: []
      parameters:
      - description: 'The page of results to return.

          The first page is page number 1.'
        in: query
        name: _page
        required: false
        schema:
          default: '1'
          format: int32
          type: integer
          minimum: 1
        example: 1
        style: form
      - description: The number of results returned per page.
        in: query
        name: _limit
        required: false
        schema:
          default: '10'
          format: int32
          type: integer
          minimum: 1
        example: 10
        style: form
      - description: Sorts results according to the specified field.
        in: query
        name: _sortBy
        required: false
        schema:
          default: id
          type: string
          enum:
          - id
          - createdAt
          - updatedAt
          - email
          - fullName
          - firstName
          - lastName
          - phone
          - avatar
          - region
          - eulaVersion
        example: id
        style: form
      - description: The sort order (ascending / descending) of the field specified by the `_sortBy` parameter.
        in: query
        name: _order
        required: false
        schema:
          default: asc
          type: string
          enum:
          - asc
          - desc
        example: asc
        style: form
      - description: 'A search filter that is applied to all fields.

          Only results that contain the specified string are returned.'
        in: query
        name: _search
        required: false
        schema:
          type: string
        style: form
      - description: Include additional information about related resources in the results.
        in: query
        name: _include
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/UserIncludes'
        style: form
      - description: The format of returned results.
        in: query
        name: _format
        required: false
        schema:
          default: json
          type: string
          enum:
          - json
          - xml
          - csv
        example: json
        style: form
      - description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
        in: path
        name: orgId
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
      - description: A search filter on the `phone` field.
        in: query
        name: phone
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/NonEmptyString'
        style: form
      - description: A search filter on the `fullName` field.
        in: query
        name: fullName
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/NonEmptyString'
        style: form
      - description: A search filter on the `lastName` field.
        in: query
        name: lastName
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/NonEmptyString'
        style: form
      - description: A search filter on the `firstName` field.
        in: query
        name: firstName
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/NonEmptyString'
        style: form
      - description: A search filter on the `email` field.
        in: query
        name: email
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/NonEmptyString'
        style: form
      - description: A search filter on the `id` field.
        in: query
        name: id
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/NonEmptyString'
        style: form
  /organizations/{orgId}/users/{id}:
    servers:
    - url: https://api.controlup.com/v1
    get:
      operationId: OrgUsersPublicController_getOneById
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetUserResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes__'
        '401':
          description: 'Unauthorized: Access is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__'
        '403':
          description: 'Forbidden: Access to this resource is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden__'
        '404':
          description: 'Not Found: The requested resource could not be found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound__'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError__'
      description: Returns details of a user.
      summary: Retrieve a user
      tags:
      - Users
      security:
      - apiKey: []
      parameters:
      - description: The format of returned results.
        in: query
        name: _format
        required: false
        schema:
          default: json
          type: string
          enum:
          - json
          - xml
          - csv
        example: json
        style: form
      - description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
        in: path
        name: orgId
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
      - description: 'ID of the user to retrieve.

          You can use [GET /users](orguserspubliccontroller_getall) to see the ID of each user.'
        in: path
        name: id
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
    patch:
      operationId: OrgUsersPublicController_update
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateUserResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes__'
        '401':
          description: 'Unauthorized: Access is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__'
        '403':
          description: 'Forbidden: Access to this resource is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden__'
        '404':
          description: 'Not Found: The requested resource could not be found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound__'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError__'
      description: Updates a user by its ID. Any parameters not passed are not changed.
      summary: Update a user
      tags:
      - Users
      security:
      - apiKey: []
      parameters:
      - description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
        in: path
        name: orgId
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
      - description: 'ID of the user to update.

          You can use [GET /users](orguserspubliccontroller_getall) to see the ID of each user.'
        in: path
        name: id
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateOrgUserSettings'
    delete:
      operationId: OrgUsersPublicController_delete
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIResponse_DeletedActionResponse_'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes__'
        '401':
          description: 'Unauthorized: Access is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__'
        '403':
          description: 'Forbidden: Access to this resource is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden__'
        '404':
          description: 'Not Found: The requested resource could not be found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound__'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError__'
      description: Deletes a user by its ID from the organization.
      summary: Delete a user
      tags:
      - Users
      security:
      - apiKey: []
      parameters:
      - description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
        in: path
        name: orgId
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
      - description: 'ID of the user.

          You can use [GET /users](orguserspubliccontroller_getall) to see the ID of each user.'
        in: path
        name: id
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
  /organizations/{orgId}/users/{id}/revoke-api-keys:
    servers:
    - url: https://api.controlup.com/v1
    post:
      operationId: OrgUsersPublicController_revoke
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIResponse_DeletedActionResponse_'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes__'
        '401':
          description: 'Unauthorized: Access is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__'
        '403':
          description: 'Forbidden: Access to this resource is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden__'
        '404':
          description: 'Not Found: The requested resource could not be found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound__'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError__'
      description: 'Revokes all API keys created by the specified user in the organization.

        Revoked API keys can no longer be used to access any data.'
      summary: Revoke a user’s API keys
      tags:
      - Users
      security:
      - apiKey: []
      parameters:
      - description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
        in: path
        name: orgId
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
      - description: 'ID of the user to delete.

          You can use [GET /users](orguserspubliccontroller_getall) to see the ID of each user.'
        in: path
        name: id
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
components:
  schemas:
    UUID:
      type: string
      format: uuid
      description: 'Stringified UUIDv4.

        See [RFC 4112](https://tools.ietf.org/html/rfc4122)'
      pattern: ^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$
    ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden_:
      properties:
        message:
          $ref: '#/components/schemas/ErrorMessage.Forbidden'
        code:
          $ref: '#/components/schemas/ErrorCode.Forbidden'
        status:
          $ref: '#/components/schemas/HttpStatusCode.FORBIDDEN'
        data:
          additionalProperties: true
          type: object
      required:
      - status
      - code
      - message
      type: object
    APIPaginatedResponse_UserPublic-Array_:
      allOf:
      - $ref: '#/components/schemas/APIResponse_UserPublic-Array_'
      - properties:
          metadata:
            allOf:
            - $ref: '#/components/schemas/PaginatedResponseMetadata'
            - additionalProperties: true
              type: object
        required:
        - metadata
        type: object
    LoginMethod:
      enum:
      - manual
      - azure
      - google
      - saml
      - drill_down
      type: string
    ErrorMessage.Forbidden:
      enum:
      - Forbidden
      type: string
    ErrorCode.Forbidden:
      enum:
      - 4
      type: number
    ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes_:
      properties:
        message:
          $ref: '#/components/schemas/BadRequestErrorMessages'
        code:
          $ref: '#/components/schemas/BadRequestErrorCodes'
        status:
          $ref: '#/components/schemas/HttpStatusCode.BAD_REQUEST'
        data:
          additionalProperties: true
          type: object
      required:
      - status
      - code
      - message
      type: object
    Partial_Omit_OrgUserSettings.roleIds__:
      properties:
        vdiDaasLdapLogin:
          type:
          - boolean
          - 'null'
          description: 'Whether VDI & DaaS LDAP authentication is enabled for the user.

            If LDAP authentication is enabled globally for your organization, it is possible to override the global setting and disable LDAP authentication for a specific user.'
        loginMethods:
          items:
            $ref: '#/components/schemas/LoginMethod'
          type: array
          description: 'The user’s allowed login methods.

            If a login method is allowed globally for your organization, it is possible to override the global login methods and remove an allowed login method for a specific user.'
        mfaType:
          allOf:
          - $ref: '#/components/schemas/MFAType'
          description: 'The user’s MFA method.

            The MFA method must be one of the allowed methods for your organization.'
        status:
          $ref: '#/components/schemas/UserStatusPublic'
          description: 'The user’s status.

            A user can sign in only if their status is active. A user’s status is pending if they are invited but haven’t accepted the invitation.'
      type: object
      description: Make all properties in T optional
    Pick_OrgUserSettings.Exclude_keyofOrgUserSettings.roleIds__:
      properties:
        vdiDaasLdapLogin:
          type:
          - boolean
          - 'null'
          description: 'Whether VDI & DaaS LDAP authentication is enabled for the user.

            If LDAP authentication is enabled globally for your organization, it is possible to override the global setting and disable LDAP authentication for a specific user.'
        loginMethods:
          items:
            $ref: '#/components/schemas/LoginMethod'
          type: array
          description: 'The user’s allowed login methods.

            If a login method is allowed globally for your organization, it is possible to override the global login methods and remove an allowed login method for a specific user.'
        mfaType:
          allOf:
          - $ref: '#/components/schemas/MFAType'
          description: 'The user’s MFA method.

            The MFA method must be one of the allowed methods for your organization.'
        status:
          $ref: '#/components/schemas/UserStatusPublic'
          description: 'The user’s status.

            A user can sign in only if their status is active. A user’s status is pending if they are invited but haven’t accepted the invitation.'
      required:
      - status
      - mfaType
      - loginMethods
      type: object
      description: From T, pick a set of properties whose keys are in the union K
    HttpStatusCode.NOT_FOUND:
      enum:
      - 404
      type: number
    GetUsersResponse:
      $ref: '#/components/schemas/APIPaginatedResponse_UserPublic-Array_'
      example:
        metadata:
          total: 10
          limitPerPage: 2
          currentPageNumber: 1
          currentPageSize: 2
          remaining: 8
        data:
        - id: 21d43122-53aa-4691-8cf2-1b57f6ee162c
          email: john.doe@controlup.com
          fullName: John Doe
          firstName: John
          lastName: Doe
          avatar: https://www.example.com/avatar/205e460b479e2e5b48aec07710c08d50.jpg
          phone: '+972546666666'
          region: us
          eulaVersion: '1'
          createdAt: '2024-04-29T23:34:00.909Z'
          updatedAt: '2024-07-01T08:19:57.501Z'
          roles:
          - id: 1
            name: Admin
            description: null
            isDefault: true
          - id: 234
            name: Help Desk Employee
            description: null
            isDefault: false
          settings:
            loginMethods:
            - manual
            - google
            - azure
            - saml
            vdiDaasLdapLogin: false
            mfaType: null
            status: active
        - id: 21d43122-53aa-4691-8cf2-1b57f6ee162c
          email: jane.doe@controlup.com
          fullName: Jane Doe
          firstName: Jane
          lastName: Doe
          avatar: https://www.example.com/avatar/205e460b479e2e5b48aec07710c08d50.jpg
          phone: '+972546666666'
          region: us
          eulaVersion: '1'
          createdAt: '2024-04-29T23:34:00.909Z'
          updatedAt: '2024-07-01T08:19:57.501Z'
          roles:
          - id: 2
            name: Editor
            description: null
            isDefault: true
          settings:
            loginMethods: null
            vdiDaasLdapLogin: null
            mfaType: null
            status: pending
    Region:
      enum:
      - us
      - eu
      - canadacentral
      type: string
    UpdateUserStatusPublic:
      enum:
      - active
      - disabled
      type: string
    UserStatusPublic:
      enum:
      - active
      - disabled
      - pending
      type: string
    ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__:
      properties:
        metadata:
          $ref: '#/components/schemas/ErrorResponseMetadata'
        error:
          $ref: '#/components/schemas/ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized_'
      required:
      - error
      - metadata
      type: object
    ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound_:
      properties:
        message:
          $ref: '#/components/schemas/ErrorMessage.NotFound'
        code:
          $ref: '#/components/schemas/ErrorCode.NotFound'
        status:
          $ref: '#/components/schemas/HttpStatusCode.NOT_FOUND'
        data:
          additionalProperties: true
          type: object
      required:
      - status
      - code
      - message
      type: object
    PaginatedResponseMetadata:
      properties:
        total:
          type: number
          format: double
          description: The total number of results across all pages.
        limitPerPage:
          type: number
          format: double
          description: The maximum number of results returned per page (set by the `_limit` parameter).
        currentPageNumber:
          type: number
          format: double
          description: The page of result returned (set by the `_page` parameter).
        currentPageSize:
          type: number
          format: double
          description: The number of results on the current page.
        remaining:
          type: number
          format: double
          description: The total number of results on all pages higher than the current page.
      required:
      - remaining
      - currentPageSize
      - currentPageNumber
      - limitPerPage
      - total
      type: object
      example:
        total: 18
        limitPerPage: 10
        currentPageNumber: 1
        currentPageSize: 10
        remaining: 8
    MFAType:
      enum:
      - sms
      - google_totp
      - microsoft_totp
      type: string
    ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized_:
      properties:
        message:
          $ref: '#/components/schemas/ErrorMessage.Unauthorized'
        code:
          $ref: '#/components/schemas/ErrorCode.Unauthorized'
        status:
          $ref: '#/components/schemas/HttpStatusCode.UNAUTHORIZED'
        data:
          additionalProperties: true
          type: object
      required:
      - status
      - code
      - message
      type: object
    ErrorResponse:
      required:
      - status
      - title
      - traceId
      type: object
      properties:
        type:
          type:
          - string
          - 'null'
          description: A URI reference that identifies the problem type.
        title:
          type: string
          description: A short, human-readable summary of the problem type.
        status:
          type: integer
          description: The HTTP status code.
          format: int32
        detail:
          type:
          - string
          - 'null'
          description: A human-readable explanation specific to this occurrence of the problem.
        instance:
          type:
          - string
          - 'null'
          description: A URI reference that identifies the specific occurrence of the problem.
        errors:
          type:
          - object
          - 'null'
          additionalProperties:
            type: array
            items:
              type: string
          description: 'Dictionary of field-specific validation errors (only present for validation failures).

            Key is the field name, value is an array of error messages for that field.'
        traceId:
          type: string
          description: Request ID (cu-request-id) for tracking and debugging purposes.
      additionalProperties: false
      description: 'Standard error body the API returns when a request fails validation or cannot be completed.

        Follows RFC 7807 Problem Details with additional `errors` and `traceId` fields.'
    ErrorCode.Unauthorized:
      enum:
      - 3
      type: number
    ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError_:
      properties:
        message:
          $ref: '#/components/schemas/ErrorMessage.InternalServerError'
        code:
          $ref: '#/components/schemas/ErrorCode.InternalServerError'
        status:
          $ref: '#/components/schemas/HttpStatusCode.INTERNAL_SERVER_ERROR'
        data:
          additionalProperties: true
          type: object
      required:
      - status
      - code
      - message
      type: object
    Omit_OrgUserSettings.roleIds_:
      $ref: '#/components/schemas/Pick_OrgUserSettings.Exclude_keyofOrgUserSettings.roleIds__'
      description: Construct a type with the properties of T except for those in type K.
    UserAndSettings:
      allOf:
      - $ref: '#/components/schemas/UserPublic'
      - properties:
          settings:
            $ref: '#/components/schemas/Partial_Omit_OrgUserSettings.roleIds__'
            description: User settings.
        type: object
    BadRequestErrorMessages:
      enum:
      - Bad Request
      - Invalid Params
      - Unique Field Violation
      type: string
    UserPublic:
      properties:
        id:
          type: string
          description: ID of the user.
        email:
          type: string
          description: The user’s email address.
        fullName:
          type: string
          description: The user’s full name.
        firstName:
          type: string
          description: The user’s first name.
        lastName:
          type: string
          description: The user’s last name.
        phone:
          type: string
          description: The user’s phone number. This can be used for MFA.
        avatar:
          type: string
          description: The user’s avatar. This feature is not currently used.
        region:
          $ref: '#/components/schemas/Region'
          description: Th

# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/controlup/refs/heads/main/openapi/controlup-users-api-openapi.yml