Allow a wallet address for an offer
curl --request POST \
--url https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"chain": "ethereum_sepolia",
"signature": "0xdeadbeef",
"wallet_address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb1"
}
'import requests
url = "https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet"
payload = {
"chain": "ethereum_sepolia",
"signature": "0xdeadbeef",
"wallet_address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb1"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
chain: 'ethereum_sepolia',
signature: '0xdeadbeef',
wallet_address: '0x742d35cc6634c0532925a3b844bc9e7595f0beb1'
})
};
fetch('https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'chain' => 'ethereum_sepolia',
'signature' => '0xdeadbeef',
'wallet_address' => '0x742d35cc6634c0532925a3b844bc9e7595f0beb1'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet"
payload := strings.NewReader("{\n \"chain\": \"ethereum_sepolia\",\n \"signature\": \"0xdeadbeef\",\n \"wallet_address\": \"0x742d35cc6634c0532925a3b844bc9e7595f0beb1\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"ethereum_sepolia\",\n \"signature\": \"0xdeadbeef\",\n \"wallet_address\": \"0x742d35cc6634c0532925a3b844bc9e7595f0beb1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"chain\": \"ethereum_sepolia\",\n \"signature\": \"0xdeadbeef\",\n \"wallet_address\": \"0x742d35cc6634c0532925a3b844bc9e7595f0beb1\"\n}"
response = http.request(request)
puts response.read_body{
"action": "broadcast_transaction",
"data": "<string>",
"to": "<string>"
}{
"message": "<string>",
"type": "api_error",
"code": "<string>",
"errors": {},
"event_id": "<string>"
}Offers
Allow a wallet address for an offer
POST
/
v1
/
offers
/
{offer_id}
/
allow-wallet
Allow a wallet address for an offer
curl --request POST \
--url https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"chain": "ethereum_sepolia",
"signature": "0xdeadbeef",
"wallet_address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb1"
}
'import requests
url = "https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet"
payload = {
"chain": "ethereum_sepolia",
"signature": "0xdeadbeef",
"wallet_address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb1"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
chain: 'ethereum_sepolia',
signature: '0xdeadbeef',
wallet_address: '0x742d35cc6634c0532925a3b844bc9e7595f0beb1'
})
};
fetch('https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'chain' => 'ethereum_sepolia',
'signature' => '0xdeadbeef',
'wallet_address' => '0x742d35cc6634c0532925a3b844bc9e7595f0beb1'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet"
payload := strings.NewReader("{\n \"chain\": \"ethereum_sepolia\",\n \"signature\": \"0xdeadbeef\",\n \"wallet_address\": \"0x742d35cc6634c0532925a3b844bc9e7595f0beb1\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"ethereum_sepolia\",\n \"signature\": \"0xdeadbeef\",\n \"wallet_address\": \"0x742d35cc6634c0532925a3b844bc9e7595f0beb1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coinlist.co/v1/offers/{offer_id}/allow-wallet")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"chain\": \"ethereum_sepolia\",\n \"signature\": \"0xdeadbeef\",\n \"wallet_address\": \"0x742d35cc6634c0532925a3b844bc9e7595f0beb1\"\n}"
response = http.request(request)
puts response.read_body{
"action": "broadcast_transaction",
"data": "<string>",
"to": "<string>"
}{
"message": "<string>",
"type": "api_error",
"code": "<string>",
"errors": {},
"event_id": "<string>"
}Authorizations
OAuth 2.0 authorization and token endpoints
Path Parameters
The ID of the offer
Body
application/jsonapplication/x-www-form-urlencoded
Allow wallet params
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.
The blockchain network the wallet belongs to.
Available options:
ethereum_sepolia, base_sepolia, solana_devnet, ethereum_mainnet, base_mainnet, solana_mainnet Example:
"ethereum_sepolia"
The cryptographic signature of the challenge message.
Example:
"0xdeadbeef"
The wallet address to verify. For EVM chains, must be a valid Ethereum address (normalized to lowercase).
Example:
"0x742d35cc6634c0532925a3b844bc9e7595f0beb1"
Response
Successful response.
- AllowWalletBroadcastTransactionResponse
- AllowWalletAlreadyAllowedResponse