Clerk Email Addresses API

A user can be associated with one or more email addresses, which allows them to be contacted via email.

Work with this as data

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

MCP server

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

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/clerk-com-email-addresses-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

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

Get an API key

Free tier, no email required.

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

OpenAPI Specification

clerk-com-email-addresses-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Clerk Backend Account Portal Email Addresses 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.


    ### Versions


    When the API changes in a way that isn''t compatible with older versions, a new version is released.

    Each version is identified by its release date, e.g. `2025-04-10`. For more information, please see [Clerk API Versions](https://clerk.com/docs/versioning/available-versions).


    Please see https://clerk.com/docs for more information.'
  version: '2025-11-10'
  termsOfService: https://clerk.com/terms
  license:
    name: MIT
    url: https://github.com/clerk/openapi-specs/blob/main/LICENSE
servers:
- url: https://api.clerk.com/v1
security:
- bearerAuth: []
tags:
- name: Email Addresses
  description: A user can be associated with one or more email addresses, which allows them to be contacted via email.
  externalDocs:
    url: https://clerk.com/docs/references/javascript/types/email-address
paths:
  /email_addresses:
    post:
      operationId: CreateEmailAddress
      x-speakeasy-group: emailAddresses
      x-speakeasy-name-override: create
      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
              required:
              - user_id
              - email_address
      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'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /email_addresses/{email_address_id}:
    get:
      operationId: GetEmailAddress
      x-speakeasy-group: emailAddresses
      x-speakeasy-name-override: get
      x-speakeasy-usage-example: true
      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
      x-speakeasy-group: emailAddresses
      x-speakeasy-name-override: delete
      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'
        '409':
          $ref: '#/components/responses/Conflict'
    patch:
      operationId: UpdateEmailAddress
      x-speakeasy-group: emailAddresses
      x-speakeasy-name-override: update
      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'
        '409':
          $ref: '#/components/responses/Conflict'
  /v1/me/email_addresses:
    get:
      operationId: getEmailAddresses
      summary: Get Email Addresses
      description: Retrieve all the email addresses associated with the current user.
      tags:
      - Email Addresses
      parameters:
      - in: query
        name: _clerk_session_id
        schema:
          type: string
        description: The session_id associated with the requesting user.
      responses:
        '200':
          $ref: '#/components/responses/Server.UserEmailAddresses'
        '401':
          $ref: '#/components/responses/ClerkErrors'
        '403':
          $ref: '#/components/responses/ClerkErrors'
        '404':
          $ref: '#/components/responses/ClerkErrors'
    post:
      summary: Create Email Address
      description: Add an email address to the current user. The address then needs to be verified using the `prepare_verification` and `attempt_verification` endpoints.
      operationId: createEmailAddresses
      tags:
      - Email Addresses
      parameters:
      - in: query
        name: _clerk_session_id
        schema:
          type: string
        description: The session_id associated with the requesting user.
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email_address:
                  type: string
                  description: The email address to be added to the user.
              required:
              - email_address
      responses:
        '200':
          $ref: '#/components/responses/Client.ClientWrappedEmailAddress'
        '400':
          $ref: '#/components/responses/ClerkErrors'
        '401':
          $ref: '#/components/responses/ClerkErrors'
        '403':
          $ref: '#/components/responses/ClerkErrors'
        '404':
          $ref: '#/components/responses/ClerkErrors'
        '422':
          $ref: '#/components/responses/ClerkErrors'
  /v1/me/email_addresses/{email_id}/attempt_verification:
    post:
      operationId: verifyEmailAddress
      description: Attempt to verify an email address that was previously created.
      summary: Attempt Email Address Verification
      tags:
      - Email Addresses
      parameters:
      - in: path
        required: true
        name: email_id
        schema:
          type: string
        description: The email_id.
      - in: query
        name: _clerk_session_id
        schema:
          type: string
        description: The session_id associated with the requesting user.
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: The code that was previously sent to the email address.
              required:
              - code
      responses:
        '200':
          $ref: '#/components/responses/Client.ClientWrappedEmailAddress'
        '400':
          $ref: '#/components/responses/ClerkErrors'
        '401':
          $ref: '#/components/responses/ClerkErrors'
        '403':
          $ref: '#/components/responses/ClerkErrors'
        '404':
          $ref: '#/components/responses/ClerkErrors'
        '422':
          $ref: '#/components/responses/ClerkErrors'
  /v1/me/email_addresses/{email_id}/prepare_verification:
    post:
      description: 'Depending on the given strategy, the API will prepare the verification for the email address.

        In particular, * for `email_code`, the API will send a verification email to the address containing a code. * for `email_link`, the API will send a verification email to the address containing a link to the verification attempt endpoint. * for `enterprise_sso`, the API will send an external redirect URL to the browser containing a link to the SSO verification endpoint.'
      summary: Prepare Email Address Verification
      tags:
      - Email Addresses
      operationId: sendVerificationEmail
      parameters:
      - in: path
        name: email_id
        required: true
        schema:
          type: string
        description: The email_id.
      - in: query
        name: _clerk_session_id
        schema:
          type: string
        description: The session_id associated with the requesting user.
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                strategy:
                  type: string
                  description: The strategy to be prepared for email verification.
                  enum:
                  - email_code
                  - email_link
                  - enterprise_sso
                redirect_url:
                  type: string
                  description: Used with the `email_link` strategy.
                  nullable: true
                action_complete_redirect_url:
                  type: string
                  description: Used with `oauth_[provider]` and `saml` strategies.
                  nullable: true
              required:
              - strategy
      responses:
        '200':
          $ref: '#/components/responses/Client.ClientWrappedEmailAddress'
        '401':
          $ref: '#/components/responses/ClerkErrors'
        '403':
          $ref: '#/components/responses/ClerkErrors'
        '404':
          $ref: '#/components/responses/ClerkErrors'
        '422':
          $ref: '#/components/responses/ClerkErrors'
  /v1/me/email_addresses/{email_id}:
    get:
      summary: Get Email Address
      description: Retrieve an email address by ID.
      tags:
      - Email Addresses
      operationId: getEmailAddress
      parameters:
      - in: path
        name: email_id
        required: true
        schema:
          type: string
        description: The email_id.
      - in: query
        name: _clerk_session_id
        schema:
          type: string
        description: The session_id associated with the requesting user.
      responses:
        '200':
          $ref: '#/components/responses/Client.ClientWrappedEmailAddress'
        '401':
          $ref: '#/components/responses/ClerkErrors'
        '403':
          $ref: '#/components/responses/ClerkErrors'
        '404':
          $ref: '#/components/responses/ClerkErrors'
    delete:
      summary: Delete Email Address
      description: Delete an email address by ID.
      tags:
      - Email Addresses
      operationId: DeleteEmailAddress
      parameters:
      - in: path
        name: email_id
        required: true
        schema:
          type: string
        description: The email_id.
      - in: query
        name: _clerk_session_id
        schema:
          type: string
        description: The session_id associated with the requesting user.
      responses:
        '200':
          $ref: '#/components/responses/Client.ClientWrappedDeletedObject'
        '400':
          $ref: '#/components/responses/ClerkErrors'
        '401':
          $ref: '#/components/responses/ClerkErrors'
        '403':
          $ref: '#/components/responses/ClerkErrors'
        '404':
          $ref: '#/components/responses/ClerkErrors'
components:
  responses:
    AuthorizationInvalid:
      description: Authorization invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ClerkErrors'
    Server.UserEmailAddresses:
      description: Returns UserEmailAddresses array.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Server.UserEmailAddresses'
    Client.ClientWrappedEmailAddress:
      description: Returns the response for Session wrapped Email object.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Client.ClientWrappedEmailAddress'
    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'
    EmailAddress:
      description: Success
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/EmailAddress'
    Client.ClientWrappedDeletedObject:
      description: Returns a deleted generic object.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Client.ClientWrappedDeletedObject'
    ResourceNotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ClerkErrors'
    DeletedObject:
      description: Deleted Object
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DeletedObject'
    Conflict:
      description: Conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ClerkErrors'
  schemas:
    Stubs.Verification.GoogleOneTap:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
          - verification_google_one_tap
        status:
          type: string
          enum:
          - unverified
          - verified
        strategy:
          type: string
          enum:
          - google_one_tap
        expire_at:
          type: integer
          nullable: true
        attempts:
          type: integer
          nullable: true
      required:
      - status
      - strategy
    Token:
      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:
          - token
        jwt:
          type: string
          description: 'String representing the encoded JWT value.

            '
      required:
      - object
      - jwt
    Stubs.Verification.SAML:
      type: object
      properties:
        object:
          type: string
          enum:
          - verification_saml
        status:
          type: string
          enum:
          - unverified
          - verified
          - failed
          - expired
          - transferable
        strategy:
          type: string
          enum:
          - saml
        external_verification_redirect_url:
          nullable: true
          type: string
        error:
          allOf:
          - $ref: '#/components/schemas/ClerkError'
          - type: object
            nullable: true
        expire_at:
          type: integer
          nullable: true
        attempts:
          type: integer
          nullable: true
      required:
      - status
      - strategy
    EmailAddress:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
        object:
          type: string
          x-speakeasy-unknown-values: allow
          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/verification_otp'
          - $ref: '#/components/schemas/verification_admin'
          - $ref: '#/components/schemas/verification_from_oauth'
          - $ref: '#/components/schemas/verification_ticket'
          - $ref: '#/components/schemas/verification_saml'
          - $ref: '#/components/schemas/verification_email_link'
          discriminator:
            propertyName: object
            mapping:
              verification_otp: '#/components/schemas/verification_otp'
              verification_admin: '#/components/schemas/verification_admin'
              verification_from_oauth: '#/components/schemas/verification_from_oauth'
              verification_ticket: '#/components/schemas/verification_ticket'
              verification_saml: '#/components/schemas/verification_saml'
              verification_email_link: '#/components/schemas/verification_email_link'
        linked_to:
          type: array
          items:
            $ref: '#/components/schemas/IdentificationLink'
        matches_sso_connection:
          description: 'Indicates whether this email address domain matches an active enterprise connection.

            '
          type: boolean
        created_at:
          type: integer
          format: int64
          description: 'Unix timestamp of creation

            '
        updated_at:
          type: integer
          format: int64
          description: 'Unix timestamp of creation

            '
      required:
      - object
      - email_address
      - verification
      - linked_to
      - reserved
      - created_at
      - updated_at
    Client.PublicUserData:
      type: object
      additionalProperties: false
      properties:
        first_name:
          type: string
          nullable: true
        last_name:
          type: string
          nullable: true
        image_url:
          type: string
          nullable: true
        has_image:
          type: boolean
        identifier:
          type: string
        profile_image_url:
          type: string
          nullable: true
          deprecated: true
          description: Use `image_url` instead.
        user_id:
          type: string
          nullable: true
        username:
          type: string
          nullable: true
        banned:
          type: boolean
      required:
      - first_name
      - last_name
      - identifier
      - has_image
    Client.ClientWrappedEmailAddress:
      type: object
      additionalProperties: false
      properties:
        response:
          type: object
          nullable: false
          allOf:
          - $ref: '#/components/schemas/Client.EmailAddress'
        client:
          type: object
          nullable: false
          allOf:
          - $ref: '#/components/schemas/schemas-Client.Client'
      required:
      - response
      - client
    Stubs.Verification.Password:
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
          - verification_password
        status:
          type: string
          enum:
          - unverified
          - verified
        strategy:
          type: string
          enum:
          - password
        attempts:
          type: integer
          nullable: true
        expire_at:
          type: integer
          nullable: true
      required:
      - status
      - strategy
    verification_admin:
      x-speakeasy-name-override: Admin
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
          - verification_admin
        status:
          type: string
          enum:
          - verified
        strategy:
          x-speakeasy-unknown-values: allow
          type: string
          enum:
          - admin
        attempts:
          type: integer
          nullable: true
        expire_at:
          type: integer
          nullable: true
        verified_at_client:
          type: string
          nullable: true
      required:
      - status
      - strategy
      - attempts
      - expire_at
    Client.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/Stubs.Verification.OTP'
          - $ref: '#/components/schemas/Stubs.Verification.Invitation'
          - $ref: '#/components/schemas/Stubs.Verification.Link'
          - $ref: '#/components/schemas/Stubs.Verification.Ticket'
          - $ref: '#/components/schemas/Stubs.Verification.Admin'
          - $ref: '#/components/schemas/Stubs.Verification.FromOauth'
          - $ref: '#/components/schemas/Stubs.Verification.SAML'
        linked_to:
          type: array
          items:
            $ref: '#/components/schemas/Stubs.Identification.Link'
        matches_sso_connection:
          description: 'Indicates whether this email address domain matches an active enterprise connection.

            '
          type: boolean
        created_at:
          type: integer
          format: int64
          description: 'Unix timestamp of creation

            '
        updated_at:
          type: integer
          format: int64
          description: 'Unix timestamp of creation

            '
      required:
      - id
      - object
      - email_address
      - verification
      - linked_to
      - reserved
      - created_at
      - updated_at
    Client.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:
          nullable: true
          type: object
          oneOf:
          - $ref: '#/components/schemas/Stubs.Verification.OTP'
          - $ref: '#/components/schemas/Stubs.Verification.Admin'
        linked_to:
          type: array
          items:
            $ref: '#/components/schemas/Stubs.Identification.Link'
        backup_codes:
          type: array
          items:
            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 creation

            '
      required:
      - id
      - object
      - phone_number
      - verification
      - linked_to
      - reserved
      - created_at
      - updated_at
    ClerkError:
      type: object
      properties:
        message:
          type: string
        long_message:
          type: string
        code:
          type: string
        meta:
          type: object
      required:
      - message
      - long_message
      - code
    Stubs.SignUpVerification.AdditionalFields:
      type: object
      properties:
        next_action:
          type: string
          enum:
          - needs_prepare
          - needs_attempt
          - ''
        supported_strategies:
          type: array
          items:
            type: string
      required:
      - next_action
      - supported_strategies
    verification_email_link:
      x-speakeasy-name-override: EmailLink
      type: object
      additionalProperties: false
      properties:
        object:
          type: string
          enum:
          - verification_email_link
        status:
          type: string
          enum:
          - unverified
          - verified
          - failed
          - expired
        strategy:
          type: string
          enum:
          - email_link
        attempts:
          type: integer
          nullable: true
        expire_at:
          type: integer
          nullable: true
        verified_at_client:
          type: string
          nullable: true
      required:
      - status
      - strategy
      - attempts
      - expire_at
    schemas-Client.Session:
      allOf:
      - $ref: '#/components/schemas/schemas-Client.SessionBase'
      - type: object
        properties:
          last_active_organization_id:
            type: string
            nullable: true
          user:
            $ref: '#/components/schemas/Client.User'
          public_user_data:
            type: object
            nullable: true
            allOf:
            - $ref: '#/components/schemas/Client.PublicUserData'
          factor_verification_age:
            type: array
            description: Each item represents the minutes that have passed since the last time a first or second factor were verified.
            items:
              type: integer
          created_at:
            type: integer
            format: int64
            description: Unix timestamp of creation.
            example: 1700690400000
          updated_at:
            type: integer
            format: int64
            description: Unix timestamp of last update.
            example: 1700690400000
        required:
        - last_active_organization_id
        - public_user_data
        - factor_verification_age
        - created_at
        - updated_at
    Client.SAMLAccount:
      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:
          - saml_account
        provider:
          type: string
        active:
          type: boolean
        email_address:
          type: string
        first_name:
          type: string
          nullable: true
        last_name:
          type: string
          nullable: true
        provider_user_id:
          description: The unique ID of the user in the external provider's system
          type: string
          nullable: true
        enterprise_connection_id:
          type: string
          nullable: true
        last_authenticated_at:
          type: integer
          format: int64
          nullable: true
          description: 'Unix timestamp of last authentication.

            '
        public_metadata:
          type: object
          additionalProperties: true
        verification:
          type: object
          nullable: true
          oneOf:
          - $ref: '#/components/schemas/Stubs.Verification.SAML'
          - $ref: '#/components/schemas/Stubs.Verification.Ticket'
        saml_connection:
          type: object
          nullable: true
          oneOf:
          - $ref: '#/components/schemas/Stubs.SAMLConnection.SAMLAccount'
      required:
      - id
      - object
      - provider
      - active
      - email_address
      - first_name
      - last_name
      - provider_user_id
      - public_metadata
      - saml_connection
      - verification
    schemas-Client.SessionBase:
      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:
          - session
        status:
          type: string
          enum:
          - active
          - revoked
          - ended
          - expired
          - removed
          - abandoned
          - pending
        expire_at:
          type: integer
          format: int64
        abandon_at:
          type: integer
          format: int64
        last_active_at:
          type: integer
          format: int64
        last_active_token:
          type: object
          nullable: true
          allOf:
          - $ref: '#/components/schemas/Token'
        actor:
          type: object
          nullable: true
          additionalProperties: true
        tasks:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/Client.SessionTask'
      required:
      - id
      - object
      - status
      - expire_at
      - abandon_at
      - last_active_at
    Stubs.Verification.OTP:
      type: object
      properties:
        object:
          type: string
          enum:
          - verification_otp
        status:
          type: string
          enum:
          - unverified
          - verified
          - failed
          - expired
        strategy:
          type: string
          enum:
          - phone_code
          - email_code
          - reset_password_email_code
          - reset_password_phone_code
        attempts:
          type: integer
          nullable: true
        expire_at:
          type: integer
      required:
      - status
      - strategy
      - expire_at
    Stubs.SignInFactor:
      type: object
      additionalProperties: false
      properties:
        strategy:
          type: string
          enum:
          - ticket
          - password
          - email_code
          - email_link
          - phone_code
          - web3_metamask_signature
          - web3_base_signature
          - web3_coinbase_wallet_signature
          - web3_okx_wallet_signature
          - web3_solana_signature
          - totp
          - backup_code
          - oauth_apple
          - oauth_google
          - oauth_facebook
          - oauth_hubspot
          - oauth_github
          - oauth_mock
          - oauth_custom_mock
          - oauth_token_mock
          - saml
          - enterprise_sso
          - reset_password_email_code
          - reset_password_phone_code
          - passkey
          - google_one_tap
        safe_identifier:
          type: string
        enterprise_connection_id:
          type: string
        enterprise_connection_name:
          type: string
        email_address_id:
          type: string
        phone_number_id:
          type: string
        web3_wallet_id:
          type: string
        passkey_id:
          type: string
        primary:
          type: boolean
          nullable: true
        external_verification_redirect_url:
          nullable: true
          type: string
        default:
          type: boolean
      required:
      - strategy
    Stubs.Verif

# --- truncated at 32 KB (71 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/clerk-com/refs/heads/main/openapi/clerk-com-email-addresses-api-openapi.yml