Stytch Crypto Wallet API

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

Operations 2

POST /v1/crypto_wallets/authenticate/start Authenticatestart #
POST /v1/crypto_wallets/authenticate Authenticate #

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/stytch-crypto-wallet-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

stytch-crypto-wallet-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Stytch Consumer Authentication Crypto Wallet API
  version: 2.0.0
  description: Stytch's Consumer API for passwordless and password-based authentication. Supports Magic Links, SMS/email/WhatsApp OTP, OAuth social login, TOTP, WebAuthn/Passkeys, Crypto Wallets, Sessions, Users, M2M tokens, Fraud / Device Fingerprinting, Connected Apps (OAuth provider / MCP), Impersonation, IDP, and Consumer RBAC.
  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_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_OAuthAccessTokenExchangeFactor:
      type: object
      properties:
        client_id:
          type: string
          description: The ID of the Connected App client.
      required:
      - client_id
    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_InstagramOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_SteamOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_GitLabOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_crypto_wallet_v1_AuthenticateStartRequest:
      type: object
      properties:
        crypto_wallet_type:
          type: string
          description: The type of wallet to authenticate. Currently `ethereum` and `solana` are supported. Wallets for any EVM-compatible chains (such as Polygon or BSC) are also supported and are grouped under the `ethereum` type.
        crypto_wallet_address:
          type: string
          description: The crypto wallet address to authenticate.
        user_id:
          type: string
          description: The unique ID of a specific User. You may use an `external_id` here if one is set for the user.
        session_token:
          type: string
          description: The `session_token` associated with a User's existing Session.
        session_jwt:
          type: string
          description: The `session_jwt` associated with a User's existing Session.
        siwe_params:
          $ref: '#/components/schemas/api_crypto_wallet_v1_SIWEParams'
          description: The parameters for a Sign In With Ethereum (SIWE) message. May only be passed if the `crypto_wallet_type` is `ethereum`.
      description: Request type
      required:
      - crypto_wallet_type
      - crypto_wallet_address
    api_session_v1_SAMLSSOFactor:
      type: object
      properties:
        id:
          type: string
          description: The unique ID of an SSO Registration.
        provider_id:
          type: string
          description: Globally unique UUID that identifies a specific SAML Connection.
        external_id:
          type: string
          description: The ID of the member given by the identity provider.
      required:
      - id
      - provider_id
      - external_id
    api_session_v1_LinkedInOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    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_ImpersonatedFactor:
      type: object
      properties:
        impersonator_id:
          type: string
          description: For impersonated sessions initiated via the Stytch Dashboard, the `impersonator_id` will be the impersonator's Stytch Dashboard `member_id`.
        impersonator_email_address:
          type: string
          description: The email address of the impersonator.
      required:
      - impersonator_id
      - impersonator_email_address
    api_crypto_wallet_v1_SIWEParams:
      type: object
      properties:
        domain:
          type: string
          description: Only required if `siwe_params` is passed. The domain that is requesting the crypto wallet signature. Must be an RFC 3986 authority.
        uri:
          type: string
          description: Only required if `siwe_params` is passed. An RFC 3986 URI referring to the resource that is the subject of the signing.
        resources:
          type: array
          items:
            type: string
          description: ' A list of information or references to information the user wishes to have resolved as part of authentication. Every resource must be an RFC 3986 URI.'
        chain_id:
          type: string
          description: The EIP-155 Chain ID to which the session is bound. Defaults to 1. Must be the string representation of an integer between 1 and 9,223,372,036,854,775,771, inclusive.
        statement:
          type: string
          description: A human-readable ASCII assertion that the user will sign. The statement may only include reserved, unreserved, or space characters according to RFC 3986 definitions, and must not contain other forms of whitespace such as newlines, tabs, and carriage returns.
        issued_at:
          type: string
          description: The time when the message was generated. Defaults to the current time. All timestamps in our API conform to the RFC 3339 standard and are expressed in UTC, e.g. `2021-12-29T12:33:09Z`.
        not_before:
          type: string
          description: The time when the signed authentication message will become valid. Defaults to the current time. All timestamps in our API conform to the RFC 3339 standard and are expressed in UTC, e.g. `2021-12-29T12:33:09Z`.
        message_request_id:
          type: string
          description: A system-specific identifier that may be used to uniquely refer to the sign-in request. The `message_request_id` must be a valid pchar according to RFC 3986 definitions.
      required:
      - domain
      - uri
      - resources
    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_GoogleOAuthExchangeFactor:
      type: object
      properties:
        email_id:
          type: string
          description: The globally unique UUID of the Member's email.
      required:
      - email_id
    api_session_v1_FigmaOAuthFactor:
      type: object
      properties:
        id:
          type: string
        provider_subject:
          type: string
        email_id:
          type: string
      required:
      - id
      - provider_subject
    api_session_v1_MicrosoftOAuthFactor:
      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_OAuthProvider:
      type: object
      properties:
        provider_type:
          type: string
          description: Denotes the OAuth identity provider that the user has authenticated with, e.g. Google, Facebook, GitHub etc.
        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.
        profile_picture_url:
          type: string
          description: If available, the `profile_picture_url` is a url of the User's profile picture set in OAuth identity the provider that the User has authenticated with, e.g. Facebook profile picture.
        locale:
          type: string
          description: If available, the `locale` is the User's locale set in the OAuth identity provider that the user has authenticated with.
        oauth_user_registration_id:
          type: string
          description: The unique ID for an OAuth registration.
      required:
      - provider_type
      - provider_subject
      - profile_picture_url
      - locale
      - oauth_user_registration_id
    api_crypto_wallet_v1_AuthenticateRequest:
      type: object
      properties:
        crypto_wallet_type:
          type: string
          description: The type of wallet to authenticate. Currently `ethereum` and `solana` are supported. Wallets for any EVM-compatible chains (such as Polygon or BSC) are also supported and are grouped under the `ethereum` type.
        crypto_wallet_address:
          type: string
          description: The crypto wallet address to authenticate.
        signature:
          type: string
          description: The signature from the message challenge.
        session_token:
          type: string
          description: The `session_token` associated with a User's existing Session.
        session_duration_minutes:
          type: integer
          format: int32
          description: "Set the session lifetime to be this many minutes from now. This will start a new session if one doesn't already exist,\n  returning both an opaque `session_token` and `session_jwt` for this session. Remember that the `session_jwt` will have a fixed lifetime of\n  five minutes regardless of the underlying session duration, and will need to be refreshed over time.\n\n  This value must be a minimum of 5 and a maximum of 527040 minutes (366 days).\n\n  If a `session_token` or `session_jwt` is provided then a successful authentication will continue to extend the session this many minutes.\n\n  If the `session_duration_minutes` parameter is not specified, a Stytch session will not be created."
        session_jwt:
          type: string
          description: The `session_jwt` associated with a User's existing Session.
        session_custom_claims:
          type: object
          additionalProperties: true
          description: "Add a custom claims map to the Session being authenticated. Claims are only created if a Session is initialized by providing a value in `session_duration_minutes`. Claims will be included on the Session object and in the JWT. To update a key in an existing Session, supply a new value. To delete a key, supply a null value.\n\n  Custom claims made with reserved claims (\"iss\", \"sub\", \"aud\", \"exp\", \"nbf\", \"iat\", \"jti\") will be ignored. Total custom claims size cannot exceed four kilobytes."
        telemetry_id:
          type: string
          description: If the `telemetry_id` is passed, as part of this request, Stytch will call the [Fingerprint Lookup API](https://stytch.com/docs/fraud/api/fingerprint-lookup) and store the associated fingerprints and IPGEO information for the User. Your workspace must be enabled for Device Fingerprinting to use this feature.
      description: Request type
      required:
      - crypto_wallet_type
      - crypto_wallet_address
      - signature
    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_Session:
      type: object
      properties:
        session_id:
          type: string
          description: A unique identifier for a specific Session.
        user_id:
          type: string
          description: The unique ID of the affected User.
        authentication_factors:
          type: array
          items:
            $ref: '#/components/schemas/api_session_v1_AuthenticationFactor'
          description: An array of different authentication factors that comprise a Session.
        roles:
          type: array
          items:
            type: string
        started_at:
          type: string
          description: The timestamp when the Session was created. Values conform to the RFC 3339 standard and are expressed in UTC, e.g. `2021-12-29T12:33:09Z`.
        last_accessed_at:
          type: string
          description: The timestamp when the Session was last accessed. Values conform to the RFC 3339 standard and are expressed in UTC, e.g. `2021-12-29T12:33:09Z`.
        expires_at:
          type: string
          description: The timestamp when the Session expires. Values conform to the RFC 3339 standard and are expressed in UTC, e.g. `2021-12-29T12:33:09Z`.
        attributes:
          $ref: '#/components/schemas/api_attribute_v1_Attributes'
          description: Provided attributes help with fraud detection.
        custom_claims:
          type: object
          additionalProperties: true
          description: The custom claims map for a Session. Claims can be added to a session during a Sessions authenticate call.
      required:
      - session_id
      - user_id
      - authentication_factors
      - roles
    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 li

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