> ## Documentation Index
> Fetch the complete documentation index at: https://docs.passage.coinlist.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Allow a wallet address for an offer



## OpenAPI

````yaml /api-reference/openapi.json post /v1/offers/{offer_id}/allow-wallet
openapi: 3.0.0
info:
  title: Frontline API
  version: 0.1.0
servers:
  - url: https://api.coinlist.co
    variables: {}
security: []
tags:
  - name: DocumentSubmissions
  - name: KYC
  - name: OAuth
  - name: Offers
  - name: Participations
  - name: Pii
  - name: Requirements
  - name: Swap
  - name: Token
  - name: Wallet
  - name: Wallet Ownership
paths:
  /v1/offers/{offer_id}/allow-wallet:
    post:
      tags:
        - Offers
      summary: Allow a wallet address for an offer
      operationId: allowWallet
      parameters:
        - description: The ID of the offer
          in: path
          name: offer_id
          required: true
          schema:
            type: string
            x-struct: null
            x-validate: null
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AllowWalletRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/AllowWalletRequest'
        description: Allow wallet params
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllowWalletResponse'
          description: Successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Error response.
      callbacks: {}
      security:
        - OAuth2: []
components:
  schemas:
    AllowWalletRequest:
      allOf:
        - $ref: '#/components/schemas/VerifyOwnershipRequest'
      description: >
        Verifies wallet ownership via a previously generated challenge, then
        checks if the wallet

        is already allowed for the offer. If already allowed, returns 200 with
        an empty JSON object.

        Otherwise starts the supplier verification process and returns an
        encoded transaction

        to broadcast.
      title: AllowWalletRequest
      type: object
      x-struct: Elixir.FrontlineAPIWeb.OpenApi.Schemas.AllowWalletRequest
      x-validate: null
    AllowWalletResponse:
      discriminator:
        mapping:
          broadcast_transaction:
            $ref: '#/components/schemas/AllowWalletBroadcastTransactionResponse'
          none:
            $ref: '#/components/schemas/AllowWalletAlreadyAllowedResponse'
        propertyName: action
      oneOf:
        - $ref: '#/components/schemas/AllowWalletBroadcastTransactionResponse'
        - $ref: '#/components/schemas/AllowWalletAlreadyAllowedResponse'
      title: AllowWalletResponse
      x-struct: Elixir.FrontlineAPIWeb.OpenApi.Schemas.AllowWalletResponse
      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
    VerifyOwnershipRequest:
      description: Parameters consumed by VerifyOwnershipPlug to verify wallet ownership.
      properties:
        chain:
          description: The blockchain network the wallet belongs to.
          enum:
            - ethereum_sepolia
            - base_sepolia
            - solana_devnet
            - ethereum_mainnet
            - base_mainnet
            - solana_mainnet
          example: ethereum_sepolia
          type: string
          x-struct: null
          x-validate: null
        signature:
          description: The cryptographic signature of the challenge message.
          example: '0xdeadbeef'
          type: string
          x-struct: null
          x-validate: null
        wallet_address:
          description: >-
            The wallet address to verify. For EVM chains, must be a valid
            Ethereum address (normalized to lowercase).
          example: '0x742d35cc6634c0532925a3b844bc9e7595f0beb1'
          type: string
          x-struct: null
          x-validate: null
      required:
        - wallet_address
        - chain
        - signature
      title: VerifyOwnershipRequest
      type: object
      x-struct: Elixir.FrontlineAPIWeb.OpenApi.Schemas.VerifyOwnershipRequest
      x-validate: null
    AllowWalletBroadcastTransactionResponse:
      properties:
        action:
          enum:
            - broadcast_transaction
          type: string
          x-struct: null
          x-validate: null
        data:
          description: >-
            The encoded transaction to broadcast on-chain to complete wallet
            allowlisting.
          type: string
          x-struct: null
          x-validate: null
        to:
          description: The contract address to submit the transaction to.
          type: string
          x-struct: null
          x-validate: null
      required:
        - action
        - to
        - data
      title: AllowWalletBroadcastTransactionResponse
      type: object
      x-struct: >-
        Elixir.FrontlineAPIWeb.OpenApi.Schemas.AllowWalletBroadcastTransactionResponse
      x-validate: null
    AllowWalletAlreadyAllowedResponse:
      properties:
        action:
          enum:
            - none
          type: string
          x-struct: null
          x-validate: null
        already_allowed:
          description: >-
            True when the wallet is already allowed and no transaction is
            needed.
          type: boolean
          x-struct: null
          x-validate: null
      required:
        - action
        - already_allowed
      title: AllowWalletAlreadyAllowedResponse
      type: object
      x-struct: Elixir.FrontlineAPIWeb.OpenApi.Schemas.AllowWalletAlreadyAllowedResponse
      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

````