> ## 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.

# Verify Wallet (beta)

> Verifies a wallet signature. This endpoint will verify the signature signed by the wallet private key using the challenge presented by the `BeginWalletRegistration` endpoint for the wallet address specified. If signature is valid, we will return the wallet object with its associated user ID. If the wallet is not previously attached the the user initiating the wallet registration, the wallet will be attached to the user.
## Returns

A successful response returns a `Wallet` object.



## OpenAPI

````yaml post /v1/auth/wallets/verify
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/wallets/verify:
    parameters: []
    post:
      tags:
        - Wallets Login
      summary: Verify Wallet (beta)
      description: >-
        Verifies a wallet signature. This endpoint will verify the signature
        signed by the wallet private key using the challenge presented by the
        `BeginWalletRegistration` endpoint for the wallet address specified. If
        signature is valid, we will return the wallet object with its associated
        user ID. If the wallet is not previously attached the the user
        initiating the wallet registration, the wallet will be attached to the
        user.

        ## Returns


        A successful response returns a `Wallet` object.
      operationId: VerifyWallet
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VerifyWalletRequest'
            examples:
              VerifyWalletRegistrationReq:
                value:
                  wallet_type: ethereum
                  signature: >-
                    0xb27c94381c930151c4823fd4b7f0b45d700f0c9d30a7b98821413e07eef7604319a1dbc28dda881d0fc8d18b08aceeeb0fcdb80d6caec6f6e9901800c43894c31b
                  public_address: '0xF7E9D631bfBd90C19691566Db4AB96697A2663C6'
        description: ''
      responses:
        '200':
          description: Verify Wallet (beta) response
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  id:
                    type: string
                    minLength: 1
                  app_id:
                    type: string
                    minLength: 1
                  user_id:
                    type: string
                    minLength: 1
                  public_address:
                    type: string
                    minLength: 1
                  wallet_type:
                    type: string
                    minLength: 1
                  is_default:
                    type: boolean
                  is_ready_only:
                    type: boolean
                  is_imported:
                    type: boolean
                  updated_at:
                    type: number
                  created_at:
                    type: number
                  session_token:
                    type: string
                  session_jwt:
                    type: string
                  session:
                    $ref: '#/components/schemas/Session'
                required:
                  - id
                  - app_id
                  - user_id
                  - public_address
                  - wallet_type
                  - is_default
                  - is_ready_only
                  - is_imported
                  - updated_at
                  - created_at
              examples:
                VerifyWalletRegistrationResp:
                  value:
                    id: wallet_24tdfcVDSJQpK5huDnZaqPP2aiI
                    app_id: app_24ydphdixx2ydhF0E5WUFUKWNqi
                    user_id: user_24wFP9pDa9YiMJLun94iKykoZs2
                    public_address: '0xf7e9d631bfbd90c19691566db4ab96697a2663c6'
                    wallet_type: ethereum
                    is_default: false
                    is_ready_only: true
                    is_imported: true
                    updated_at: 1644453920
                    created_at: 1644453920
components:
  schemas:
    VerifyWalletRequest:
      description: ''
      type: object
      properties:
        wallet_type:
          type: string
          minLength: 1
          description: >-
            Determines the type of wallet to register. Possible values:
            ethereum, solana (more coming soon!).
        signature:
          type: string
          minLength: 1
          description: >-
            Signed message using the associated private key of the wallet
            address. We expect ethereum signed message to be base64 encoded
            (e.g. 0x...) and solana signed message will be bs58 encoded.
        public_address:
          type: string
          minLength: 1
          description: Public wallet address of the wallet.
        session_expires_in:
          type: number
          description: >-
            `Optional` Extend the session expiration time to N minutes from now,
            must be between 5 to 525600 minutes (365 days). This parameter will
            create a new session if there is no existing session along with a
            `session_token` and `session_jwt`. However, if a valid
            `session_token` or `session_jwt` is sent in, it will extend that
            session by the minutes specified. If not sent in, no session will be
            created by default.
        session_token:
          type: string
          description: '`Optional` Unique session token to verify.'
        session_jwt:
          type: string
          description: '`Optional` Unique Session JWT to verify.'
      required:
        - wallet_type
        - signature
        - public_address
    Session:
      description: ''
      type: object
      x-examples:
        Session:
          id: sess_24tZ6tlJ7CxlTwB6Zoj6SHQ9vU3
          user_id: user_24wFP9pDa9YiMJLun94iKykoZs2
          session_token: 7hssInGtOjKGUh8w7T4NjgLIKKSw6UdZ8uOduBYmJzrtfV6GrNtaUYoGehRS6jBh
          started_at: 1643496805
          expires_at: 1643502805
          last_active_at: 1643496805
          factors:
            - delivery_channel: sms
              type: otp
              method:
                method_id: pn_24oXBLRv6BoHXbNZoTAZkAFlRsy
                method_type: phone_number
                phone_number_id: pn_24oXBLRv6BoHXbNZoTAZkAFlRsy
                phone_number: '+14152222222'
                last_verified_at: 1643496805
          device_fingerprint:
            user_agent: ''
            ip: 123.2.1.1
          updated_at: 1643496805
          created_at: 1643496805
      title: Session
      properties:
        id:
          type: string
          minLength: 1
        user_id:
          type: string
          minLength: 1
        session_token:
          type: string
          minLength: 1
        started_at:
          type: number
        expires_at:
          type: number
        last_active_at:
          type: number
        factors:
          type: array
          uniqueItems: true
          minItems: 1
          items:
            type: object
            properties:
              delivery_channel:
                type: string
                minLength: 1
                description: >-
                  Delivery channel for this factor. Possible values: sms, email,
                  totp_authenticator, totp_recovery_code, google_oauth,
                  apple_oauth, microsoft_oauth, discord_oauth, okta_oauth,
                  github_oauth, slack_oauth, facebook_oauth,
                  webauthn_credential, eth_wallet, sol_wallet.
              type:
                type: string
                minLength: 1
                description: >-
                  Authentication type of factor. Possible values: otp, oauth,
                  wallet, totp, webauthn.
              method:
                type: object
                required:
                  - method_id
                  - method_type
                  - last_verified_at
                properties:
                  id:
                    type: string
                  method_id:
                    type: string
                    minLength: 1
                  method_type:
                    type: string
                    minLength: 1
                    description: >-
                      Identifier method type. Possible values: email, wallet,
                      phone_number, webauthn.
                  last_verified_at:
                    type: number
                  phone_number_id:
                    type: string
                    minLength: 1
                  phone_number:
                    type: string
                    minLength: 1
                  email_id:
                    type: string
                  email:
                    type: string
                  wallet_type:
                    type: string
                  wallet_id:
                    type: string
                  wallet_public_address:
                    type: string
                  totp_id:
                    type: string
                  webauthn_credential_id:
                    type: string
                  provider_subject:
                    type: string
            required:
              - delivery_channel
              - type
              - method
        device_fingerprint:
          type: object
          required:
            - user_agent
            - ip
          properties:
            user_agent:
              type: string
            ip:
              type: string
              minLength: 1
        updated_at:
          type: number
        created_at:
          type: number
      required:
        - id
        - user_id
        - session_token
        - started_at
        - expires_at
        - last_active_at
        - factors
        - device_fingerprint
        - updated_at
        - created_at
  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"
        ```

````