> ## Documentation Index
> Fetch the complete documentation index at: https://docs.streambird.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Login or Create User by Email OTP

> Create an OTP (one-time passcode) to the provided email for login verification. If no user account exists for the provided email, a new user will be created and email OTP sent.
## Returns

A successful response returns an object with `user_id`, `user_created` status indicating if the user has been newly created, and `email_id` properties.



## OpenAPI

````yaml post /v1/auth/otps/email/login_or_create
openapi: 3.1.0
info:
  title: MoonKey Auth API
  description: >-
    Explore all the details of MoonKey Auth API. All of our APIs are RESTful and
    accept and return JSON.
  version: v1
servers:
  - url: https://api.moonkey.fun
    description: Production
    variables: {}
security:
  - Authorization: []
tags:
  - name: Users
    description: User management API
  - name: Magic Links
    description: ''
  - name: OTPs
    description: >-
      Send OTP (One-time passcodes) by all the supported delivery methods such
      as SMS, email.
  - name: OAuth
    description: ''
  - name: Wallets Login
    description: ''
  - name: Managed Wallets
    description: ''
  - name: Wallet Import
    description: >-
      Import existing wallets into the platform using secure HPKE encryption.
      This flow ensures raw entropy (seed phrases or private keys) never touches
      the server in plaintext.
externalDocs:
  url: ''
  description: ''
paths:
  /v1/auth/otps/email/login_or_create:
    post:
      tags:
        - OTPs
      summary: Login or Create User by Email OTP
      description: >-
        Create an OTP (one-time passcode) to the provided email for login
        verification. If no user account exists for the provided email, a new
        user will be created and email OTP sent.

        ## Returns


        A successful response returns an object with `user_id`, `user_created`
        status indicating if the user has been newly created, and `email_id`
        properties.
      operationId: LoginOrCreateUserByEmailOtp
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginOrCreateUserByEmailOtpRequest'
            examples:
              LoginOrCreateUserByEmailReq:
                value:
                  email: sandbox@moonkey.fun
                  expires_in: 3
        description: ''
      responses:
        '200':
          description: Login or Create User by Email OTP response
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  user_id:
                    type: string
                    minLength: 1
                  email_id:
                    type: string
                    minLength: 1
                  status:
                    type: string
                  user_created:
                    type: boolean
                required:
                  - user_id
                  - email_id
                  - status
                  - user_created
              examples:
                LoginOrCreateUserByEmailResp:
                  value:
                    user_id: user_24wFP9pDa9YiMJLun94iKykoZs2
                    status: pending
                    user_created: true
                    email_id: email_24oXBL3PufzHkH1Jzyjc2EXYeo7
components:
  schemas:
    LoginOrCreateUserByEmailOtpRequest:
      description: ''
      type: object
      properties:
        email:
          type: string
          minLength: 1
          description: Email that uniquely identifies the user.
        expires_in:
          type: number
          description: >-
            Expiration time of the OTP in minutes. Must be between 1 to 10
            minutes, defaults to 1 minute.
        requires_verification:
          type: boolean
          description: >-
            Determines if verification for the authentication method (email,
            phone_number) is required before marking the user as active.
        device_fingerprint:
          type: object
          description: >-
            Device fingerprinting metadata for fraud detection during
            verification step. This is useful to ensure that the user who
            originated the request matches the user that verifies the token.
            Verification requirements can be enabled in the `Verify OTP` step by
            matching fields in the `device_fingerprint` such as IP, User Agent
            or the combination of them (more fraud detection features **coming
            soon**!)
          properties:
            ip:
              type: string
              description: IP of the user originating the request.
            user_agent:
              type: string
              description: User Agent of the browser originating the request.
      required:
        - email
  securitySchemes:
    Authorization:
      type: http
      scheme: bearer
      description: >-
        Auth Platform API includes all the Auth related features. All Users,
        Phone Numbers, Emails, and OTPs are associated with an `App` as the
        container.


        Endpoints only accept App's `Secret API keys` other than certain
        endpoints that are used client side or via SDK that accept the
        `public_token`.


        ## Authentication using App Api Key


        ## Header:


        ```

        Authorization: Bearer {api_key}

        ```


        ## Authenticated Request


        ```curl

        curl \
          -X GET https://api.moonkey.fun/v1/auth/users/user_24wFP9pDa9YiMJLun94iKykoZs2 \
          -H "Authorization: Bearer sk_test_pRqweh3wvWmJAAVYv7Z0T5iPLzFM4ql0muoyQcjOxGeN3p1r"
        ```

````