---
openapi: 3.0.3
info:
  title: Clerk Backend API
  x-logo:
    url: https://clerk.com/_next/image?url=%2Fimages%2Fclerk-logo.svg&w=96&q=75
    altText: Clerk docs
    href: https://clerk.com/docs
  contact:
    email: support@clerk.com
    name: Clerk Platform Team
    url: https://clerk.com/support
  description:
    The Clerk REST Backend API, meant to be accessed by backend servers.
    Please see https://clerk.com/docs for more information.
  version: v1
  termsOfService: https://clerk.com/terms
  license:
    name: MIT
    url: https://github.com/clerkinc/clerk-sdk-go/blob/main/LICENSE
externalDocs:
  url: https://clerk.com/docs
servers:
  - url: https://api.clerk.dev/v1
  - url: https://api.clerk.com/v1
security:
  - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
  parameters:
    LimitParameter:
      name: limit
      in: query
      description: |-
        Applies a limit to the number of results returned.
        Can be used for paginating the results together with `offset`.
        Must be an integer greater than zero and less than 500.
        By default, if not supplied, a limit of 10 is used.
      required: false
      schema:
        type: number
        default: 10
        minimum: 1
        maximum: 500
    OffsetParameter:
      name: offset
      in: query
      description: |-
        Skip the first `offset` results when paginating.
        Needs to be an integer greater or equal to zero.
        To be used in conjunction with `limit`.
      required: false
      schema:
        type: number
        default: 0
        minimum: 0
  schemas:
    Session:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - session
        id:
          type: string
        user_id:
          type: string
        client_id:
          type: string
        actor:
          type: object
          nullable: true
        status:
          type: string
          enum:
            - active
            - revoked
            - ended
            - expired
            - removed
            - abandoned
        last_active_organization_id:
          type: string
          nullable: true
        last_active_at:
          type: integer
        expire_at:
          type: integer
        abandon_at:
          type: integer
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
      required:
        - object
        - id
        - user_id
        - client_id
        - status
        - last_active_at
        - expire_at
        - abandon_at
        - updated_at
        - created_at
    Client:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - client
        id:
          type: string
          description: "String representing the identifier of the session.

            "
        session_ids:
          type: array
          items:
            type: string
        sessions:
          type: array
          items:
            "$ref": "#/components/schemas/Session"
        sign_in_attempt_id:
          type: string
          nullable: true
          deprecated: true
        sign_up_attempt_id:
          type: string
          nullable: true
          deprecated: true
        sign_in_id:
          type: string
          nullable: true
        sign_up_id:
          type: string
          nullable: true
        last_active_session_id:
          nullable: true
          type: string
          description: "Last active session_id.

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
      required:
        - object
        - id
        - session_ids
        - sessions
        - sign_in_attempt_id
        - sign_up_attempt_id
        - sign_in_id
        - sign_up_id
        - last_active_session_id
        - updated_at
        - created_at
    ClerkError:
      type: object
      properties:
        message:
          type: string
        long_message:
          type: string
        code:
          type: string
        meta:
          type: object
      required:
        - message
        - long_message
        - code
    ClerkErrors:
      type: object
      properties:
        errors:
          type: array
          items:
            "$ref": "#/components/schemas/ClerkError"
        meta:
          type: object
      required:
        - errors
    OTP:
      type: object
      additionalProperties: false
      properties:
        status:
          type: string
          enum:
            - unverified
            - verified
            - failed
            - expired
        strategy:
          type: string
          enum:
            - phone_code
            - email_code
        attempts:
          type: integer
        expire_at:
          type: integer
      required:
        - status
        - attempts
        - strategy
        - expire_at
    Admin:
      type: object
      additionalProperties: false
      properties:
        status:
          type: string
          enum:
            - verified
        strategy:
          type: string
          enum:
            - admin
        attempts:
          type: integer
          nullable: true
        expire_at:
          type: integer
          nullable: true
      required:
        - status
        - strategy
    IdentificationLink:
      type: object
      additionalProperties: false
      properties:
        type:
          type: string
          enum:
            - oauth_google
            - oauth_mock
        id:
          type: string
      required:
        - type
        - id
    EmailAddress:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - email_address
        email_address:
          type: string
        reserved:
          type: boolean
        verification:
          type: object
          nullable: true
          oneOf:
            - "$ref": "#/components/schemas/OTP"
            - "$ref": "#/components/schemas/Admin"
        linked_to:
          type: array
          items:
            "$ref": "#/components/schemas/IdentificationLink"
      required:
        - object
        - email_address
        - verification
        - linked_to
        - reserved
    DeletedObject:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
        id:
          type: string
        slug:
          type: string
        deleted:
          type: boolean
      required:
        - object
        - deleted
    PhoneNumber:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - phone_number
        phone_number:
          type: string
        reserved_for_second_factor:
          type: boolean
        default_second_factor:
          type: boolean
        reserved:
          type: boolean
        verification:
          type: object
          nullable: true
          oneOf:
            - "$ref": "#/components/schemas/OTP"
            - "$ref": "#/components/schemas/Admin"
        linked_to:
          type: array
          items:
            "$ref": "#/components/schemas/IdentificationLink"
        backup_codes:
          type: array
          items:
            type: string
          nullable: true
      required:
        - object
        - phone_number
        - verification
        - linked_to
        - reserved
    Template:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - template
        instance_id:
          nullable: true
          type: string
          description: the id of the instance the template belongs to
        resource_type:
          type: string
          description: whether this is a system (default) or user overridden) template
        template_type:
          type: string
          description: whether this is an email or SMS template
        name:
          type: string
          description: user-friendly name of the template
        slug:
          type: string
          description: machine-friendly name of the template
        position:
          type: integer
          description: position with the listing of templates
        can_revert:
          type: boolean
          description:
            whether this template can be reverted to the corresponding
            system default
        can_delete:
          type: boolean
          description: whether this template can be deleted
        subject:
          type: string
          description: email subject
          nullable: true
        markup:
          type: string
          description: the editor markup used to generate the body of the template
        body:
          type: string
          description: the template body before variable interpolation
        available_variables:
          type: array
          description:
            list of variables that are available for use in the template
            body
          items:
            type: string
        required_variables:
          type: array
          description: list of variables that must be contained in the template body
          items:
            type: string
        from_email_name:
          type: string
        delivered_by_clerk:
          type: boolean
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
    Web3Signature:
      type: object
      additionalProperties: false
      properties:
        status:
          type: string
          enum:
            - verified
        strategy:
          type: string
          enum:
            - web3_metamask_signature
        nonce:
          type: string
          enum:
            - nonce
        attempts:
          type: integer
          nullable: true
        expire_at:
          type: integer
          nullable: true
      required:
        - status
        - strategy
        - nonce
    Web3Wallet:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - web3_wallet
        web3_wallet:
          type: string
        verification:
          type: object
          nullable: true
          oneOf:
            - "$ref": "#/components/schemas/Web3Signature"
            - "$ref": "#/components/schemas/Admin"
      required:
        - object
        - web3_wallet
        - verification
    User:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - user
        external_id:
          nullable: true
          type: string
        primary_email_address_id:
          nullable: true
          type: string
        primary_phone_number_id:
          nullable: true
          type: string
        primary_web3_wallet_id:
          nullable: true
          type: string
        username:
          nullable: true
          type: string
        first_name:
          nullable: true
          type: string
        last_name:
          nullable: true
          type: string
        profile_image_url:
          type: string
          deprecated: true
        image_url:
          type: string
        public_metadata:
          type: object
        private_metadata:
          nullable: true
          type: object
        unsafe_metadata:
          type: object
        gender:
          nullable: true
          type: string
        birthday:
          nullable: true
          type: string
        email_addresses:
          type: array
          items:
            "$ref": "#/components/schemas/EmailAddress"
        phone_numbers:
          type: array
          items:
            "$ref": "#/components/schemas/PhoneNumber"
        web3_wallets:
          type: array
          items:
            "$ref": "#/components/schemas/Web3Wallet"
        password_enabled:
          type: boolean
        two_factor_enabled:
          type: boolean
        totp_enabled:
          type: boolean
        backup_code_enabled:
          type: boolean
        external_accounts:
          type: array
          items:
            type: object
        last_sign_in_at:
          type: integer
          format: int64
          nullable: true
          description: "Unix timestamp of last sign-in.

            "
        banned:
          type: boolean
          description: "Flag to denote whether user is banned or not.

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
    TotalCount:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - total_count
        total_count:
          type: integer
          format: int64
      required:
        - object
        - total_count
    Organization:
      type: object
      properties:
        object:
          type: string
          enum:
            - organization
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        members_count:
          type: integer
          nullable: true
        max_allowed_memberships:
          type: integer
        public_metadata:
          type: object
        private_metadata:
          type: object
        created_by:
          type: string
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
      required:
        - object
        - id
        - name
        - slug
        - max_allowed_memberships
        - public_metadata
        - private_metadata
        - created_at
        - updated_at
    OrganizationMembership:
      description: Hello world
      type: object
      properties:
        id:
          type: string
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - organization_membership
        role:
          type: string
          enum:
            - admin
            - basic_member
        created_at:
          type: integer
          format: int64
          description: Unix timestamp of creation.
        updated_at:
          type: integer
          format: int64
          description: Unix timestamp of last update.
        organization:
          type: object
          nullable: false
          allOf:
            - "$ref": "#/components/schemas/Organization"
        public_user_data:
          type: object
          additionalProperties: false
          properties:
            user_id:
              type: string
              nullable: false
            first_name:
              type: string
              nullable: true
            last_name:
              type: string
              nullable: true
            profile_image_url:
              type: string
              nullable: true
              deprecated: true
            image_url:
              type: string
              nullable: true
            identifier:
              type: string
              nullable: true
    OrganizationMemberships:
      type: object
      additionalProperties: false
      properties:
        data:
          type: array
          items:
            "$ref": "#/components/schemas/OrganizationMembership"
        total_count:
          type: integer
          format: int64
          description: "Total number of organization memberships

            "
      required:
        - data
        - total_count
    Email:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
            - email
        id:
          type: string
        slug:
          type: string
          nullable: true
        from_email_name:
          type: string
        email_address_id:
          type: string
          nullable: true
        to_email_address:
          type: string
        user_id:
          type: string
          nullable: true
        subject:
          type: string
        body:
          type: string
        body_plain:
          type: string
          nullable: true
        status:
          type: string
        data:
          type: object
          nullable: true
        delivered_by_clerk:
          type: boolean
      required:
        - object
        - id
        - from_email_name
        - email_address_id
        - to_email_address
        - subject
        - body
        - status
        - delivered_by_clerk
    SMSMessage:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
            - sms_message
        id:
          type: string
        slug:
          type: string
          nullable: true
        from_phone_number:
          type: string
        to_phone_number:
          type: string
        phone_number_id:
          type: string
          nullable: true
        user_id:
          type: string
          nullable: true
        message:
          type: string
        status:
          type: string
        data:
          type: object
          nullable: true
        delivered_by_clerk:
          type: boolean
      required:
        - object
        - id
        - from_phone_number
        - to_phone_number
        - phone_number_id
        - message
        - status
        - delivered_by_clerk
    Invitation:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
            - invitation
        id:
          type: string
        email_address:
          type: string
          format: email
        public_metadata:
          type: object
        revoked:
          type: boolean
          example: true
        status:
          type: string
          enum:
            - pending
            - accepted
            - revoked
          example: revoked
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
      required:
        - object
        - id
        - email_address
        - status
        - created_at
        - updated_at
    AllowlistIdentifier:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - allowlist_identifier
        id:
          type: string
        invitation_id:
          type: string
        identifier:
          type: string
          description: "An email address or a phone number.

            "
        identifier_type:
          type: string
          enum:
            - email_address
            - phone_number
            - web3_wallet
        instance_id:
          type: string
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
    BlocklistIdentifier:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - blocklist_identifier
        id:
          type: string
        identifier:
          type: string
          description:
            "An email address, email domain, phone number or web3 wallet.

            "
        identifier_type:
          type: string
          enum:
            - email_address
            - phone_number
            - web3_wallet
        instance_id:
          type: string
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
    BlocklistIdentifiers:
      type: object
      additionalProperties: false
      properties:
        data:
          type: array
          items:
            "$ref": "#/components/schemas/BlocklistIdentifier"
        total_count:
          type: integer
          format: int64
          description: "Total number of blocklist identifiers

            "
      required:
        - data
        - total_count
    ActorToken:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
            - actor_token
        id:
          type: string
        status:
          type: string
          enum:
            - pending
            - accepted
            - revoked
        user_id:
          type: string
        actor:
          type: object
        token:
          type: string
          nullable: true
        url:
          type: string
          nullable: true
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
      required:
        - object
        - id
        - user_id
        - actor
        - status
        - created_at
        - updated_at
    InstanceRestrictions:
      type: object
      properties:
        object:
          type: string
          description:
            String representing the object's type. Objects of the same
            type share the same value.
          enum:
            - instance_restrictions
        allowlist:
          type: boolean
        blocklist:
          type: boolean
    OrganizationSettings:
      type: object
      properties:
        object:
          type: string
          description:
            String representing the object's type. Objects of the same
            type share the same value.
          enum:
            - organization_settings
        enabled:
          type: boolean
        max_allowed_memberships:
          type: integer
      required:
        - object
        - enabled
        - max_allowed_memberships
    SvixURL:
      type: object
      additionalProperties: false
      properties:
        svix_url:
          type: string
      required:
        - svix_url
    JWTTemplate:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
            - jwt_template
        id:
          type: string
        name:
          type: string
        claims:
          type: object
        lifetime:
          type: integer
        allowed_clock_skew:
          type: integer
        custom_signing_key:
          type: boolean
        signing_algorithm:
          type: string
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
      required:
        - object
        - id
        - name
        - claims
        - lifetime
        - allowed_clock_skew
        - created_at
        - updated_at
    Organizations:
      type: object
      additionalProperties: false
      properties:
        data:
          type: array
          items:
            "$ref": "#/components/schemas/Organization"
        total_count:
          type: integer
          format: int64
          description: "Total number of organizations

            "
      required:
        - data
        - total_count
    OrganizationWithLogo:
      type: object
      allOf:
        - "$ref": "#/components/schemas/Organization"
        - type: object
          properties:
            logo_url:
              type: string
              deprecated: true
            image_url:
              type: string
          required:
            - logo_url
            - image_url
    OrganizationInvitation:
      description: An organization invitation
      type: object
      properties:
        id:
          type: string
        object:
          type: string
          description:
            "String representing the object's type. Objects of the same
            type share the same value.

            "
          enum:
            - organization_invitation
        email_address:
          type: string
        role:
          type: string
          enum:
            - admin
            - basic_member
        organization_id:
          type: string
        status:
          type: string
        created_at:
          type: integer
          format: int64
          description: Unix timestamp of creation.
        updated_at:
          type: integer
          format: int64
          description: Unix timestamp of last update.
    OrganizationInvitations:
      type: object
      additionalProperties: false
      properties:
        data:
          type: array
          items:
            "$ref": "#/components/schemas/OrganizationInvitation"
        total_count:
          type: integer
          format: int64
          description: "Total number of organization invitations

            "
      required:
        - data
        - total_count
    RedirectURL:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
            - redirect_url
        id:
          type: string
        url:
          type: string
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
      required:
        - object
        - id
        - url
        - created_at
        - updated_at
    SignInToken:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
            - sign_in_token
        id:
          type: string
        status:
          type: string
          enum:
            - pending
            - accepted
            - revoked
        user_id:
          type: string
        token:
          type: string
        url:
          type: string
          nullable: true
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
      required:
        - object
        - id
        - user_id
        - status
        - created_at
        - updated_at
    SignUp:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
            - sign_up_attempt
        id:
          type: string
        status:
          type: string
          enum:
            - missing_requirements
            - complete
            - abandoned
        required_fields:
          type: array
          items:
            type: string
        optional_fields:
          type: array
          items:
            type: string
        missing_fields:
          type: array
          items:
            type: string
        unverified_fields:
          type: array
          items:
            type: string
        verifications:
          type: object
        username:
          type: string
          nullable: true
        email_address:
          type: string
          nullable: true
        phone_number:
          type: string
          nullable: true
        web3_wallet:
          type: string
          nullable: true
        password_enabled:
          type: boolean
        first_name:
          type: string
          nullable: true
        last_name:
          type: string
          nullable: true
        unsafe_metadata:
          type: object
        public_metadata:
          type: object
        custom_action:
          type: boolean
        external_id:
          type: string
          nullable: true
        created_session_id:
          type: string
          nullable: true
        created_user_id:
          type: string
          nullable: true
        abandon_at:
          type: integer
        identification_requirements:
          type: array
          items:
            type: array
            items:
              type: string
        missing_requirements:
          type: array
          items:
            type: string
        email_address_verification:
          type: object
          nullable: true
          deprecated: true
        phone_number_verification:
          type: object
          nullable: true
          deprecated: true
        external_account_strategy:
          type: string
          nullable: true
        external_account_verification:
          type: object
          nullable: true
          deprecated: true
        external_account:
          type: object
      required:
        - object
        - id
        - status
        - password_enabled
        - custom_action
        - abandon_at
    OAuthApplication:
      type: object
      properties:
        object:
          type: string
          enum:
            - oauth_application
        id:
          type: string
        instance_id:
          type: string
        name:
          type: string
        client_id:
          type: string
        scopes:
          type: string
        callback_url:
          type: string
        authorize_url:
          type: string
        token_fetch_url:
          type: string
        user_info_url:
          type: string
        created_at:
          type: integer
          format: int64
          description: "Unix timestamp of creation.

            "
        updated_at:
          type: integer
          format: int64
          description: "Unix timestamp of last update.

            "
      required:
        - object
        - id
        - instance_id
        - name
        - client_id
        - scopes
        - callback_url
        - authorize_url
        - token_fetch_url
        - user_info_url
        - created_at
        - updated_at
    OAuthApplications:
      type: object
      additionalProperties: false
      properties:
        data:
          type: array
          items:
            "$ref": "#/components/schemas/OAuthApplication"
        total_count:
          type: integer
          format: int64
          description: "Total number of OAuth applications

            "
      required:
        - data
        - total_count
    OAuthApplicationWithSecret:
      allOf:
        - "$ref": "#/components/schemas/OAuthApplication"
        - type: object
          properties:
            client_secret:
              type: string
          required:
            - client_secret
  responses:
    Client.List:
      description: Success
      content:
        application/json:
          schema:
            type: array
            items:
              "$ref": "#/components/schemas/Client"
    ClerkErrors:
      description: Request was not successful
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ClerkErrors"
    AuthenticationInvalid:
      description: Authentication invalid
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ClerkErrors"
    UnprocessableEntity:
      description: Invalid request parameters
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ClerkErrors"
    Client:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/Client"
    ResourceNotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ClerkErrors"
    Session:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/Session"
    EmailAddress:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/EmailAddress"
    AuthorizationInvalid:
      description: Authorization invalid
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ClerkErrors"
    DeletedObject:
      description: Deleted Object
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/DeletedObject"
    PhoneNumber:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/PhoneNumber"
    Session.List:
      description: Success
      content:
        application/json:
          schema:
            type: array
            items:
              "$ref": "#/components/schemas/Session"
    Template.List:
      description: Success
      content:
        application/json:
          schema:
            type: array
            items:
              "$ref": "#/components/schemas/Template"
    Template:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/Template"
    PaymentRequired:
      description: Payment required
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ClerkErrors"
    User.List:
      description: Success
      content:
        application/json:
          schema:
            type: array
            items:
              "$ref": "#/components/schemas/User"
    User:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/User"
    User.Count:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/TotalCount"
    OrganizationMemberships:
      description: A list of organization memberships
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/OrganizationMemberships"
    Email:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/Email"
    SMSMessage:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/SMSMessage"
    Invitation.List:
      description: List of invitations
      content:
        application/json:
          schema:
            type: array
            items:
              "$ref": "#/components/schemas/Invitation"
    Invitation:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/Invitation"
    AllowlistIdentifier.List:
      description: Success
      content:
        application/json:
          schema:
            type: array
            items:
              "$ref": "#/components/schemas/AllowlistIdentifier"
    AllowlistIdentifier:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/AllowlistIdentifier"
    BlocklistIdentifier.List:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/BlocklistIdentifiers"
    BlocklistIdentifier:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/BlocklistIdentifier"
    InstanceSettings:
      description: InstanceSettings Server API
      content:
        application/json:
          schema:
            type: object
            properties:
              object:
                type: string
                description:
                  String representing the object's type. Objects of the
                  same type share the same value.
                enum:
                  - instance_settings
              id:
                type: string
              restricted_to_allowlist:
                type: boolean
              from_email_address:
                type: string
              progressive_sign_up:
                type: boolean
              enhanced_email_deliverability:
                type: boolean
    ActorToken:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ActorToken"
    InstanceRestrictions:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/InstanceRestrictions"
    OrganizationSettings:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/OrganizationSettings"
    SvixURL:
      description:
        Response that contains a temporary Svix URL to access management
        dashboard
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/SvixURL"
    JWTTemplate.List:
      description: List of JWT templates
      content:
        application/json:
          schema:
            type: array
            items:
              "$ref": "#/components/schemas/JWTTemplate"
    JWTTemplate:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/JWTTemplate"
    Organizations:
      description: A list of organizations
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/Organizations"
    Organization:
      description: An organization
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/Organization"
    OrganizationWithLogo:
      description: An organization with a logo URL.
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/OrganizationWithLogo"
    OrganizationInvitation:
      description: An organization invitation
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/OrganizationInvitation"
    OrganizationInvitations:
      description: A list of organization invitations
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/OrganizationInvitations"
    OrganizationMembership:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/OrganizationMembership"
    RedirectURL.List:
      description: List of Redirect URLs
      content:
        application/json:
          schema:
            type: array
            items:
              "$ref": "#/components/schemas/RedirectURL"
    RedirectURL:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/RedirectURL"
    SignInToken:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/SignInToken"
    SignUp:
      description: Success
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/SignUp"
    OAuthApplications:
      description: A list of OAuth applications
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/OAuthApplications"
    OAuthApplicationWithSecret:
      description: An OAuth application with client secret
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/OAuthApplicationWithSecret"
    OAuthApplication:
      description: An OAuth application
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/OAuthApplication"
tags:
  - name: Actor Tokens
    description: Allow your users to sign in on behalf of other users.
    externalDocs:
      url: https://clerk.com/docs/authentication/user-impersonation#actor-tokens
  - name: Allow-list / Block-list
    description: |-
      Allow-lists and Block-lists allow you to control who can sign up or sign in
      to your application, by restricting access based on the user's email
      address or phone number.
    externalDocs:
      url: https://clerk.com/docs/authentication/allowlist
  - name: Clients
    description:
      The Client object tracks sessions, as well as the state of any sign
      in and sign up attempts, for a given device.
    externalDocs:
      url: https://clerk.com/docs/reference/clerkjs/client
  - name: Email Addresses
    description:
      A user can be associated with one or more email addresses and allows
      them to be contacted via email.
    externalDocs:
      url: https://clerk.com/docs/reference/clerkjs/emailaddress
  - name: Emails
    description: |-
      The email object represents an email that has been sent to an email address.
      You can only send an email to email addresses that have been verified by a user.
      Only recommended for transactional emails.
  - name: Email & SMS Templates
    description:
      Email & SMS templates allow you to customize the theming and wording
      of emails & SMS messages that are sent by your instance.
    externalDocs:
      url: https://clerk.com/docs/authentication/email-sms-templates
  - name: Instance Settings
    description: Modify the settings of your instance.
  - name: Invitations
    description:
      Invitations allow you to invite someone to sign up to your application,
      via email.
    externalDocs:
      url: https://clerk.com/docs/authentication/invitations
  - name: JWKS
    description:
      Retrieve the JSON Web Key Set which can be used to verify the token
      signatures of the instance.
  - name: JWT Templates
    description: |-
      JWT Templates allow you to generate custom authentication tokens
      tied to authenticated sessions, enabling you to integrate with third-party
      services.
    externalDocs:
      url: https://clerk.com/docs/request-authentication/jwt-templates
  - name: OAuth Applications
    description:
      OAuth applications contain data for clients using Clerk as an OAuth2
      identity provider.
  - name: Organizations
    description:
      Organizations are used to group members under a common entity and provide
      shared access to resources.
    externalDocs:
      url: https://clerk.com/docs/organizations/overview
  - name: Organization Invitations
    description: Invite users to an organization.
    externalDocs:
      url: https://clerk.com/docs/organizations/invite-users
  - name: Organization Memberships
    description: Manage member roles in an organization.
    externalDocs:
      url: https://clerk.com/docs/organizations/manage-member-roles
  - name: Phone Numbers
    description:
      A user can be associated with one or more email addresses and allows
      them to be contacted via SMS.
    externalDocs:
      url: https://clerk.com/docs/reference/clerkjs/phonenumber
  - name: Redirect URLs
    description: |-
      Redirect URLs are whitelisted URLs that facilitate secure authentication flows in native applications (e.g. React Native, Expo).
      In these contexts, Clerk ensures that security-critical nonces are passed only to the whitelisted URLs.
  - name: Sessions
    description: |-
      The Session object is an abstraction over an HTTP session.
      It models the period of information exchange between a user and the server.
      Sessions are created when a user successfully goes through the sign in or sign up flows.
    externalDocs:
      url: https://clerk.com/docs/reference/clerkjs/session
  - name: Sign-in Tokens
    description: |-
      Sign-in tokens are JWTs that can be used to sign in to an application without specifying any credentials.
      A sign-in token can be used at most once and they can be consumed from the Frontend API using the `ticket` strategy.
  - name: SMS Messages
    description: |-
      SMS messages can be sent to verified phone numbers that belong to users.
      This functionality is only recommended for transactional SMS messages.
  - name: Users
    description:
      The user object represents a user that has successfully signed up to
      your application.
    externalDocs:
      url: https://clerk.com/docs/reference/clerkjs/user
  - name: Webhooks
    description:
      You can configure webhooks to be notified about various events that
      happen on your instance.
    externalDocs:
      url: https://clerk.com/docs/integration/webhooks
  - name: Miscellaneous
    description: Various endpoints that do not belong in any particular category.
  - name: Beta Features
    description: Modify instance settings that are currently in beta.
paths:
  "/public/demo_instance":
    post:
      security: []
      operationId: CreateDemoInstance
      summary: Create a demo development instance
      description:
        Creates a demo development instance and returns the corresponding
        Frontend/Backend API keys.
      tags:
        - Miscellaneous
      responses:
        "200":
          description: The API keys of the created instance.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  object:
                    type: string
                    enum:
                      - demo_dev_instance
                  frontend_api_key:
                    type: string
                  backend_api_key:
                    type: string
                  jwt_verification_key:
                    type: string
                    description:
                      The public key that can be used to verify the session
                      tokens of the created instance.
                  accounts_url:
                    type: string
                    description:
                      The URL of the hosted Accounts Portal of the created
                      instance.
                    format: uri
  "/public/interstitial":
    get:
      security: []
      summary: Returns the markup for the interstitial page
      description: |-
        The Clerk interstitial endpoint serves an html page that loads clerk.js in order to check the user's authentication state.
        It is used by Clerk SDKs when the user's authentication state cannot be immediately determined.
      operationId: GetPublicInterstitial
      tags:
        - Miscellaneous
      parameters:
        - name: frontendApi
          in: query
          required: false
          description: The Frontend API key of your instance
          schema:
            type: string
        - name: publishable_key
          in: query
          required: false
          description: The publishable key of your instance
          schema:
            type: string
      responses:
        "200":
          description: The interstitial page markup
        "400":
          description: A required query parameter is missing
  "/jwks":
    get:
      operationId: GetJWKS
      summary: Retrieve the JSON Web Key Set of the instance
      description: Retrieve the JSON Web Key Set of the instance
      tags:
        - JWKS
      responses:
        "200":
          description: The JSON Web Key Set
  "/clients":
    get:
      operationId: GetClientList
      tags:
        - Clients
      summary: List all clients
      description: |-
        Returns a list of all clients. The clients are returned sorted by creation date,
        with the newest clients appearing first.
      parameters:
        - "$ref": "#/components/parameters/LimitParameter"
        - "$ref": "#/components/parameters/OffsetParameter"
      responses:
        "200":
          "$ref": "#/components/responses/Client.List"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/clients/verify":
    post:
      operationId: VerifyClient
      tags:
        - Clients
      summary: Verify a client
      description: Verifies the client in the provided token
      requestBody:
        description: Parameters.
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                token:
                  type: string
                  description: A JWT Token that represents the active client.
      responses:
        "200":
          "$ref": "#/components/responses/Client"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/clients/{client_id}":
    get:
      operationId: GetClient
      tags:
        - Clients
      summary: Get a client
      description: Returns the details of a client.
      parameters:
        - name: client_id
          in: path
          description: Client ID.
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/Client"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/clients/{client_id}/last_active_session":
    get:
      operationId: GetClientLastActiveSession
      tags:
        - Clients
      summary: Get the last active session of a client
      description: Returns the details of the last active session of a client.
      parameters:
        - name: client_id
          in: path
          description: Client ID.
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/Session"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/email_addresses":
    post:
      operationId: CreateEmailAddress
      tags:
        - Email Addresses
      summary: Create an email address
      description: Create a new email address
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: string
                  description: The ID representing the user
                email_address:
                  type: string
                  description:
                    The new email address. Must adhere to the RFC 5322
                    specification for email address format.
                verified:
                  type: boolean
                  description: When created, the email address will be marked as verified.
                  nullable: true
                primary:
                  type: boolean
                  description: |-
                    Create this email address as the primary email address for the user.
                    Default: false, unless it is the first email address.
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/EmailAddress"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/email_addresses/{email_address_id}":
    get:
      operationId: GetEmailAddress
      tags:
        - Email Addresses
      summary: Retrieve an email address
      description: Returns the details of an email address.
      parameters:
        - name: email_address_id
          in: path
          description: The ID of the email address to retrieve
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/EmailAddress"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
    delete:
      operationId: DeleteEmailAddress
      tags:
        - Email Addresses
      summary: Delete an email address
      description: Delete the email address with the given ID
      parameters:
        - name: email_address_id
          in: path
          description: The ID of the email address to delete
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/DeletedObject"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
    patch:
      operationId: UpdateEmailAddress
      tags:
        - Email Addresses
      summary: Update an email address
      description: Updates an email address.
      parameters:
        - name: email_address_id
          in: path
          description: The ID of the email address to update
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                verified:
                  type: boolean
                  description: The email address will be marked as verified.
                  nullable: true
                primary:
                  type: boolean
                  description:
                    Set this email address as the primary email address
                    for the user.
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/EmailAddress"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/phone_numbers":
    post:
      operationId: CreatePhoneNumber
      tags:
        - Phone Numbers
      summary: Create a phone number
      description: Create a new phone number
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: string
                  description: The ID representing the user
                phone_number:
                  type: string
                  description:
                    The new phone number. Must adhere to the E.164 standard
                    for phone number format.
                verified:
                  type: boolean
                  description: When created, the phone number will be marked as verified.
                  nullable: true
                primary:
                  type: boolean
                  description: |-
                    Create this phone number as the primary phone number for the user.
                    Default: false, unless it is the first phone number.
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/PhoneNumber"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/phone_numbers/{phone_number_id}":
    get:
      operationId: GetPhoneNumber
      tags:
        - Phone Numbers
      summary: Retrieve a phone number
      description: Returns the details of a phone number
      parameters:
        - name: phone_number_id
          in: path
          description: The ID of the phone number to retrieve
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/PhoneNumber"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
    delete:
      operationId: DeletePhoneNumber
      tags:
        - Phone Numbers
      summary: Delete a phone number
      description: Delete the phone number with the given ID
      parameters:
        - name: phone_number_id
          in: path
          description: The ID of the phone number to delete
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/DeletedObject"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
    patch:
      operationId: UpdatePhoneNumber
      tags:
        - Phone Numbers
      summary: Update a phone number
      description: Updates a phone number
      parameters:
        - name: phone_number_id
          in: path
          description: The ID of the phone number to update
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                verified:
                  type: boolean
                  description: The phone number will be marked as verified.
                  nullable: true
                primary:
                  type: boolean
                  description:
                    Set this phone number as the primary phone number for
                    the user.
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/PhoneNumber"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/sessions":
    get:
      operationId: GetSessionList
      tags:
        - Sessions
      summary: List all sessions
      description: |-
        Returns a list of all sessions.
        The sessions are returned sorted by creation date, with the newest sessions appearing first.
      parameters:
        - name: client_id
          in: query
          required: false
          description: List sessions for the given client
          schema:
            type: string
        - name: user_id
          in: query
          required: false
          description: List sessions for the given user
          schema:
            type: string
        - name: status
          in: query
          required: false
          description: Filter sessions by the provided status
          schema:
            type: string
            enum:
              - abandoned
              - active
              - ended
              - expired
              - removed
              - replaced
              - revoked
        - "$ref": "#/components/parameters/LimitParameter"
        - "$ref": "#/components/parameters/OffsetParameter"
      responses:
        "200":
          "$ref": "#/components/responses/Session.List"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/sessions/{session_id}":
    get:
      operationId: GetSession
      tags:
        - Sessions
      summary: Retrieve a session
      description: Retrieve the details of a session
      parameters:
        - name: session_id
          in: path
          description: The ID of the session
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/Session"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/sessions/{session_id}/revoke":
    post:
      operationId: RevokeSession
      tags:
        - Sessions
      summary: Revoke a session
      description: |-
        Sets the status of a session as "revoked", which is an unauthenticated state.
        In multi-session mode, a revoked session will still be returned along with its client object, however the user will need to sign in again.
      parameters:
        - name: session_id
          in: path
          description: The ID of the session
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/Session"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/sessions/{session_id}/verify":
    post:
      operationId: VerifySession
      tags:
        - Sessions
      summary: Verify a session
      description:
        Returns the session if it is authenticated, otherwise returns an
        error.
      parameters:
        - name: session_id
          in: path
          description: The ID of the session
          required: true
          schema:
            type: string
      requestBody:
        description: Parameters.
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                token:
                  type: string
                  description: |-
                    The JWT that is sent via the `__session` cookie from your frontend.
                    Note: this JWT must be associated with the supplied session ID.
      responses:
        "200":
          "$ref": "#/components/responses/Session"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/sessions/{session_id}/tokens/{template_name}":
    post:
      operationId: CreateSessionTokenFromTemplate
      tags:
        - Sessions
      summary: Create a session token from a jwt template
      description:
        Creates a JSON Web Token(JWT) based on a session and a JWT Template
        name defined for your instance
      parameters:
        - name: session_id
          in: path
          description: The ID of the session
          required: true
          schema:
            type: string
        - name: template_name
          in: path
          description: The name of the JWT Template defined in your instance (e.g. `custom_hasura`).
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  object:
                    type: string
                    enum:
                      - token
                  jwt:
                    type: string
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/templates/{template_type}":
    get:
      operationId: GetTemplateList
      summary: List all templates
      description: |-
        Returns a list of all templates.
        The templates are returned sorted by position.
      tags:
        - Email & SMS Templates
      parameters:
        - name: template_type
          in: path
          description: The type of templates to list (email or SMS)
          required: true
          schema:
            type: string
            enum:
              - email
              - sms
      responses:
        "200":
          "$ref": "#/components/responses/Template.List"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/templates/{template_type}/{slug}":
    get:
      operationId: GetTemplate
      summary: Retrieve a template
      description: Returns the details of a template
      tags:
        - Email & SMS Templates
      parameters:
        - name: template_type
          in: path
          description: The type of templates to retrieve (email or SMS)
          required: true
          schema:
            type: string
            enum:
              - email
              - sms
        - name: slug
          in: path
          description: The slug (i.e. machine-friendly name) of the template to retrieve
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/Template"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
    put:
      operationId: UpsertTemplate
      summary: Update a template for a given type and slug
      description: Updates the existing template of the given type and slug
      tags:
        - Email & SMS Templates
      parameters:
        - name: template_type
          in: path
          description: The type of template to update
          required: true
          schema:
            type: string
            enum:
              - email
              - sms
        - name: slug
          in: path
          description: The slug of the template to update
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                name:
                  type: string
                  description: The user-friendly name of the template
                subject:
                  type: string
                  description: |-
                    The email subject.
                    Applicable only to email templates.
                  nullable: true
                markup:
                  type: string
                  description:
                    The editor markup used to generate the body of the
                    template
                  nullable: true
                body:
                  type: string
                  description: The template body before variable interpolation
                delivered_by_clerk:
                  type: boolean
                  description:
                    Whether Clerk should deliver emails or SMS messages
                    based on the current template
                  nullable: true
                from_email_name:
                  type: string
                  description: |-
                    The local part of the From email address that will be used for emails.
                    For example, in the address 'hello@example.com', the local part is 'hello'.
                    Applicable only to email templates.
      responses:
        "200":
          "$ref": "#/components/responses/Template"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/templates/{template_type}/{slug}/revert":
    post:
      operationId: RevertTemplate
      summary: Revert a template
      description: Reverts an updated template to its default state
      tags:
        - Email & SMS Templates
      parameters:
        - name: template_type
          in: path
          description: The type of template to revert
          required: true
          schema:
            type: string
            enum:
              - email
              - sms
        - name: slug
          in: path
          description: The slug of the template to revert
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/Template"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/templates/{template_type}/{slug}/preview":
    post:
      operationId: PreviewTemplate
      summary: Preview changes to a template
      description:
        Returns a preview of a template for a given template_type, slug
        and body
      tags:
        - Email & SMS Templates
      parameters:
        - name: template_type
          in: path
          description: The type of template to preview
          required: true
          schema:
            type: string
        - name: slug
          in: path
          description: The slug of the template to preview
          required: true
          schema:
            type: string
      requestBody:
        description: Required parameters
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                subject:
                  type: string
                  description: |-
                    The email subject.
                    Applicable only to email templates.
                  nullable: true
                body:
                  type: string
                  description: The template body before variable interpolation
                from_email_name:
                  type: string
                  description: |-
                    The local part of the From email address that will be used for emails.
                    For example, in the address 'hello@example.com', the local part is 'hello'.
                    Applicable only to email templates.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/users":
    get:
      operationId: GetUserList
      summary: List all users
      description: |-
        Returns a list of all users.
        The users are returned sorted by creation date, with the newest users appearing first.
      tags:
        - Users
      parameters:
        - name: email_address
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Returns users with the specified email addresses.
            Accepts up to 100 email addresses.
            Any email addresses not found are ignored.
          required: false
        - name: phone_number
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Returns users with the specified phone numbers.
            Accepts up to 100 phone numbers.
            Any phone numbers not found are ignored.
          required: false
        - name: external_id
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Returns users with the specified external ids.
            For each external id, the `+` and `-` can be
            prepended to the id, which denote whether the
            respective external id should be included or
            excluded from the result set.
            Accepts up to 100 external ids.
            Any external ids not found are ignored.
          required: false
        - name: username
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Returns users with the specified usernames.
            Accepts up to 100 usernames.
            Any usernames not found are ignored.
          required: false
        - name: web3_wallet
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Returns users with the specified web3 wallet addresses.
            Accepts up to 100 web3 wallet addresses.
            Any web3 wallet addressed not found are ignored.
          required: false
        - name: user_id
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Returns users with the user ids specified.
            For each user id, the `+` and `-` can be
            prepended to the id, which denote whether the
            respective user id should be included or
            excluded from the result set.
            Accepts up to 100 user ids.
            Any user ids not found are ignored.
          required: false
        - name: organization_id
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Returns users that have memberships to the
            given organizations.
            For each organization id, the `+` and `-` can be
            prepended to the id, which denote whether the
            respective organization should be included or
            excluded from the result set.
            Accepts up to 100 organization ids.
          required: false
        - name: query
          in: query
          description: |-
            Returns users that match the given query.
            For possible matches, we check the email addresses, phone numbers, usernames, web3 wallets, user ids, first and last names.
            The query value doesn't need to match the exact value you are looking for, it is capable of partial matches as well.
          schema:
            type: string
          required: false
        - "$ref": "#/components/parameters/LimitParameter"
        - "$ref": "#/components/parameters/OffsetParameter"
        - name: order_by
          in: query
          description: |-
            Allows to return users in a particular order.
            At the moment, you can order the returned users either by their `created_at` or `updated_at` timestamp.
            In order to specify the direction, you can use the `+/-` symbols prepended in the property to order by.
            For example, if you want users to be returned in descending order according to their `created_at` property, you can use `-created_at`.
            If you don't use `+` or `-`, then `+` is implied.
            Defaults to `-created_at`.
          schema:
            type: string
            default: "-created_at"
          required: false
      responses:
        "200":
          "$ref": "#/components/responses/User.List"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
    post:
      operationId: CreateUser
      summary: Create a new user
      description: |-
        Creates a new user. Your user management settings determine how you should setup your user model.

        Any email address and phone number created using this method will be marked as verified.

        Note: If you are performing a migration, check out our guide on [zero downtime migrations](https://clerk.com/docs/deployments/import-users).

        A rate limit rule of 20 requests per 10 seconds is applied to this endpoint.
      tags:
        - Users
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                external_id:
                  type: string
                  description: |-
                    The ID of the user as used in your external systems or your previous authentication solution.
                    Must be unique across your instance.
                  nullable: true
                first_name:
                  type: string
                  description: The first name to assign to the user
                  nullable: true
                last_name:
                  type: string
                  description: The last name to assign to the user
                  nullable: true
                email_address:
                  type: array
                  items:
                    type: string
                  description: |-
                    Email addresses to add to the user.
                    Must be unique across your instance.
                    The first email address will be set as the user's primary email address.
                phone_number:
                  type: array
                  items:
                    type: string
                  description: |-
                    Phone numbers to add to the user.
                    Must be unique across your instance.
                    The first phone number will be set as the user's primary phone number.
                web3_wallet:
                  type: array
                  items:
                    type: string
                  description: |-
                    Web3 wallets to add to the user.
                    Must be unique across your instance.
                    The first wallet will be set as the user's primary wallet.
                username:
                  type: string
                  description: |-
                    The username to give to the user.
                    It must be unique across your instance.
                  nullable: true
                password:
                  type: string
                  description: |-
                    The plaintext password to give the user.
                    Must be at least 8 characters long, and can not be in any list of hacked passwords.
                  nullable: true
                password_digest:
                  type: string
                  description: |-
                    In case you already have the password digests and not the passwords, you can use them for the newly created user via this property.
                    The digests should be generated with one of the supported algorithms.
                    The hashing algorithm can be specified using the `password_hasher` property.
                password_hasher:
                  type: string
                  description: |-
                    The hashing algorithm that was used to generate the password digest.
                    The algorithms we support at the moment are [bcrypt](https://en.wikipedia.org/wiki/Bcrypt), md5, pbkdf2_sha256, [pbkdf2_sha256_django](https://docs.djangoproject.com/en/4.0/topics/auth/passwords/), [scrypt_firebase](https://firebaseopensource.com/projects/firebase/scrypt/) and 2 [argon2](https://argon2.online/) variants, argon2i and argon2id.
                    Each of the above expects the incoming digest to be of a particular format.

                    More specifically:

                    **bcrypt:** The digest should be of the following form:

                    `$<algorithm version>$<cost>$<salt & hash>`

                    **md5:** The digest should follow the regular form e.g.:

                    `5f4dcc3b5aa765d61d8327deb882cf99`

                    **pbkdf2_sha256:** This is the PBKDF2 algorithm using the SHA256 hashing function. The format should be as follows:

                    `pbkdf2_sha256$<iterations>$<salt>$<hash>`

                    Note: Both the salt and the hash are expected to be base64-encoded.

                    **pbkdf2_sha256_django:** This is the Django-specific variant of PBKDF2 and the digest should have the following format (as exported from Django):

                    `pbkdf2_sha256$<iterations>$<salt>$<hash>`

                    Note: The salt is expected to be un-encoded, the hash is expected base64-encoded.

                    **pbkdf2_sha1:** This is similar to pkbdf2_sha256_django, but with two differences:
                    1. uses sha1 instead of sha256
                    2. accepts the hash as a hex-encoded string

                    The format is the following:

                    `pbkdf2_sha1$<iterations>$<salt>$<hash-as-hex-string>`


                    **scrypt_firebase:** The Firebase-specific variant of scrypt.
                    The value is expected to have 6 segments separated by the $ character and include the following information:

                    _hash:_ The actual Base64 hash. This can be retrieved when exporting the user from Firebase.
                    _salt:_ The salt used to generate the above hash. Again, this is given when exporting the user.
                    _signer key:_ The base64 encoded signer key.
                    _salt separator:_ The base64 encoded salt separator.
                    _rounds:_ The number of rounds the algorithm needs to run.
                    _memory cost:_ The cost of the algorithm run

                    The first 2 (hash and salt) are per user and can be retrieved when exporting the user from Firebase.
                    The other 4 values (signer key, salt separator, rounds and memory cost) are project-wide settings and can be retrieved from the project's password hash parameters.

                    Once you have all these, you can combine it in the following format and send this as the digest in order for Clerk to accept it:

                    `<hash>$<salt>$<signer key>$<salt separator>$<rounds>$<memory cost>`

                    **argon2i:** Algorithms in the argon2 family generate digests that encode the following information:

                    _version (v):_ The argon version, version 19 is assumed
                    _memory (m):_ The memory used by the algorithm (in kibibytes)
                    _iterations (t):_ The number of iterations to perform
                    _parallelism (p):_ The number of threads to use

                    Parts are demarcated by the `$` character, with the first part identifying the algorithm variant.
                    The middle part is a comma-separated list of the encoding options (memory, iterations, parallelism).
                    The final part is the actual digest.

                    `$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc`

                    **argon2id:** See the previous algorithm for an explanation of the formatting.

                    For the argon2id case, the value of the algorithm in the first part of the digest is `argon2id`:

                    `$argon2id$v=19$m=64,t=4,p=8$Z2liZXJyaXNo$iGXEpMBTDYQ8G/71tF0qGjxRHEmR3gpGULcE93zUJVU`

                    If you need support for any particular hashing algorithm, [please let us know](https://clerk.com/support).
                  enum:
                    - bcrypt
                    - md5
                    - pbkdf2_sha256
                    - pbkdf2_sha256_django
                    - pbkdf2_sha1
                    - scrypt_firebase
                    - argon2i
                    - argon2id
                skip_password_checks:
                  type: boolean
                  description: |-
                    When set to `true` all password checks are skipped.
                    It is recommended to use this method only when migrating plaintext passwords to Clerk.
                    Upon migration the user base should be prompted to pick stronger password.
                skip_password_requirement:
                  type: boolean
                  description: |-
                    When set to `true`, `password` is not required anymore when creating the user and can be omitted.
                    This is useful when you are trying to create a user that doesn't have a password, in an instance that is using passwords.
                    Please note that you cannot use this flag if password is the only way for a user to sign into your instance.
                totp_secret:
                  type: string
                  description: |-
                    In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it.
                    Please note that currently the supported options are:
                    * Period: 30 seconds
                    * Code length: 6 digits
                    * Algorithm: SHA1
                backup_codes:
                  type: array
                  items:
                    type: string
                  description: |-
                    If Backup Codes are configured on the instance, you can provide them to enable it on the newly created user without the need to reset them.
                    You must provide the backup codes in plain format or the corresponding bcrypt digest.
                public_metadata:
                  type: object
                  description:
                    Metadata saved on the user, that is visible to both
                    your Frontend and Backend APIs
                private_metadata:
                  type: object
                  description:
                    Metadata saved on the user, that is only visible to
                    your Backend API
                unsafe_metadata:
                  type: object
                  description: |-
                    Metadata saved on the user, that can be updated from both the Frontend and Backend APIs.
                    Note: Since this data can be modified from the frontend, it is not guaranteed to be safe.
                created_at:
                  type: string
                  description:
                    A custom date/time denoting _when_ the user signed
                    up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`).
      responses:
        "200":
          "$ref": "#/components/responses/User"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/users/count":
    get:
      operationId: GetUsersCount
      summary: Count users
      description:
        Returns a total count of all users that match the given filtering
        criteria.
      tags:
        - Users
      parameters:
        - name: email_address
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Counts users with the specified email addresses.
            Accepts up to 100 email addresses.
            Any email addresses not found are ignored.
          required: false
        - name: phone_number
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Counts users with the specified phone numbers.
            Accepts up to 100 phone numbers.
            Any phone numbers not found are ignored.
          required: false
        - name: external_id
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Counts users with the specified external ids.
            Accepts up to 100 external ids.
            Any external ids not found are ignored.
          required: false
        - name: username
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Counts users with the specified usernames.
            Accepts up to 100 usernames.
            Any usernames not found are ignored.
          required: false
        - name: web3_wallet
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Counts users with the specified web3 wallet addresses.
            Accepts up to 100 web3 wallet addresses.
            Any web3 wallet addressed not found are ignored.
          required: false
        - name: user_id
          in: query
          schema:
            type: array
            items:
              type: string
          description: |-
            Counts users with the user ids specified.
            Accepts up to 100 user ids.
            Any user ids not found are ignored.
          required: false
        - name: query
          in: query
          description: |-
            Counts users that match the given query.
            For possible matches, we check the email addresses, phone numbers, usernames, web3 wallets, user ids, first and last names.
            The query value doesn't need to match the exact value you are looking for, it is capable of partial matches as well.
          schema:
            type: string
          required: false
      responses:
        "200":
          "$ref": "#/components/responses/User.Count"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/users/{user_id}":
    get:
      operationId: GetUser
      summary: Retrieve a user
      description: Retrieve the details of a user
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description: The ID of the user to retrieve
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/User"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
    patch:
      operationId: UpdateUser
      summary: Update a user
      description: |-
        Update a user's attributes.

        You can set the user's primary contact identifiers (email address and phone numbers) by updating the `primary_email_address_id` and `primary_phone_number_id` attributes respectively.
        Both IDs should correspond to verified identifications that belong to the user.

        You can remove a user's username by setting the username attribute to null or the blank string "".
        This is a destructive action; the identification will be deleted forever.
        Usernames can be removed only if they are optional in your instance settings and there's at least one other identifier which can be used for authentication.
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description: The ID of the user to update
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                external_id:
                  type: string
                  description: |-
                    The ID of the user as used in your external systems or your previous authentication solution.
                    Must be unique across your instance.
                  nullable: true
                first_name:
                  type: string
                  description: The first name to assign to the user
                  nullable: true
                last_name:
                  type: string
                  description: The last name to assign to the user
                  nullable: true
                primary_email_address_id:
                  type: string
                  description: |-
                    The ID of the email address to set as primary.
                    It must be verified, and present on the current user.
                primary_phone_number_id:
                  type: string
                  description: |-
                    The ID of the phone number to set as primary.
                    It must be verified, and present on the current user.
                primary_web3_wallet_id:
                  type: string
                  description: |-
                    The ID of the web3 wallets to set as primary.
                    It must be verified, and present on the current user.
                username:
                  type: string
                  description: |-
                    The username to give to the user.
                    It must be unique across your instance.
                  nullable: true
                profile_image_id:
                  type: string
                  description: The ID of the image to set as the user's profile image
                  nullable: true
                password:
                  type: string
                  description: |-
                    The plaintext password to give the user.
                    Must be at least 8 characters long, and can not be in any list of hacked passwords.
                  nullable: true
                totp_secret:
                  type: string
                  description: |-
                    In case TOTP is configured on the instance, you can provide the secret to enable it on the specific user without the need to reset it.
                    Please note that currently the supported options are:
                    * Period: 30 seconds
                    * Code length: 6 digits
                    * Algorithm: SHA1
                backup_codes:
                  type: array
                  items:
                    type: string
                  description: |-
                    If Backup Codes are configured on the instance, you can provide them to enable it on the specific user without the need to reset them.
                    You must provide the backup codes in plain format or the corresponding bcrypt digest.
                public_metadata:
                  type: object
                  description:
                    Metadata saved on the user, that is visible to both
                    your Frontend and Backend APIs
                private_metadata:
                  type: object
                  description:
                    Metadata saved on the user, that is only visible to
                    your Backend API
                unsafe_metadata:
                  type: object
                  description: |-
                    Metadata saved on the user, that can be updated from both the Frontend and Backend APIs.
                    Note: Since this data can be modified from the frontend, it is not guaranteed to be safe.
                created_at:
                  type: string
                  description:
                    A custom date/time denoting _when_ the user signed
                    up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`).
      responses:
        "200":
          "$ref": "#/components/responses/User"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
    delete:
      operationId: DeleteUser
      summary: Delete a user
      description: Delete the specified user
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description: The ID of the user to delete
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/DeletedObject"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/users/{user_id}/ban":
    post:
      operationId: BanUser
      summary: Ban a user
      description:
        Marks the given user as banned, which means that all their sessions
        are revoked and they are not allowed to sign in again.
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description: The ID of the user to ban
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/User"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
  "/users/{user_id}/unban":
    post:
      operationId: UnbanUser
      summary: Unban a user
      description: Removes the ban mark from the given user.
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description: The ID of the user to unban
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/User"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
  "/users/{user_id}/metadata":
    patch:
      operationId: UpdateUserMetadata
      summary: Merge and update a user's metadata
      description: |-
        Update a user's metadata attributes by merging existing values with the provided parameters.

        This endpoint behaves differently than the *Update a user* endpoint.
        Metadata values will not be replaced entirely.
        Instead, a deep merge will be performed.
        Deep means that any nested JSON objects will be merged as well.

        You can remove metadata keys at any level by setting their value to `null`.
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description: The ID of the user whose metadata will be updated and merged
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                public_metadata:
                  type: object
                  description: |-
                    Metadata saved on the user, that is visible to both your frontend and backend.
                    The new object will be merged with the existing value.
                private_metadata:
                  type: object
                  description: |-
                    Metadata saved on the user that is only visible to your backend.
                    The new object will be merged with the existing value.
                unsafe_metadata:
                  type: object
                  description: |-
                    Metadata saved on the user, that can be updated from both the Frontend and Backend APIs.
                    The new object will be merged with the existing value.

                    Note: Since this data can be modified from the frontend, it is not guaranteed to be safe.
      responses:
        "200":
          "$ref": "#/components/responses/User"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/users/{user_id}/oauth_access_tokens/{provider}":
    get:
      operationId: GetOAuthAccessToken
      summary: Retrieve the OAuth access token of a user
      description: |-
        Fetch the corresponding OAuth access token for a user that has previously authenticated with a particular OAuth provider.
        For OAuth 2.0, if the access token has expired and we have a corresponding refresh token, the access token will be refreshed transparently the new one will be returned.
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description: The ID of the user for which to retrieve the OAuth access token
          required: true
          schema:
            type: string
        - name: provider
          in: path
          description: The ID of the OAuth provider (e.g. `oauth_google`)
          required: true
          schema:
            type: string
      responses:
        "200":
          description: The OAuth access token of the user, if any.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  additionalProperties: false
                  properties:
                    object:
                      type: string
                    token:
                      type: string
                      description: The access token
                    provider:
                      type: string
                      description: The ID of the provider
                    public_metadata:
                      type: object
                    label:
                      type: string
                      nullable: true
                    scopes:
                      type: array
                      items:
                        type: string
                      description: |-
                        The list of scopes that the token is valid for.
                        Only present for OAuth 2.0 tokens.
                    token_secret:
                      type: string
                      description: The token secret. Only present for OAuth 1.0 tokens.
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/users/{user_id}/organization_memberships":
    get:
      operationId: UsersGetOrganizationMemberships
      summary: Retrieve all memberships for a user
      description: Retrieve a paginated list of the user's organization memberships
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description:
            The ID of the user whose organization memberships we want to
            retrieve
          required: true
          schema:
            type: string
        - "$ref": "#/components/parameters/LimitParameter"
        - "$ref": "#/components/parameters/OffsetParameter"
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationMemberships"
        "403":
          "$ref": "#/components/responses/ClerkErrors"
  "/users/{user_id}/verify_password":
    post:
      operationId: VerifyPassword
      summary: Verify the password of a user
      description: |-
        Check that the user's password matches the supplied input.
        Useful for custom auth flows and re-verification.
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description: The ID of the user for whom to verify the password
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                password:
                  type: string
                  description: The user password to verify
              required:
                - password
      responses:
        "200":
          description: The provided password was correct.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  verified:
                    type: boolean
                    nullable: false
        "400":
          description: The user does not have a password set.
        "404":
          description: The user does not exist.
        "422":
          description: The provided password was incorrect.
        "500":
          "$ref": "#/components/responses/ClerkErrors"
  "/users/{user_id}/verify_totp":
    post:
      operationId: VerifyTOTP
      summary: Verify a TOTP or backup code for a user
      description: |-
        Verify that the provided TOTP or backup code is valid for the user.
        Verifying a backup code will result it in being consumed (i.e. it will
        become invalid).
        Useful for custom auth flows and re-verification.
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description: The ID of the user for whom to verify the TOTP
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                code:
                  type: string
                  description: The TOTP or backup code to verify
              required:
                - code
      responses:
        "200":
          description: The provided TOTP or backup code was correct.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  verified:
                    type: boolean
                    nullable: false
                  code_type:
                    type: string
                    nullable: false
                    enum:
                      - totp
                      - backup_code
        "400":
          description: The user does not have TOTP configured for their account.
        "404":
          description: The user does not exist.
        "422":
          description: The provided TOTP or backup code was incorrect.
        "500":
          "$ref": "#/components/responses/ClerkErrors"
  "/users/{user_id}/mfa":
    delete:
      operationId: DisableMFA
      summary: Disable a user's MFA methods
      description:
        Disable all of a user's MFA methods (e.g. OTP sent via SMS, TOTP
        on their authenticator app) at once.
      tags:
        - Users
      parameters:
        - name: user_id
          in: path
          description: The ID of the user whose MFA methods are to be disabled
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Successful operation.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  user_id:
                    type: string
                    nullable: false
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "500":
          "$ref": "#/components/responses/ClerkErrors"
  "/emails":
    post:
      operationId: CreateEmail
      summary: Create an email
      description: Create and send an email to the supplied email address ID.
      tags:
        - Emails
      requestBody:
        description: Required parameters
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                from_email_name:
                  type: string
                  description: |-
                    The email name portion of the sending email address.
                    <br/>e.g.: `from_email_name=info` will send from info@example.com
                subject:
                  type: string
                  description: The subject of the email.
                  nullable: true
                body:
                  type: string
                  description: The body of the email.
                  nullable: true
                email_address_id:
                  type: string
                  nullable: true
                  description: The ID of the email address to send to.
                template_slug:
                  type: string
                  nullable: true
                  description: The slug of the template to use for sending this email
      responses:
        "200":
          "$ref": "#/components/responses/Email"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/sms_messages":
    post:
      operationId: CreateSMSMessage
      summary: Create an SMS message
      description: Create and send an SMS message to the supplied phone number ID
      tags:
        - SMS Messages
      requestBody:
        description: Required parameters
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                message:
                  type: string
                  description: The message you would like to send
                  nullable: true
                phone_number_id:
                  type: string
                  description:
                    The ID of a verified phone number the SMS message should
                    be sent to
      responses:
        "200":
          "$ref": "#/components/responses/SMSMessage"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/invitations":
    post:
      operationId: CreateInvitation
      summary: Create an invitation
      description: |-
        Creates a new invitation for the given email address and sends the invitation email.
        Keep in mind that you cannot create an invitation if there is already one for the given email address.
        Also, trying to create an invitation for an email address that already exists in your application will result to an error.
      tags:
        - Invitations
      requestBody:
        description: Required parameters
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                email_address:
                  type: string
                  description: The email address the invitation will be sent to
                public_metadata:
                  type: object
                  description: |-
                    Metadata that will be attached to the newly created invitation.
                    The value of this property should be a well-formed JSON object.
                    Once the user accepts the invitation and signs up, these metadata will end up in the user's public metadata.
                redirect_url:
                  type: string
                  description: |-
                    Optional URL which specifies where to redirect the user once they click the invitation link.
                    This is only required if you have implemented a [custom flow](https://clerk.com/docs/authentication/invitations#custom-flow) and you're not using Clerk Hosted Pages or Clerk Components.
              required:
                - email_address
      responses:
        "200":
          "$ref": "#/components/responses/Invitation"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
    get:
      summary: List all invitations
      description:
        Returns all non-revoked invitations for your application, sorted
        by creation date
      operationId: ListInvitations
      parameters:
        - in: query
          name: status
          description: Filter invitations based on their status
          required: false
          schema:
            type: string
            enum:
              - pending
              - accepted
              - revoked
      tags:
        - Invitations
      responses:
        "200":
          "$ref": "#/components/responses/Invitation.List"
  "/invitations/{invitation_id}/revoke":
    post:
      operationId: RevokeInvitation
      summary: Revokes an invitation
      description: |-
        Revokes the given invitation.
        Revoking an invitation will prevent the user from using the invitation link that was sent to them.
        However, it doesn't prevent the user from signing up if they follow the sign up flow.
        Only active (i.e. non-revoked) invitations can be revoked.
      tags:
        - Invitations
      parameters:
        - name: invitation_id
          in: path
          description: The ID of the invitation to be revoked
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/Invitation"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/allowlist_identifiers":
    get:
      operationId: ListAllowlistIdentifiers
      summary: List all identifiers on the allow-list
      description: Get a list of all identifiers allowed to sign up to an instance
      tags:
        - Allow-list / Block-list
      responses:
        "200":
          "$ref": "#/components/responses/AllowlistIdentifier.List"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
    post:
      operationId: CreateAllowlistIdentifier
      summary: Add identifier to the allow-list
      description: Create an identifier allowed to sign up to an instance
      tags:
        - Allow-list / Block-list
      responses:
        "200":
          "$ref": "#/components/responses/AllowlistIdentifier"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/allowlist_identifiers/{identifier_id}":
    delete:
      operationId: DeleteAllowlistIdentifier
      summary: Delete identifier from allow-list
      description: Delete an identifier from the instance allow-list
      tags:
        - Allow-list / Block-list
      parameters:
        - name: identifier_id
          in: path
          description: The ID of the identifier to delete from the allow-list
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/DeletedObject"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/blocklist_identifiers":
    get:
      operationId: ListBlocklistIdentifiers
      summary: List all identifiers on the block-list
      description:
        Get a list of all identifiers which are not allowed to access an
        instance
      tags:
        - Allow-list / Block-list
      responses:
        "200":
          "$ref": "#/components/responses/BlocklistIdentifier.List"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
    post:
      operationId: CreateBlocklistIdentifier
      summary: Add identifier to the block-list
      description: Create an identifier that is blocked from accessing an instance
      tags:
        - Allow-list / Block-list
      responses:
        "200":
          "$ref": "#/components/responses/BlocklistIdentifier"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/blocklist_identifiers/{identifier_id}":
    delete:
      operationId: DeleteBlocklistIdentifier
      summary: Delete identifier from block-list
      description: Delete an identifier from the instance block-list
      tags:
        - Allow-list / Block-list
      parameters:
        - name: identifier_id
          in: path
          description: The ID of the identifier to delete from the block-list
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/DeletedObject"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/beta_features/instance_settings":
    patch:
      operationId: UpdateInstanceAuthConfig
      summary: Update instance settings
      description: Updates the settings of an instance
      tags:
        - Beta Features
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                restricted_to_allowlist:
                  type: boolean
                  description:
                    Whether sign up is restricted to email addresses, phone
                    numbers and usernames that are on the allowlist.
                  nullable: true
                  default: false
                from_email_address:
                  type: string
                  description: |-
                    The local part of the email address from which authentication-related emails (e.g. OTP code, magic links) will be sent.
                    Only alphanumeric values are allowed.
                    Note that this value should contain only the local part of the address (e.g. `foo` for `foo@example.com`).
                  nullable: true
                progressive_sign_up:
                  type: boolean
                  description:
                    Enable the Progressive Sign Up algorithm. Refer to
                    the [docs](https://clerk.com/docs/upgrade-guides/progressive-sign-up)
                    for more info.
                  nullable: true
                session_token_template:
                  type: string
                  description:
                    The name of the JWT Template used to augment your session
                    tokens. To disable this, pass an empty string.
                  nullable: true
                enhanced_email_deliverability:
                  type: boolean
                  description: |-
                    The "enhanced_email_deliverability" feature will send emails from "verifications@clerk.dev" instead of your domain.
                    This can be helpful if you do not have a high domain reputation.
                  nullable: true
                test_mode:
                  type: boolean
                  description: |-
                    Toggles test mode for this instance, allowing the use of test email addresses and phone numbers.
                    Defaults to true for development instances.
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/InstanceSettings"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/beta_features/domain":
    put:
      operationId: UpdateProductionInstanceDomain
      summary: Update production instance domain
      description: |-
        Change the domain of a production instance.

        Changing the domain requires updating the [DNS records](https://clerk.com/docs/deployments/overview#dns-records) accordingly, deploying new [SSL certificates](https://clerk.com/docs/deployments/overview#deploy), updating your Social Connection's redirect URLs and setting the new keys in your code.

        WARNING: Changing your domain will invalidate all current user sessions (i.e. users will be logged out). Also, while your application is being deployed, a small downtime is expected to occur.
      tags:
        - Beta Features
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                home_url:
                  type: string
                  description: The new home URL of the production instance e.g. https://www.example.com
      responses:
        "202":
          description: Accepted
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "422":
          "$ref": "#/components/responses/ClerkErrors"
  "/actor_tokens":
    post:
      summary: Create actor token
      description:
        Create an actor token that can be used to impersonate the given
        user.
      operationId: CreateActorToken
      tags:
        - Actor Tokens
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                user_id:
                  type: string
                  description:
                    The ID of the user that can use the newly created sign
                    in token.
                actor:
                  type: object
                  description: |-
                    The actor payload. It needs to include a sub property which should contain the ID of the actor.
                    This whole payload will be also included in the JWT session token.
                expires_in_seconds:
                  type: integer
                  description: |-
                    Optional parameter to specify the life duration of the actor token in seconds.
                    By default, the duration is 1 hour.
                  default: 3600
                session_max_duration_in_seconds:
                  type: integer
                  description: |-
                    The maximum duration that the session which will be created by the generated actor token should last.
                    By default, the duration of a session created via an actor token, lasts 30 minutes.
                  default: 1800
              required:
                - user_id
                - actor
      responses:
        "200":
          "$ref": "#/components/responses/ActorToken"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/actor_tokens/{actor_token_id}/revoke":
    post:
      summary: Revoke actor token
      description: Revokes a pending actor token.
      operationId: RevokeActorToken
      tags:
        - Actor Tokens
      parameters:
        - name: actor_token_id
          in: path
          description: The ID of the actor token to be revoked.
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/ActorToken"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/instance":
    patch:
      operationId: UpdateInstance
      summary: Update instance settings
      description: Updates the settings of an instance
      tags:
        - Instance Settings
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                test_mode:
                  type: boolean
                  description: |-
                    Toggles test mode for this instance, allowing the use of test email addresses and phone numbers.
                    Defaults to true for development instances.
                  nullable: true
                hibp:
                  type: boolean
                  description:
                    Whether the instance should be using the HIBP service
                    to check passwords for breaches
                  nullable: true
                enhanced_email_deliverability:
                  type: boolean
                  description: |-
                    The "enhanced_email_deliverability" feature will send emails from "verifications@clerk.dev" instead of your domain.
                    This can be helpful if you do not have a high domain reputation.
                  nullable: true
                support_email:
                  type: string
                  nullable: true
                clerk_js_version:
                  type: string
                  nullable: true
                development_origin:
                  type: string
                  nullable: true
                experimental_allowed_origins:
                  type: array
                  items:
                    type: string
                  deprecated: true
                allowed_origins:
                  type: array
                  items:
                    type: string
                cookieless_dev:
                  type: boolean
                  description: |-
                    Whether the instance should operate in cookieless development mode (i.e. without third-party cookies).
                    Deprecated: Please use `url_based_session_syncing` instead.
                  deprecated: true
                url_based_session_syncing:
                  type: boolean
                  description:
                    Whether the instance should use URL-based session syncing
                    in development mode (i.e. without third-party cookies).
      responses:
        "204":
          description: Accepted
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/instance/restrictions":
    patch:
      operationId: UpdateInstanceRestrictions
      summary: Update instance restrictions
      description: Updates the restriction settings of an instance
      tags:
        - Instance Settings
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                allowlist:
                  type: boolean
                  nullable: true
                blocklist:
                  type: boolean
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/InstanceRestrictions"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
  "/instance/organization_settings":
    patch:
      operationId: UpdateInstanceOrganizationSettings
      summary: Update instance organization settings
      description: Updates the organization settings of the instance
      tags:
        - Instance Settings
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                enabled:
                  type: boolean
                  nullable: true
                max_allowed_memberships:
                  type: integer
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationSettings"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/webhooks/svix":
    post:
      operationId: CreateSvixApp
      summary: Create a Svix app
      description: Create a Svix app and associate it with the current instance
      tags:
        - Webhooks
      responses:
        "200":
          "$ref": "#/components/responses/SvixURL"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
    delete:
      operationId: DeleteSvixApp
      summary: Delete a Svix app
      description: Delete a Svix app and disassociate it from the current instance
      tags:
        - Webhooks
      responses:
        "204":
          description: Svix app was successfully deleted
        "400":
          "$ref": "#/components/responses/ClerkErrors"
  "/webhooks/svix_url":
    post:
      operationId: GenerateSvixAuthURL
      summary: Create a Svix Dashboard URL
      description:
        Generate a new url for accessing the Svix's management dashboard
        for that particular instance
      tags:
        - Webhooks
      responses:
        "200":
          "$ref": "#/components/responses/SvixURL"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
  "/jwt_templates":
    get:
      summary: List all templates
      operationId: ListJWTTemplates
      tags:
        - JWT Templates
      responses:
        "200":
          "$ref": "#/components/responses/JWTTemplate.List"
    post:
      operationId: CreateJWTTemplate
      summary: Create a JWT template
      description: Create a new JWT template
      tags:
        - JWT Templates
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: JWT template name
                  nullable: false
                claims:
                  type: object
                  description: JWT template claims in JSON format
                  nullable: false
                lifetime:
                  type: number
                  minimum: 30
                  maximum: 315360000
                  description: JWT token lifetime
                  nullable: true
                allowed_clock_skew:
                  type: number
                  minimum: 0
                  maximum: 300
                  description: JWT token allowed clock skew
                  nullable: true
                custom_signing_key:
                  type: boolean
                  description:
                    Whether a custom signing key/algorithm is also provided
                    for this template
                  nullable: false
                signing_algorithm:
                  type: string
                  description: The custom signing algorithm to use when minting JWTs
                  nullable: true
                signing_key:
                  type: string
                  description:
                    The custom signing private key to use when minting
                    JWTs
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/JWTTemplate"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/jwt_templates/{template_id}":
    get:
      operationId: GetJWTTemplate
      summary: Retrieve a template
      description: Retrieve the details of a given JWT template
      tags:
        - JWT Templates
      parameters:
        - name: template_id
          in: path
          description: JWT Template ID
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/JWTTemplate"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
    patch:
      operationId: UpdateJWTTemplate
      summary: Update a JWT template
      description: Updates an existing JWT template
      tags:
        - JWT Templates
      parameters:
        - name: template_id
          in: path
          description: The ID of the JWT template to update
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: JWT template name
                  nullable: false
                claims:
                  type: object
                  description: JWT template claims in JSON format
                  nullable: false
                lifetime:
                  type: number
                  minimum: 30
                  maximum: 315360000
                  description: JWT token lifetime
                  nullable: true
                allowed_clock_skew:
                  type: number
                  minimum: 0
                  maximum: 300
                  description: JWT token allowed clock skew
                  nullable: true
                custom_signing_key:
                  type: boolean
                  description:
                    Whether a custom signing key/algorithm is also provided
                    for this template
                  nullable: false
                signing_algorithm:
                  type: string
                  description: The custom signing algorithm to use when minting JWTs
                  nullable: true
                signing_key:
                  type: string
                  description:
                    The custom signing private key to use when minting
                    JWTs
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/JWTTemplate"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "402":
          "$ref": "#/components/responses/PaymentRequired"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
    delete:
      operationId: DeleteJWTTemplate
      summary: Delete a Template
      description: ""
      tags:
        - JWT Templates
      parameters:
        - name: template_id
          in: path
          description: JWT Template ID
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/DeletedObject"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/organizations":
    get:
      operationId: ListOrganizations
      summary: Get a list of organizations for an instance
      description: |-
        This request returns the list of organizations for an instance.
        Results can be paginated using the optional `limit` and `offset` query parameters.
        The organizations are ordered by descending creation date.
        Most recent organizations will be returned first.
      tags:
        - Organizations
      parameters:
        - "$ref": "#/components/parameters/LimitParameter"
        - "$ref": "#/components/parameters/OffsetParameter"
        - in: query
          required: false
          name: include_members_count
          description:
            Flag to denote whether the member counts of each organization
            should be included in the response or not.
          schema:
            type: boolean
        - in: query
          required: false
          name: query
          description: |-
            Returns organizations with ID, name, or slug that match the given query.
            Uses exact match for organization ID and partial match for name and slug.
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/Organizations"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
    post:
      operationId: CreateOrganization
      summary: Create an organization
      description: |-
        Creates a new organization with the given name for an instance.
        In order to successfully create an organization you need to provide the ID of the User who will become the organization administrator.
        You can specify an optional slug for the new organization.
        If provided, the organization slug can contain only lowercase alphanumeric characters (letters and digits) and the dash "-".
        Organization slugs must be unique for the instance.
        You can provide additional metadata for the organization and set any custom attribute you want.
        Organizations support private and public metadata.
        Private metadata can only be accessed from the Backend API.
        Public metadata can be accessed from the Backend API, and are read-only from the Frontend API.
      tags:
        - Organizations
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: The name of the new organization
                created_by:
                  type: string
                  description:
                    The ID of the User who will become the administrator
                    for the new organization
                private_metadata:
                  type: object
                  description:
                    Metadata saved on the organization, accessible only
                    from the Backend API
                public_metadata:
                  type: object
                  description:
                    Metadata saved on the organization, read-only from
                    the Frontend API and fully accessible (read/write) from the Backend
                    API
                slug:
                  type: string
                  description: |-
                    A slug for the new organization.
                    Can contain only lowercase alphanumeric characters and the dash "-".
                    Must be unique for the instance.
                max_allowed_memberships:
                  type: integer
                  description:
                    The maximum number of memberships allowed for this
                    organization
              required:
                - name
                - created_by
      responses:
        "200":
          "$ref": "#/components/responses/Organization"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/organizations/{organization_id}":
    get:
      operationId: GetOrganization
      summary: Retrieve an organization by ID or slug
      description:
        Fetches the organization whose ID or slug matches the provided
        `id_or_slug` URL query parameter.
      tags:
        - Organizations
      parameters:
        - in: path
          name: organization_id
          required: true
          schema:
            type: string
          description: The ID or slug of the organization
      responses:
        "200":
          "$ref": "#/components/responses/Organization"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
    patch:
      operationId: UpdateOrganization
      summary: Update an organization
      description: Updates an existing organization
      tags:
        - Organizations
      parameters:
        - in: path
          name: organization_id
          required: true
          schema:
            type: string
          description: The ID of the organization to update
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                public_metadata:
                  type: object
                  description:
                    Metadata saved on the organization, that is visible
                    to both your frontend and backend.
                private_metadata:
                  type: object
                  description:
                    Metadata saved on the organization that is only visible
                    to your backend.
                name:
                  type: string
                  description: The new name of the organization
                  nullable: true
                slug:
                  type: string
                  description:
                    The new slug of the organization, which needs to be
                    unique in the instance
                  nullable: true
                max_allowed_memberships:
                  type: integer
                  description:
                    The maximum number of memberships allowed for this
                    organization
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/Organization"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
    delete:
      operationId: DeleteOrganization
      summary: Delete an organization
      description: |-
        Deletes the given organization.
        Please note that deleting an organization will also delete all memberships and invitations.
        This is not reversible.
      tags:
        - Organizations
      parameters:
        - in: path
          name: organization_id
          required: true
          schema:
            type: string
          description: The ID of the organization to delete
      responses:
        "200":
          "$ref": "#/components/responses/DeletedObject"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/organizations/{organization_id}/metadata":
    patch:
      operationId: MergeOrganizationMetadata
      summary: Merge and update metadata for an organization
      description: |-
        Update organization metadata attributes by merging existing values with the provided parameters.
        Metadata values will be updated via a deep merge.
        Deep meaning that any nested JSON objects will be merged as well.
        You can remove metadata keys at any level by setting their value to `null`.
      tags:
        - Organizations
      parameters:
        - name: organization_id
          in: path
          description:
            The ID of the organization for which metadata will be merged
            or updated
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                public_metadata:
                  type: object
                  description: |-
                    Metadata saved on the organization, that is visible to both your frontend and backend.
                    The new object will be merged with the existing value.
                private_metadata:
                  type: object
                  description: |-
                    Metadata saved on the organization that is only visible to your backend.
                    The new object will be merged with the existing value.
      responses:
        "200":
          "$ref": "#/components/responses/Organization"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/organizations/{organization_id}/logo":
    put:
      operationId: UploadOrganizationLogo
      summary: Upload a logo for the organization
      description: |-
        Set or replace an organization's logo, by uploading an image file.
        This endpoint uses the `multipart/form-data` request content type and accepts a file of image type.
        The file size cannot exceed 10MB.
        Only the following file content types are supported: `image/jpeg`, `image/png`, `image/gif`, `image/webp`, `image/x-icon`, `image/vnd.microsoft.icon`.
      tags:
        - Organizations
      parameters:
        - name: organization_id
          in: path
          description: The ID of the organization for which to upload a logo
          required: true
          schema:
            type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                uploader_user_id:
                  type: string
                file:
                  type: string
                  format: binary
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationWithLogo"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "413":
          "$ref": "#/components/responses/ClerkErrors"
  "/organizations/{organization_id}/invitations":
    post:
      operationId: CreateOrganizationInvitation
      summary: Create and send an organization invitation
      description: |-
        Creates a new organization invitation and sends an email to the provided `email_address` with a link to accept the invitation and join the organization.
        You can specify the `role` for the invited organization member.

        New organization invitations get a "pending" status until they are revoked by an organization administrator or accepted by the invitee.

        The request body supports passing an optional `redirect_url` parameter.
        When the invited user clicks the link to accept the invitation, they will be redirected to the URL provided.
        Use this parameter to implement a custom invitation acceptance flow.

        You must specify the ID of the user that will send the invitation with the `inviter_user_id` parameter.
        That user must be a member with administrator privileges in the organization.
        Only "admin" members can create organization invitations.

        You can optionally provide public metadata for the organization invitation.
        These metadata are visible by both the Frontend and the Backend.
        When the organization invitation is accepted, the metadata will be transferred to the newly created organization membership.
      tags:
        - Organization Invitations
      parameters:
        - in: path
          required: true
          name: organization_id
          schema:
            type: string
          description: The ID of the organization for which to send the invitation
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email_address:
                  type: string
                  description:
                    The email address of the new member that is going to
                    be invited to the organization
                inviter_user_id:
                  type: string
                  description: |-
                    The ID of the user that invites the new member to the organization.
                    Must be an administrator in the organization.
                role:
                  type: string
                  description: The role of the new member in the organization
                  enum:
                    - admin
                    - basic_member
                public_metadata:
                  type: object
                  description:
                    Metadata saved on the organization invitation, read-only
                    from the Frontend API and fully accessible (read/write) from the
                    Backend API.
                redirect_url:
                  type: string
                  description:
                    Optional URL that the invitee will be redirected to
                    once they accept the invitation by clicking the join link in the
                    invitation email.
              required:
                - email_address
                - inviter_user_id
                - role
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationInvitation"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/organizations/{organization_id}/invitations/pending":
    get:
      operationId: ListPendingOrganizationInvitations
      summary: Get a list of pending organization invitations
      description: |-
        This request returns the list of organization invitations with "pending" status.
        These are the organization invitations that can still be used to join the organization, but have not been accepted by the invited user yet.
        Results can be paginated using the optional `limit` and `offset` query parameters.
        The organization invitations are ordered by descending creation date.
        Most recent invitations will be returned first.
      tags:
        - Organization Invitations
      parameters:
        - in: path
          required: true
          name: organization_id
          schema:
            type: string
          description: The organization ID.
        - "$ref": "#/components/parameters/LimitParameter"
        - "$ref": "#/components/parameters/OffsetParameter"
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationInvitations"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/organizations/{organization_id}/invitations/{invitation_id}/revoke":
    post:
      operationId: RevokeOrganizationInvitation
      summary: Revoke a pending organization invitation
      description: |-
        Use this request to revoke a previously issued organization invitation.
        Revoking an organization invitation makes it invalid; the invited user will no longer be able to join the organization with the revoked invitation.
        Only organization invitations with "pending" status can be revoked.
        The request needs the `requesting_user_id` parameter to specify the user which revokes the invitation.
        Only users with "admin" role can revoke invitations.
      tags:
        - Organization Invitations
      parameters:
        - in: path
          required: true
          name: organization_id
          schema:
            type: string
          description: The organization ID.
        - in: path
          required: true
          name: invitation_id
          schema:
            type: string
          description: The organization invitation ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                requesting_user_id:
                  type: string
                  description: |-
                    The ID of the user that revokes the invitation.
                    Must be an administrator in the organization.
              required:
                - requesting_user_id
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationInvitation"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/organizations/{organization_id}/memberships":
    post:
      operationId: CreateOrganizationMembership
      summary: Create a new organization membership
      description: |-
        Adds a user as a member to the given organization.
        Only users in the same instance as the organization can be added as members.
      tags:
        - Organization Memberships
      parameters:
        - in: path
          required: true
          name: organization_id
          schema:
            type: string
          description: The ID of the organization where the new membership will be created
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: string
                  description: |-
                    The ID of the user that will be added as a member in the organization.
                    The user needs to exist in the same instance as the organization and must not be a member of the given organization already.
                role:
                  type: string
                  description: The role that the new member will have in the organization.
                  enum:
                    - admin
                    - basic_member
              required:
                - user_id
                - role
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationMembership"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
    get:
      operationId: ListOrganizationMemberships
      summary: Get a list of all members of an organization
      description: Retrieves all user memberships for the given organization
      tags:
        - Organization Memberships
      parameters:
        - in: path
          required: true
          name: organization_id
          schema:
            type: string
          description: The organization ID.
        - "$ref": "#/components/parameters/LimitParameter"
        - "$ref": "#/components/parameters/OffsetParameter"
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationMemberships"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/organizations/{organization_id}/memberships/{user_id}":
    patch:
      operationId: UpdateOrganizationMembership
      summary: Update an organization membership
      description: Updates the properties of an existing organization membership
      tags:
        - Organization Memberships
      parameters:
        - in: path
          required: true
          name: organization_id
          schema:
            type: string
          description: The ID of the organization the membership belongs to
        - in: path
          required: true
          name: user_id
          schema:
            type: string
          description: The ID of the user that this membership belongs to
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                role:
                  type: string
                  description: The new role of the given membership.
                  enum:
                    - admin
                    - basic_member
              required:
                - role
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationMembership"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
    delete:
      operationId: DeleteOrganizationMembership
      summary: Remove a member from an organization
      description: Removes the given membership from the organization
      tags:
        - Organization Memberships
      parameters:
        - in: path
          required: true
          name: organization_id
          schema:
            type: string
          description: The ID of the organization the membership belongs to
        - in: path
          required: true
          name: user_id
          schema:
            type: string
          description: The ID of the user that this membership belongs to
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationMembership"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "401":
          "$ref": "#/components/responses/AuthenticationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/organizations/{organization_id}/memberships/{user_id}/metadata":
    patch:
      operationId: UpdateOrganizationMembershipMetadata
      summary: Merge and update organization membership metadata
      description: |-
        Update an organization membership's metadata attributes by merging existing values with the provided parameters.
        Metadata values will be updated via a deep merge. Deep means that any nested JSON objects will be merged as well.
        You can remove metadata keys at any level by setting their value to `null`.
      tags:
        - Organization Memberships
      parameters:
        - in: path
          required: true
          name: organization_id
          schema:
            type: string
          description: The ID of the organization the membership belongs to
        - in: path
          required: true
          name: user_id
          schema:
            type: string
          description: The ID of the user that this membership belongs to
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                public_metadata:
                  type: object
                  description: |-
                    Metadata saved on the organization membership, that is visible to both your frontend and backend.
                    The new object will be merged with the existing value.
                private_metadata:
                  type: object
                  description: |-
                    Metadata saved on the organization membership that is only visible to your backend.
                    The new object will be merged with the existing value.
      responses:
        "200":
          "$ref": "#/components/responses/OrganizationMembership"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/redirect_urls":
    get:
      summary: List all redirect URLs
      description: Lists all whitelisted redirect_urls for the instance
      operationId: ListRedirectURLs
      tags:
        - Redirect URLs
      responses:
        "200":
          "$ref": "#/components/responses/RedirectURL.List"
    post:
      description: Create a redirect URL
      operationId: CreateRedirectURL
      tags:
        - Redirect URLs
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                url:
                  type: string
                  description:
                    The full url value prefixed with `https://` or a custom
                    scheme e.g. `"https://my-app.com/oauth-callback"` or `"my-app://oauth-callback"`
                  nullable: false
      responses:
        "200":
          "$ref": "#/components/responses/RedirectURL"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/redirect_urls/{id}":
    get:
      summary: Retrieve a redirect URL
      description: Retrieve the details of the redirect URL with the given ID
      operationId: GetRedirectURL
      tags:
        - Redirect URLs
      parameters:
        - name: id
          in: path
          description: The ID of the redirect URL
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/RedirectURL"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
    delete:
      summary: Delete a redirect URL
      description: Remove the selected redirect URL from the whitelist of the instance
      operationId: DeleteRedirectURL
      tags:
        - Redirect URLs
      parameters:
        - name: id
          in: path
          description: The ID of the redirect URL
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/DeletedObject"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/sign_in_tokens":
    post:
      summary: Create sign-in token
      description: |-
        Creates a new sign-in token and associates it with the given user.
        By default, sign-in tokens expire in 30 days.
        You can optionally supply a different duration in seconds using the `expires_in_seconds` property.
      operationId: CreateSignInToken
      tags:
        - Sign-in Tokens
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: string
                  description:
                    The ID of the user that can use the newly created sign
                    in token
                expires_in_seconds:
                  type: integer
                  description: |-
                    Optional parameter to specify the life duration of the sign in token in seconds.
                    By default, the duration is 30 days.
                  default: 2592000
      responses:
        "200":
          "$ref": "#/components/responses/SignInToken"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/sign_in_tokens/{sign_in_token_id}/revoke":
    post:
      summary: Revoke the given sign-in token
      description: Revokes a pending sign-in token
      operationId: RevokeSignInToken
      tags:
        - Sign-in Tokens
      parameters:
        - name: sign_in_token_id
          in: path
          description: The ID of the sign-in token to be revoked
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/SignInToken"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/sign_ups/{id}":
    patch:
      operationId: UpdateSignUp
      summary: Update a sign-up
      description: Update the sign-up with the given ID
      tags:
        - Sign-ups
      parameters:
        - name: id
          in: path
          description: The ID of the sign-up to update
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                custom_action:
                  type: boolean
                  description: |-
                    Specifies whether a custom action has run for this sign-up attempt.
                    This is important when your instance has been configured to require a custom action to run before converting a sign-up into a user.
                    After executing any external business logic you deem necessary, you can mark the sign-up as ready-to-convert by setting `custom_action` to `true`.
                external_id:
                  type: string
                  description: |-
                    The ID of the guest attempting to sign up as used in your external systems or your previous authentication solution.
                    This will be copied to the resulting user when the sign-up is completed.
                  nullable: true
      responses:
        "200":
          "$ref": "#/components/responses/SignUp"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
  "/oauth_applications":
    get:
      operationId: ListOAuthApplications
      summary: Get a list of OAuth applications for an instance
      description: |-
        This request returns the list of OAuth applications for an instance.
        Results can be paginated using the optional `limit` and `offset` query parameters.
        The OAuth applications are ordered by descending creation date.
        Most recent OAuth applications will be returned first.
      tags:
        - OAuth Applications
      parameters:
        - "$ref": "#/components/parameters/LimitParameter"
        - "$ref": "#/components/parameters/OffsetParameter"
      responses:
        "200":
          "$ref": "#/components/responses/OAuthApplications"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
    post:
      operationId: CreateOAuthApplication
      summary: Create an OAuth application
      description: |-
        Creates a new OAuth application with the given name and callback URL for an instance.
        The callback URL must be a valid url.
        All URL schemes are allowed such as `http://`, `https://`, `myapp://`, etc...
      tags:
        - OAuth Applications
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: The name of the new OAuth application
                callback_url:
                  type: string
                  description: The callback URL of the new OAuth application
              required:
                - name
                - callback_url
      responses:
        "200":
          "$ref": "#/components/responses/OAuthApplicationWithSecret"
        "400":
          "$ref": "#/components/responses/ClerkErrors"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
  "/oauth_applications/{oauth_application_id}":
    get:
      operationId: GetOAuthApplication
      summary: Retrieve an OAuth application by ID
      description:
        Fetches the OAuth application whose ID matches the provided `id`
        in the path.
      tags:
        - OAuth Applications
      parameters:
        - in: path
          name: oauth_application_id
          required: true
          schema:
            type: string
          description: The ID of the OAuth application
      responses:
        "200":
          "$ref": "#/components/responses/OAuthApplication"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
    patch:
      operationId: UpdateOAuthApplication
      summary: Update an OAuth application
      description: Updates an existing OAuth application
      tags:
        - OAuth Applications
      parameters:
        - in: path
          name: oauth_application_id
          required: true
          schema:
            type: string
          description: The ID of the OAuth application to update
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                name:
                  type: string
                  description: The new name of the OAuth application
                callback_url:
                  type: string
                  description: The new callback URL of the OAuth application
              required:
                - name
                - callback_url
      responses:
        "200":
          "$ref": "#/components/responses/OAuthApplication"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
        "422":
          "$ref": "#/components/responses/UnprocessableEntity"
    delete:
      operationId: DeleteOAuthApplication
      summary: Delete an OAuth application
      description: |-
        Deletes the given OAuth application.
        This is not reversible.
      tags:
        - OAuth Applications
      parameters:
        - in: path
          name: oauth_application_id
          required: true
          schema:
            type: string
          description: The ID of the OAuth application to delete
      responses:
        "200":
          "$ref": "#/components/responses/DeletedObject"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
  "/oauth_applications/{oauth_application_id}/rotate_secret":
    post:
      operationId: RotateOAuthApplicationSecret
      summary: Rotate the client secret of the given OAuth application
      description: |-
        Rotates the OAuth application's client secret.
        When the client secret is rotated, make sure to update it in authorized OAuth clients.
      tags:
        - OAuth Applications
      parameters:
        - name: oauth_application_id
          in: path
          description:
            The ID of the OAuth application for which to rotate the client
            secret
          required: true
          schema:
            type: string
      responses:
        "200":
          "$ref": "#/components/responses/OAuthApplicationWithSecret"
        "403":
          "$ref": "#/components/responses/AuthorizationInvalid"
        "404":
          "$ref": "#/components/responses/ResourceNotFound"
