Stytch Crypto Wallet API

The Crypto Wallet API from Stytch — 2 operation(s) for crypto wallet.

OpenAPI Specification

stytch-crypto-wallet-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Stytch B2B Authentication Application Crypto Wallet API
  version: 2.0.0
  description: Stytch's B2B API for multi-tenant authentication. Supports Organizations, Members, SSO (SAML/OIDC), Magic Links, OTP, OAuth, Discovery, Sessions, B2B RBAC, SCIM, TOTP, Recovery Codes, Passwords, Impersonation, and the B2B IDP.
  contact:
    name: Stytch
    url: https://stytch.com/docs
  license:
    name: Proprietary
servers:
- url: https://api.stytch.com
  description: Production
- url: https://test.stytch.com
  description: Test
tags:
- name: Crypto Wallet
paths:
  /v1/crypto_wallets/authenticate/start:
    post:
      summary: Authenticatestart
      operationId: api_crypto_wallet_v1_AuthenticateStart
      tags:
      - Crypto Wallet
      description: 'Initiate the authentication of a crypto wallet. After calling this endpoint, the user will need to sign a message containing the returned `challenge` field.


        For Ethereum crypto wallets, you can optionally use the Sign In With Ethereum (SIWE) protocol for the message by passing in the `siwe_params`. The only required fields are `domain` and `uri`.

        If the crypto wallet detects that the domain in the message does not match the website''s domain, it will display a warning to the user.


        If not using the SIWE protocol, the message will simply consist of the project name and a random string.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/api_crypto_wallet_v1_AuthenticateStartRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_crypto_wallet_v1_AuthenticateStartResponse'
        '400':
          description: Bad request
        '401':
          description: Unauthorized
          content:
            application/json:
              example:
                status_code: 401
                request_id: request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141
                error_type: unauthorized_credentials
                error_message: Unauthorized credentials.
                error_url: https://stytch.com/docs/api/errors/401
        '429':
          description: Too Many Requests
          content:
            application/json:
              example:
                status_code: 429
                request_id: request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141
                error_type: too_many_requests
                error_message: Too many requests have been made.
                error_url: https://stytch.com/docs/api/errors/429
        '500':
          description: Internal server error
          content:
            application/json:
              example:
                status_code: 500
                request_id: request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141
                error_type: internal_server_error
                error_message: Oops, something seems to have gone wrong, please reach out to support@stytch.com to let us know what went wrong.
                error_url: https://stytch.com/docs/api/errors/500
      x-code-samples:
      - lang: csharp
        label: C#
        source: "// POST /v1/crypto_wallets/authenticate/start\nconst stytch = require('stytch');\n\nconst client = new stytch.Client({\n  project_id: '${projectId}',\n  secret: '${secret}',\n});\n\nconst params = {\n  crypto_wallet_type: \"ethereum\",\n  crypto_wallet_address: \"${exampleEthereumAddress}\",\n};\n\nclient.CryptoWallets.AuthenticateStart(params)\n  .then(resp => { console.log(resp) })\n  .catch(err => { console.log(err) });"
      - lang: go
        label: Go
        source: "// POST /v1/crypto_wallets/authenticate/start\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\n\t\"github.com/stytchauth/stytch-go/v17/stytch/consumer/cryptowallets\"\n\t\"github.com/stytchauth/stytch-go/v17/stytch/consumer/stytchapi\"\n)\n\nfunc main() {\n\tclient, err := stytchapi.NewClient(\n\t\t\"${projectId}\",\n\t\t\"${secret}\",\n\t)\n\tif err != nil {\n\t\tlog.Fatalf(\"error instantiating client: %v\", err)\n\t}\n\n\tparams := &cryptowallets.AuthenticateStartParams{\n\t\tCryptoWalletType:    \"ethereum\",\n\t\tCryptoWalletAddress: \"${exampleEthereumAddress}\",\n\t}\n\n\tresp, err := client.CryptoWallets.AuthenticateStart(context.Background(), params)\n\tif err != nil {\n\t\tlog.Fatalf(\"error in method call: %v\", err)\n\t}\n\n\tlog.Println(resp)\n}\n"
      - lang: java
        label: Java
        source: "// POST /v1/crypto_wallets/authenticate/start\npackage com.example;\n\nimport com.stytch.java.common.StytchResult;\nimport com.stytch.java.consumer.models.cryptowallets.AuthenticateStartRequest;\nimport com.stytch.java.consumer.StytchClient;\n\npublic class Main {\n    public static void main(String[] args) {\n        StytchClient.configure(\"${projectId}\", \"${secret}\");\n\n        AuthenticateStartRequest params = new AuthenticateStartRequest();\n        params.setCryptoWalletType(\"ethereum\");\n        params.setCryptoWalletAddress(\"${exampleEthereumAddress}\");\n\n        Object result = StytchClient.getCryptoWallets().authenticateStart(params);\n        if (result instanceof StytchResult.Success) {\n          System.out.println(((StytchResult.Success) result).getValue());\n        } else {\n          System.out.println(((StytchResult.Error) result).getException());\n        }\n    }\n}"
      - lang: kotlin
        label: Kotlin
        source: "// POST /v1/crypto_wallets/authenticate/start\npackage com.example\n\nimport com.stytch.java.consumer.StytchClient\nimport com.stytch.java.consumer.models.cryptowallets.AuthenticateStartRequest\n\nfun main() {\n    StytchClient.configure(\n        projectId = \"${projectId}\",\n        secret = \"${secret}\",\n    )\n\n    when (\n        val result =\n            StytchClient.cryptoWallets.authenticateStart(\n                AuthenticateStartRequest(\n                    cryptoWalletType = \"ethereum\",\n                    cryptoWalletAddress = \"${exampleEthereumAddress}\",\n                ),\n            )\n    ) {\n        is StytchResult.Success -> println(result.value)\n        is StytchResult.Error -> println(result.exception)\n    }\n}\n"
      - lang: javascript
        label: Node.js
        source: "// POST /v1/crypto_wallets/authenticate/start\nconst stytch = require('stytch');\n\nconst client = new stytch.Client({\n  project_id: '${projectId}',\n  secret: '${secret}',\n});\n\nconst params = {\n  crypto_wallet_type: \"ethereum\",\n  crypto_wallet_address: \"${exampleEthereumAddress}\",\n};\n\nclient.cryptoWallets.authenticateStart(params)\n  .then(resp => { console.log(resp) })\n  .catch(err => { console.log(err) });"
      - lang: php
        label: PHP
        source: "$response = $client->crypto_wallets->authenticate_start([\n    'crypto_wallet_type' => 'ethereum',\n    'crypto_wallet_address' => '${exampleEthereumAddress}',\n]);"
      - lang: python
        label: Python
        source: "# POST /v1/crypto_wallets/authenticate/start\nfrom stytch import Client\n\nclient = Client(\n    project_id=\"${projectId}\",\n    secret=\"${secret}\",\n)\n\nresp = client.crypto_wallets.authenticate_start(\n    crypto_wallet_type=\"ethereum\",\n    crypto_wallet_address=\"${exampleEthereumAddress}\",\n)\n\nprint(resp)\n"
      - lang: ruby
        label: Ruby
        source: "# POST /v1/crypto_wallets/authenticate/start\nrequire 'stytch'\n\nclient = Stytch::Client.new(\n  project_id: \"${projectId}\",\n  secret: \"${secret}\"\n)\n\nresp = client.crypto_wallets.authenticate_start(\n  crypto_wallet_type: \"ethereum\",\n  crypto_wallet_address: \"${exampleEthereumAddress}\"\n  \n)\n\nputs resp"
      - lang: rust
        label: Rust
        source: "// POST /v1/crypto_wallets/authenticate/start\nuse stytch::consumer::client::Client;\nuse stytch::consumer::crypto_wallets::AuthenticateStartRequest;\n\nfn main() {\n    let client = Client::new(\"${projectId}\", \"${secret}\").unwrap();\n    let resp = client.crypto_wallets.authenticate_start(\n        AuthenticateStartRequest{\n            crypto_wallet_type: \"ethereum\",\n            crypto_wallet_address: \"${exampleEthereumAddress}\",\n            ..Default::default()\n        }\n    ).await;\n    println!(\"The response is {:?}\", resp);\n}"
      - lang: bash
        label: cURL
        source: "# POST /v1/crypto_wallets/authenticate/start\ncurl --request POST \\\n  --url https://test.stytch.com/v1/crypto_wallets/authenticate/start \\\n  -u '${projectId}:${secret}' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"crypto_wallet_type\": \"ethereum\",\n    \"crypto_wallet_address\": \"${exampleEthereumAddress}\"\n  }'"
  /v1/crypto_wallets/authenticate:
    post:
      summary: Authenticate
      operationId: api_crypto_wallet_v1_Authenticate
      tags:
      - Crypto Wallet
      description: Complete the authentication of a crypto wallet by passing the signature.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/api_crypto_wallet_v1_AuthenticateRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_crypto_wallet_v1_AuthenticateResponse'
        '400':
          description: Bad request
        '401':
          description: Unauthorized
          content:
            application/json:
              example:
                status_code: 401
                request_id: request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141
                error_type: unauthorized_credentials
                error_message: Unauthorized credentials.
                error_url: https://stytch.com/docs/api/errors/401
        '429':
          description: Too Many Requests
          content:
            application/json:
              example:
                status_code: 429
                request_id: request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141
                error_type: too_many_requests
                error_message: Too many requests have been made.
                error_url: https://stytch.com/docs/api/errors/429
        '500':
          description: Internal server error
          content:
            application/json:
              example:
                status_code: 500
                request_id: request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141
                error_type: internal_server_error
                error_message: Oops, something seems to have gone wrong, please reach out to support@stytch.com to let us know what went wrong.
                error_url: https://stytch.com/docs/api/errors/500
      x-code-samples:
      - lang: csharp
        label: C#
        source: "// POST /v1/crypto_wallets/authenticate\nconst stytch = require('stytch');\n\nconst client = new stytch.Client({\n  project_id: '${projectId}',\n  secret: '${secret}',\n});\n\nconst params = {\n  crypto_wallet_type: \"ethereum\",\n  crypto_wallet_address: \"${exampleEthereumAddress}\",\n  signature: \"${exampleEthereumSignature}\",\n  session_duration_minutes: 60,\n};\n\nclient.CryptoWallets.Authenticate(params)\n  .then(resp => { console.log(resp) })\n  .catch(err => { console.log(err) });"
      - lang: go
        label: Go
        source: "// POST /v1/crypto_wallets/authenticate\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\n\t\"github.com/stytchauth/stytch-go/v17/stytch/consumer/cryptowallets\"\n\t\"github.com/stytchauth/stytch-go/v17/stytch/consumer/stytchapi\"\n)\n\nfunc main() {\n\tclient, err := stytchapi.NewClient(\n\t\t\"${projectId}\",\n\t\t\"${secret}\",\n\t)\n\tif err != nil {\n\t\tlog.Fatalf(\"error instantiating client: %v\", err)\n\t}\n\n\tparams := &cryptowallets.AuthenticateParams{\n\t\tCryptoWalletType:       \"ethereum\",\n\t\tCryptoWalletAddress:    \"${exampleEthereumAddress}\",\n\t\tSignature:              \"${exampleEthereumSignature}\",\n\t\tSessionDurationMinutes: 60,\n\t}\n\n\tresp, err := client.CryptoWallets.Authenticate(context.Background(), params)\n\tif err != nil {\n\t\tlog.Fatalf(\"error in method call: %v\", err)\n\t}\n\n\tlog.Println(resp)\n}\n"
      - lang: java
        label: Java
        source: "// POST /v1/crypto_wallets/authenticate\npackage com.example;\n\nimport com.stytch.java.common.StytchResult;\nimport com.stytch.java.consumer.models.cryptowallets.AuthenticateRequest;\nimport com.stytch.java.consumer.StytchClient;\n\npublic class Main {\n    public static void main(String[] args) {\n        StytchClient.configure(\"${projectId}\", \"${secret}\");\n\n        AuthenticateRequest params = new AuthenticateRequest();\n        params.setCryptoWalletType(\"ethereum\");\n        params.setCryptoWalletAddress(\"${exampleEthereumAddress}\");\n        params.setSignature(\"${exampleEthereumSignature}\");\n        params.setSessionDurationMinutes(60);\n\n        Object result = StytchClient.getCryptoWallets().authenticate(params);\n        if (result instanceof StytchResult.Success) {\n          System.out.println(((StytchResult.Success) result).getValue());\n        } else {\n          System.out.println(((StytchResult.Error) result).getException());\n        }\n    }\n}"
      - lang: kotlin
        label: Kotlin
        source: "// POST /v1/crypto_wallets/authenticate\npackage com.example\n\nimport com.stytch.java.consumer.StytchClient\nimport com.stytch.java.consumer.models.cryptowallets.AuthenticateRequest\n\nfun main() {\n    StytchClient.configure(\n        projectId = \"${projectId}\",\n        secret = \"${secret}\",\n    )\n\n    when (\n        val result =\n            StytchClient.cryptoWallets.authenticate(\n                AuthenticateRequest(\n                    cryptoWalletType = \"ethereum\",\n                    cryptoWalletAddress = \"${exampleEthereumAddress}\",\n                    signature = \"${exampleEthereumSignature}\",\n                    sessionDurationMinutes = 60,\n                ),\n            )\n    ) {\n        is StytchResult.Success -> println(result.value)\n        is StytchResult.Error -> println(result.exception)\n    }\n}\n"
      - lang: javascript
        label: Node.js
        source: "// POST /v1/crypto_wallets/authenticate\nconst stytch = require('stytch');\n\nconst client = new stytch.Client({\n  project_id: '${projectId}',\n  secret: '${secret}',\n});\n\nconst params = {\n  crypto_wallet_type: \"ethereum\",\n  crypto_wallet_address: \"${exampleEthereumAddress}\",\n  signature: \"${exampleEthereumSignature}\",\n  session_duration_minutes: 60,\n};\n\nclient.cryptoWallets.authenticate(params)\n  .then(resp => { console.log(resp) })\n  .catch(err => { console.log(err) });"
      - lang: php
        label: PHP
        source: "$response = $client->crypto_wallets->authenticate([\n    'crypto_wallet_type' => 'ethereum',\n    'crypto_wallet_address' => '${exampleEthereumAddress}',\n    'signature' => '${exampleEthereumSignature}',\n    'session_duration_minutes' => 60,\n]);"
      - lang: python
        label: Python
        source: "# POST /v1/crypto_wallets/authenticate\nfrom stytch import Client\n\nclient = Client(\n    project_id=\"${projectId}\",\n    secret=\"${secret}\",\n)\n\nresp = client.crypto_wallets.authenticate(\n    crypto_wallet_type=\"ethereum\",\n    crypto_wallet_address=\"${exampleEthereumAddress}\",\n    signature=\"${exampleEthereumSignature}\",\n    session_duration_minutes=60,\n)\n\nprint(resp)\n"
      - lang: ruby
        label: Ruby
        source: "# POST /v1/crypto_wallets/authenticate\nrequire 'stytch'\n\nclient = Stytch::Client.new(\n  project_id: \"${projectId}\",\n  secret: \"${secret}\"\n)\n\nresp = client.crypto_wallets.authenticate(\n  crypto_wallet_type: \"ethereum\",\n  crypto_wallet_address: \"${exampleEthereumAddress}\",\n  signature: \"${exampleEthereumSignature}\",\n  session_duration_minutes: 60\n  \n)\n\nputs resp"
      - lang: rust
        label: Rust
        source: "// POST /v1/crypto_wallets/authenticate\nuse stytch::consumer::client::Client;\nuse stytch::consumer::crypto_wallets::AuthenticateRequest;\n\nfn main() {\n    let client = Client::new(\"${projectId}\", \"${secret}\").unwrap();\n    let resp = client.crypto_wallets.authenticate(\n        AuthenticateRequest{\n            crypto_wallet_type: \"ethereum\",\n            crypto_wallet_address: \"${exampleEthereumAddress}\",\n            signature: \"${exampleEthereumSignature}\",\n            session_duration_minutes: 60,\n            ..Default::default()\n        }\n    ).await;\n    println!(\"The response is {:?}\", resp);\n}"
      - lang: bash
        label: cURL
        source: "# POST /v1/crypto_wallets/authenticate\ncurl --request POST \\\n  --url https://test.stytch.com/v1/crypto_wallets/authenticate \\\n  -u '${projectId}:${secret}' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"crypto_wallet_type\": \"ethereum\",\n    \"crypto_wallet_address\": \"${exampleEthereumAddress}\",\n    \"signature\": \"${exampleEthereumSignature}\",\n    \"session_duration_minutes\": 60\n  }'"
components:
  schemas:
    api_session_v1_SlackOAuthFactor:
      type: object
      properties:
        id:
          type: string
          description: The unique ID of an OAuth registration.
        provider_subject:
          type: string
          description: The unique identifier for the User within a given OAuth provider. Also commonly called the `sub` or "Subject field" in OAuth protocols.
        email_id:
          type: string
          description: The globally unique UUID of the Member's email.
      required:
      - id
      - provider_subject
    api_session_v1_HubspotOAuthFactor:
      type: object
      properties:
        id:
          type: string
          description: The unique ID of an OAuth registration.
        provider_subject:
          type: string
          description: The unique identifier for the User within a given OAuth provider. Also commonly called the `sub` or "Subject field" in OAuth protocols.
        email_id:
          type: string
          description: The globally unique UUID of the Member's email.
      required:
      - id
      - provider_subject
    api_session_v1_TwitchOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_EmbeddableMagicLinkFactor:
      type: object
      properties:
        embedded_id:
          type: string
      required:
      - embedded_id
    api_session_v1_EmailFactor:
      type: object
      properties:
        email_id:
          type: string
          description: The globally unique UUID of the Member's email.
        email_address:
          type: string
          description: The email address of the Member.
      required:
      - email_id
      - email_address
    api_device_history_v1_DeviceInfo:
      type: object
      properties:
        visitor_id:
          type: string
          description: The `visitor_id` (a unique identifier) of the user's device. See the [Device Fingerprinting documentation](https://stytch.com/docs/fraud/guides/device-fingerprinting/fingerprints) for more details on the `visitor_id`.
        visitor_id_details:
          $ref: '#/components/schemas/api_device_history_v1_DeviceAttributeDetails'
          description: Information about the `visitor_id`.
        ip_address:
          type: string
          description: The IP address of the user's device.
        ip_address_details:
          $ref: '#/components/schemas/api_device_history_v1_DeviceAttributeDetails'
          description: Information about the `ip_address`.
        ip_geo_city:
          type: string
          description: The city where the IP address is located.
        ip_geo_region:
          type: string
          description: The region where the IP address is located.
        ip_geo_country:
          type: string
          description: The country code where the IP address is located.
        ip_geo_country_details:
          $ref: '#/components/schemas/api_device_history_v1_DeviceAttributeDetails'
          description: Information about the `ip_geo_country`.
      required:
      - visitor_id
    api_session_v1_SteamOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_user_v1_BiometricRegistration:
      type: object
      properties:
        biometric_registration_id:
          type: string
          description: The unique ID for a biometric registration.
        verified:
          type: boolean
          description: The verified boolean denotes whether or not this send method, e.g. phone number, email address, etc., has been successfully authenticated by the User.
      required:
      - biometric_registration_id
      - verified
    api_session_v1_BitbucketOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_OAuthAccessTokenExchangeFactor:
      type: object
      properties:
        client_id:
          type: string
          description: The ID of the Connected App client.
      required:
      - client_id
    api_session_v1_DiscordOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_TrustedAuthTokenFactor:
      type: object
      properties:
        token_id:
          type: string
          description: The ID of the trusted auth token.
      required:
      - token_id
    api_session_v1_AppleOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_ShopifyOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_SalesforceOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_AmazonOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_attribute_v1_Attributes:
      type: object
      properties:
        ip_address:
          type: string
          description: The IP address of the user.
        user_agent:
          type: string
          description: The user agent of the User.
    api_session_v1_YahooOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_TwitterOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_AuthenticationFactorDeliveryMethod:
      type: string
      enum:
      - email
      - sms
      - whatsapp
      - embedded
      - oauth_google
      - oauth_microsoft
      - oauth_apple
      - webauthn_registration
      - authenticator_app
      - oauth_github
      - recovery_code
      - oauth_facebook
      - crypto_wallet
      - oauth_amazon
      - oauth_bitbucket
      - oauth_coinbase
      - oauth_discord
      - oauth_figma
      - oauth_gitlab
      - oauth_instagram
      - oauth_linkedin
      - oauth_shopify
      - oauth_slack
      - oauth_snapchat
      - oauth_spotify
      - oauth_steam
      - oauth_tiktok
      - oauth_twitch
      - oauth_twitter
      - knowledge
      - biometric
      - sso_saml
      - sso_oidc
      - oauth_salesforce
      - oauth_yahoo
      - oauth_hubspot
      - imported_auth0
      - oauth_exchange_slack
      - oauth_exchange_hubspot
      - oauth_exchange_github
      - oauth_exchange_google
      - impersonation
      - oauth_access_token_exchange
      - trusted_token_exchange
    api_session_v1_AuthenticationFactorType:
      type: string
      enum:
      - magic_link
      - otp
      - oauth
      - webauthn
      - totp
      - crypto
      - password
      - signature_challenge
      - sso
      - imported
      - recovery_codes
      - email_otp
      - impersonated
      - trusted_auth_token
    api_user_v1_TOTP:
      type: object
      properties:
        totp_id:
          type: string
          description: The unique ID for a TOTP instance.
        verified:
          type: boolean
          description: The verified boolean denotes whether or not this send method, e.g. phone number, email address, etc., has been successfully authenticated by the User.
      required:
      - totp_id
      - verified
    api_session_v1_GoogleOAuthFactor:
      type: object
      properties:
        id:
          type: string
          description: The unique ID of an OAuth registration.
        provider_subject:
          type: string
          description: The unique identifier for the User within a given OAuth provider. Also commonly called the `sub` or "Subject field" in OAuth protocols.
        email_id:
          type: string
          description: The globally unique UUID of the Member's email.
      required:
      - id
      - provider_subject
    api_user_v1_Name:
      type: object
      properties:
        first_name:
          type: string
          description: The first name of the user.
        middle_name:
          type: string
          description: The middle name(s) of the user.
        last_name:
          type: string
          description: The last name of the user.
    api_user_v1_PhoneNumber:
      type: object
      properties:
        phone_id:
          type: string
          description: The unique ID for the phone number.
        phone_number:
          type: string
          description: The phone number.
        verified:
          type: boolean
          description: The verified boolean denotes whether or not this send method, e.g. phone number, email address, etc., has been successfully authenticated by the User.
      required:
      - phone_id
      - phone_number
      - verified
    api_session_v1_SpotifyOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_user_v1_CryptoWallet:
      type: object
      properties:
        crypto_wallet_id:
          type: string
          description: The unique ID for a crypto wallet
        crypto_wallet_address:
          type: string
          description: The actual blockchain address of the User's crypto wallet.
        crypto_wallet_type:
          type: string
          description: The blockchain that the User's crypto wallet operates on, e.g. Ethereum, Solana, etc.
        verified:
          type: boolean
          description: The verified boolean denotes whether or not this send method, e.g. phone number, email address, etc., has been successfully authenticated by the User.
      required:
      - crypto_wallet_id
      - crypto_wallet_address
      - crypto_wallet_type
      - verified
    api_user_v1_User:
      type: object
      properties:
        user_id:
          type: string
          description: The unique ID of the affected User.
        emails:
          type: array
          items:
            $ref: '#/components/schemas/api_user_v1_Email'
          description: An array of email objects for the User.
        status:
          type: string
          description: The status of the User. The possible values are `pending` and `active`.
        phone_numbers:
          type: array
          items:
            $ref: '#/components/schemas/api_user_v1_PhoneNumber'
          description: An array of phone number objects linked to the User.
        webauthn_registrations:
          type: array
          items:
            $ref: '#/components/schemas/api_user_v1_WebAuthnRegistration'
          description: An array that contains a list of all Passkey or WebAuthn registrations for a given User in the Stytch API.
        providers:
          type: array
          items:
            $ref: '#/components/schemas/api_user_v1_OAuthProvider'
          description: An array of OAuth `provider` objects linked to the User.
        totps:
          type: array
          items:
            $ref: '#/components/schemas/api_user_v1_TOTP'
          description: An array containing a list of all TOTP instances for a given User in the Stytch API.
        crypto_wallets:
          type: array
          items:
            $ref: '#/components/schemas/api_user_v1_CryptoWallet'
          description: An array contains a list of all crypto wallets for a given User in the Stytch API.
        biometric_registrations:
          type: array
          items:
            $ref: '#/components/schemas/api_user_v1_BiometricRegistration'
          description: An array that contains a list of all biometric registrations for a given User in the Stytch API.
        is_locked:
          type: boolean
          description: Whether the User is temporarily locked due to too many failed authentication attempts. See the [User Locking Guide](https://stytch.com/docs/resources/platform/user-locks) for more information.
        roles:
          type: array
          items:
            type: string
          description: "Roles assigned to this User.\n   See the [RBAC guide](https://stytch.com/docs/guides/rbac/role-assignment) for more information about role assignment."
        name:
          $ref: '#/components/schemas/api_user_v1_Name'
          description: The name of the User. Each field in the `name` object is optional.
        created_at:
          type: string
          description: The timestamp of the User's creation. Values conform to the RFC 3339 standard and are expressed in UTC, e.g. `2021-12-29T12:33:09Z`.
        password:
          $ref: '#/components/schemas/api_user_v1_Password'
          description: The password object is returned for users with a password.
        trusted_metadata:
          type: object
          additionalProperties: true
          description: The `trusted_metadata` field contains an arbitrary JSON object of application-specific data. See the [Metadata](https://stytch.com/docs/api/metadata) reference for complete field behavior details.
        untrusted_metadata:
          type: object
          additionalProperties: true
          description: The `untrusted_metadata` field contains an arbitrary JSON object of application-specific data. Untrusted metadata can be edited by end users directly via the SDK, and **cannot be used to store critical information.** See the [Metadata](https://stytch.com/docs/api/metadata) reference for complete field behavior details.
        external_id:
          type: string
          description: An identifier that can be used in most API calls where a `member_id` is expected. This is a string consisting of alphanumeric, `.`, `_`, `-`, or `|` characters with a maximum length of 128 characters. External IDs must be unique within the project.
        lock_created_at:
          type: string
          description: When the user lock was created, if there is one. Values conform to the RFC 3339 standard and are expressed in UTC, e.g. `2021-12-29T12:33:09Z`.
        lock_expires_at:
          type: string
          description: When the user lock expires, if there is one. Values conform to the RFC 3339 standard and are expressed in UTC, e.g. `2021-12-29T12:33:09Z`.
      required:
      - user_id
      - emails
      - status
      - phone_numbers
      - webauthn_registrations
     

# --- truncated at 32 KB (63 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/stytch/refs/heads/main/openapi/stytch-crypto-wallet-api-openapi.yml