Skip to main content
Source OpenAPI: 0xArchive API 1.5.0; 140 paths; 119 component schemas. Verify a signed SIWE message, consume the single-use nonce, create or load the wallet user, and set auth cookies for browser/session flows. Use this with /v1/auth/web3/challenge; ordinary market-data clients should still use dashboard API keys in X-API-Key.

Route Metadata

FieldValue
MethodPOST
Path/v1/auth/web3/verify
operationIdweb3Verify
TagWeb3 Authentication
FamilyWeb3 Auth
Deprecated or legacyno

Request Body

application/json

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "web3Verify request body",
  "type": "object",
  "required": [
    "message",
    "signature"
  ],
  "properties": {
    "message": {
      "description": "SIWE message returned by `/v1/auth/web3/challenge` and signed by the wallet.",
      "type": "string"
    },
    "signature": {
      "description": "65-byte hex ECDSA signature, with or without 0x prefix.",
      "type": "string",
      "example": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
    }
  }
}

Response Contracts

Status 200

SIWE verification succeeded and session cookies were set.

application/json

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "web3Verify response 200",
  "description": "Successful SIWE verification response. The route also sets auth cookies for browser/session flows.",
  "type": "object",
  "required": [
    "is_new_user",
    "success",
    "user"
  ],
  "properties": {
    "is_new_user": {
      "description": "Whether the wallet user was created by this verification.",
      "type": "boolean",
      "example": false
    },
    "success": {
      "type": "boolean",
      "example": true
    },
    "user": {
      "type": "object",
      "required": [
        "email",
        "id",
        "tier",
        "wallet_address"
      ],
      "properties": {
        "email": {
          "description": "Account email associated with the wallet user.",
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "tier": {
          "description": "Current subscription tier.",
          "type": "string",
          "example": "free"
        },
        "wallet_address": {
          "description": "Authenticated wallet address.",
          "type": "string",
          "example": "0x742d35cc6634c0532925a3b844bc9e7595f2bd18"
        }
      }
    }
  }
}

Status 400

Invalid request

application/json

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "web3Verify response 400",
  "description": "Error response",
  "type": "object",
  "properties": {
    "code": {
      "description": "HTTP status code",
      "type": "integer"
    },
    "error": {
      "description": "Error message",
      "type": "string"
    }
  }
}
OpenAPI example
{
  "code": 400,
  "error": "Invalid request parameters"
}

Status 401

Authentication required

application/json

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "web3Verify response 401",
  "description": "Error response",
  "type": "object",
  "properties": {
    "code": {
      "description": "HTTP status code",
      "type": "integer"
    },
    "error": {
      "description": "Error message",
      "type": "string"
    }
  }
}
OpenAPI example
{
  "code": 401,
  "error": "Missing or invalid API key. Provide X-API-Key header."
}

Status 429

Rate limit exceeded

application/json

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "web3Verify response 429",
  "description": "Error response",
  "type": "object",
  "properties": {
    "code": {
      "description": "HTTP status code",
      "type": "integer"
    },
    "error": {
      "description": "Error message",
      "type": "string"
    }
  }
}
OpenAPI example
{
  "code": 429,
  "error": "Rate limit exceeded"
}
Last modified on June 19, 2026