CoinList Wallet Ownership API

The Wallet Ownership API from CoinList — 1 operation(s) for wallet ownership.

OpenAPI Specification

coinlist-wallet-ownership-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Frontline DocumentSubmissions Wallet Ownership API
  version: 0.1.0
servers:
- url: https://api.coinlist.co
  variables: {}
security: []
tags:
- name: Wallet Ownership
paths:
  /v1/wallet-ownership:
    post:
      callbacks: {}
      operationId: createWalletOwnershipChallenge
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWalletOwnershipChallengeRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/CreateWalletOwnershipChallengeRequest'
        description: Wallet ownership challenge params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletOwnershipChallenge'
          description: Successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Error response.
      security:
      - OAuth2: []
      summary: Request a wallet ownership challenge
      tags:
      - Wallet Ownership
components:
  schemas:
    CreateWalletOwnershipChallengeRequest:
      additionalProperties: false
      description: 'Creates a wallet ownership challenge. Two modes are supported:

        - **plain** (default): produces a random nonce. Only `wallet_address` and `chain` are required. `domain`, `uri`, and `statement` must not be provided.

        - **siwe**: produces an EIP-4361 Sign-In with Ethereum message. Requires `domain`, `uri`, and `statement` in addition to `wallet_address` and `chain`. Only supported for EVM chains.

        '
      properties:
        chain:
          description: The blockchain network the wallet belongs to. EVM chains (e.g. `ethereum_sepolia`) support both plain and SIWE challenges. Non-EVM chains (e.g. `solana_devnet`) support plain challenges only.
          enum:
          - ethereum_sepolia
          - base_sepolia
          - solana_devnet
          - ethereum_mainnet
          - base_mainnet
          - solana_mainnet
          example: ethereum_sepolia
          type: string
          x-struct: null
          x-validate: null
        challenge_type:
          default: plain
          description: The type of challenge to generate. `plain` (default) produces a random nonce. `siwe` produces an EIP-4361 message and requires `domain`, `uri`, and `statement`.
          enum:
          - plain
          - siwe
          example: plain
          type: string
          x-struct: null
          x-validate: null
        domain:
          description: Required when `challenge_type` is `siwe`; must not be provided for plain challenges. The hostname of the requesting service. Must be a valid hostname (e.g. `example.com` or `app.example.com:3000`).
          example: example.com
          type: string
          x-struct: null
          x-validate: null
        statement:
          description: Required when `challenge_type` is `siwe`; must not be provided for plain challenges. A human-readable message the user is agreeing to. Must not contain newlines. Maximum 256 characters.
          example: Sign in with Ethereum
          maxLength: 256
          type: string
          x-struct: null
          x-validate: null
        uri:
          description: Required when `challenge_type` is `siwe`; must not be provided for plain challenges. The URI of the resource being accessed. Must be a valid URI with scheme and host.
          example: https://example.com/login
          type: string
          x-struct: null
          x-validate: null
        wallet_address:
          description: The wallet address to prove ownership of. For EVM chains, must be a valid 40-hex-digit Ethereum address (normalized to lowercase). For non-EVM chains, must not contain whitespace and is limited to 128 characters.
          example: '0x742d35cc6634c0532925a3b844bc9e7595f0beb1'
          type: string
          x-struct: null
          x-validate: null
      required:
      - wallet_address
      - chain
      title: CreateWalletOwnershipChallengeRequest
      type: object
      x-struct: Elixir.FrontlineAPIWeb.OpenApi.Schemas.CreateWalletOwnershipChallengeRequest
      x-validate: null
    Error:
      additionalProperties: false
      properties:
        code:
          description: A human-readable message providing more details about the error.
          type: string
          x-struct: null
          x-validate: null
        errors:
          additionalProperties:
            items:
              type: string
              x-struct: null
              x-validate: null
            type: array
            x-struct: null
            x-validate: null
          type: object
          x-struct: null
          x-validate: null
        event_id:
          description: The unique identifier for the error event. This is useful for tracking and debugging.
          type: string
          x-struct: null
          x-validate: null
        message:
          description: For some errors that could be handled programmatically, a short string indicating the error code reported.
          type: string
          x-struct: null
          x-validate: null
        type:
          description: The type of error returned. One of `api_error`, `invalid_request_error`
          enum:
          - api_error
          - invalid_request_error
          type: string
          x-struct: null
          x-validate: null
      required:
      - type
      - message
      title: Error
      type: object
      x-struct: Elixir.FrontlineAPIWeb.OpenApi.Schemas.ApiError
      x-validate: null
    WalletOwnershipChallenge:
      additionalProperties: false
      properties:
        expires_at:
          description: When the challenge expires
          example: '2025-01-01T00:00:00.000000Z'
          format: date-time
          type: string
          x-struct: null
          x-validate: null
        message:
          description: The challenge message to sign
          type: string
          x-struct: null
          x-validate: null
      required:
      - message
      - expires_at
      title: WalletOwnershipChallenge
      type: object
      x-struct: Elixir.FrontlineAPIWeb.OpenApi.Schemas.WalletOwnershipChallenge
      x-validate: null
  securitySchemes:
    OAuth2:
      description: OAuth 2.0 authorization and token endpoints
      flows:
        authorizationCode:
          authorizationUrl: /oauth/authorize
          refreshUrl: /oauth/token
          scopes: {}
          tokenUrl: /oauth/token
        clientCredentials:
          refreshUrl: /oauth/token
          scopes: {}
          tokenUrl: /oauth/token
      type: oauth2
    TokenAuth:
      description: Session token for user authentication during OAuth authorization
      scheme: bearer
      type: http