---
title: "Connect a proven external wallet to an offer option"
method: POST
path: "/v1/offers/{offer_id}/addresses"
tags: ["Offers"]
---

# Connect a proven external wallet to an offer option

`POST /v1/offers/{offer_id}/addresses`

For options without a whitelisted-wallet requirement, submitting when a wallet is already connected updates the existing binding in place, keeping its id. Options with a whitelisted-wallet requirement accumulate wallets up to the requirement's max_wallets and then reject with `max_wallets_reached`.

## Path parameters

- `offer_id` string, required

## Request body

- CreateOfferOptionAddressRequest — Connects a proven external wallet to an offer option. Requires a previously generated, unconsumed wallet-ownership challenge for the same wallet and chain. The signature is verified and the single-use challenge consumed during ownership verification, before the bind. A rejected bind does not roll back the consume, so the user re-signs to retry.
  - `chain` 'ethereum_sepolia' | 'base_sepolia' | 'solana_devnet' | 'ethereum_mainnet' | 'base_mainnet' | 'solana_mainnet', required — The blockchain network the wallet belongs to.
  - `offer_option_id` string, required — The ID of the offer option to connect the wallet to.
  - `signature` string, required — The cryptographic signature of the challenge message.
  - `wallet_address` string, required — The external wallet address. For EVM chains, must be a valid Ethereum address (normalized to lowercase).

## Response `200`

Successful response.

- OfferOptionAddress — A user's proven external wallet connected to an offer option.
  - `address` string, required — The connected external wallet address.
  - `created_at` string, date-time, required — When the binding was created.
  - `id` string, required — Unique identifier for the object.
  - `offer_option_id` string, required — The ID of the offer option.
  - `protocol` 'ethereum' | 'solana', required — The protocol the binding is scoped to. An EVM address binds once per option regardless of which EVM chain proved ownership.

## Other responses

- `default` — Error response.

---

[API](https://skmtc.dev/coinlist/apis/frontline-api.md) · [All operations](https://skmtc.dev/coinlist/apis/frontline-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/coinlist/frontline-api/revisions/fa411ea1bdfb/schema)
