Dispenser
curl --request POST \
--url https://api.compose.market/api/dispenser/claim \
--header 'Content-Type: application/json' \
--data '
{
"address": "<string>",
"chainId": 123
}
'import requests
url = "https://api.compose.market/api/dispenser/claim"
payload = {
"address": "<string>",
"chainId": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({address: '<string>', chainId: 123})
};
fetch('https://api.compose.market/api/dispenser/claim', 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.compose.market/api/dispenser/claim",
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([
'address' => '<string>',
'chainId' => 123
]),
CURLOPT_HTTPHEADER => [
"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.compose.market/api/dispenser/claim"
payload := strings.NewReader("{\n \"address\": \"<string>\",\n \"chainId\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
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.compose.market/api/dispenser/claim")
.header("Content-Type", "application/json")
.body("{\n \"address\": \"<string>\",\n \"chainId\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.compose.market/api/dispenser/claim")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"address\": \"<string>\",\n \"chainId\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"alreadyClaimed": true,
"claimAmount": 123
}Payments & x402
Dispenser
Claim and inspect test funding dispenser status.
POST
/
api
/
dispenser
/
claim
Dispenser
curl --request POST \
--url https://api.compose.market/api/dispenser/claim \
--header 'Content-Type: application/json' \
--data '
{
"address": "<string>",
"chainId": 123
}
'import requests
url = "https://api.compose.market/api/dispenser/claim"
payload = {
"address": "<string>",
"chainId": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({address: '<string>', chainId: 123})
};
fetch('https://api.compose.market/api/dispenser/claim', 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.compose.market/api/dispenser/claim",
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([
'address' => '<string>',
'chainId' => 123
]),
CURLOPT_HTTPHEADER => [
"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.compose.market/api/dispenser/claim"
payload := strings.NewReader("{\n \"address\": \"<string>\",\n \"chainId\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
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.compose.market/api/dispenser/claim")
.header("Content-Type", "application/json")
.body("{\n \"address\": \"<string>\",\n \"chainId\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.compose.market/api/dispenser/claim")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"address\": \"<string>\",\n \"chainId\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"alreadyClaimed": true,
"claimAmount": 123
}Dispenser routes support the public funding flow used by development and onboarding clients.
Routes
| Method | Path | Description |
|---|---|---|
POST | /api/dispenser/claim | Claim USDC for one address and chain. |
GET | /api/dispenser/status | Return status for all configured dispensers. |
GET | /api/dispenser/status/{chainId} | Return status for one chain. |
GET | /api/dispenser/check/{address} | Check whether an address has claimed. |
Claim body
string
required
EVM address. Invalid formats return
400.number
required
Chain ID to claim on.
Response
boolean
Whether the claim succeeded.
boolean
Present when the address already claimed.
number
The all-chain status route returns
1000000, equal to $1.00 USDC.⌘I