Get token supply composition
curl --request GET \
--url https://api.blank.build/api/v2/tokens/{mint}/supply-compositionimport requests
url = "https://api.blank.build/api/v2/tokens/{mint}/supply-composition"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.blank.build/api/v2/tokens/{mint}/supply-composition', 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.blank.build/api/v2/tokens/{mint}/supply-composition",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.blank.build/api/v2/tokens/{mint}/supply-composition"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.blank.build/api/v2/tokens/{mint}/supply-composition")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blank.build/api/v2/tokens/{mint}/supply-composition")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"authorities": {
"extensions": [
"<string>"
],
"freezeAuthority": "11111111111111111111111111111111",
"mintAuthority": "11111111111111111111111111111111",
"tokenProgram": "spl_token"
},
"available": true,
"buckets": [
{
"addresses": [
"11111111111111111111111111111111"
],
"amount": "1000000000",
"key": "curve_unsold",
"percentage": 123
}
],
"computedAt": "2023-11-07T05:31:56Z",
"lifecycle": "bonding",
"lpLock": {
"hasUnlockedLiquidity": true,
"isFullyPermanentlyLocked": true,
"permanentlyLockedBps": 1,
"poolAddress": "11111111111111111111111111111111",
"positionCount": 1
},
"mintAddress": "11111111111111111111111111111111",
"reads": "complete",
"slot": 1,
"tokenDecimals": 1,
"totalSupply": "1000000000",
"unavailableReason": "<string>",
"unreadBuckets": [
"curve_unsold"
]
}{
"code": "token_not_found",
"detail": "<string>",
"instance": "<string>",
"requestId": "req_0123456789abcdef0123456789abcdef",
"status": 404,
"title": "Token not found",
"type": "https://blank.build/docs/reference/errors#token_not_found",
"causes": [
{
"code": "invalid_api_key",
"detail": "<string>",
"title": "<string>",
"context": {}
}
],
"context": {},
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}{
"code": "validation_failed",
"detail": "<string>",
"instance": "<string>",
"requestId": "req_0123456789abcdef0123456789abcdef",
"status": 422,
"title": "Validation failed",
"type": "https://blank.build/docs/reference/errors#validation_failed",
"causes": [
{
"code": "invalid_api_key",
"detail": "<string>",
"title": "<string>",
"context": {}
}
],
"context": {},
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}{
"code": "rate_limit_exceeded",
"detail": "<string>",
"instance": "<string>",
"requestId": "req_0123456789abcdef0123456789abcdef",
"status": 429,
"title": "Rate limit exceeded",
"type": "https://blank.build/docs/reference/errors#rate_limit_exceeded",
"causes": [
{
"code": "invalid_api_key",
"detail": "<string>",
"title": "<string>",
"context": {}
}
],
"context": {},
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}{
"code": "internal_error",
"detail": "<string>",
"instance": "<string>",
"requestId": "req_0123456789abcdef0123456789abcdef",
"status": 500,
"title": "Internal server error",
"type": "https://blank.build/docs/reference/errors#internal_error",
"causes": [
{
"code": "invalid_api_key",
"detail": "<string>",
"title": "<string>",
"context": {}
}
],
"context": {},
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}{
"code": "rate_limit_unavailable",
"detail": "<string>",
"instance": "<string>",
"requestId": "req_0123456789abcdef0123456789abcdef",
"status": 503,
"title": "Rate limiting unavailable",
"type": "https://blank.build/docs/reference/errors#rate_limit_unavailable",
"causes": [
{
"code": "invalid_api_key",
"detail": "<string>",
"title": "<string>",
"context": {}
}
],
"context": {},
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}Market data
Get token supply composition
Accounts for the token’s full supply by bucket (liquidity pool, bonding curve and its reserved migration liquidity, vesting escrows, staking vault, free float), alongside LP permanent-lock status and mint authorities. Bucket amounts sum to totalSupply. Buckets with a zero balance are omitted. lifecycle is reported explicitly rather than inferred from which buckets are present. When a read fails, reads is “partial”, unreadBuckets names the affected buckets, and free_float is omitted rather than absorbing the balance that could not be read.
GET
/
tokens
/
{mint}
/
supply-composition
Get token supply composition
curl --request GET \
--url https://api.blank.build/api/v2/tokens/{mint}/supply-compositionimport requests
url = "https://api.blank.build/api/v2/tokens/{mint}/supply-composition"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.blank.build/api/v2/tokens/{mint}/supply-composition', 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.blank.build/api/v2/tokens/{mint}/supply-composition",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.blank.build/api/v2/tokens/{mint}/supply-composition"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.blank.build/api/v2/tokens/{mint}/supply-composition")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blank.build/api/v2/tokens/{mint}/supply-composition")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"authorities": {
"extensions": [
"<string>"
],
"freezeAuthority": "11111111111111111111111111111111",
"mintAuthority": "11111111111111111111111111111111",
"tokenProgram": "spl_token"
},
"available": true,
"buckets": [
{
"addresses": [
"11111111111111111111111111111111"
],
"amount": "1000000000",
"key": "curve_unsold",
"percentage": 123
}
],
"computedAt": "2023-11-07T05:31:56Z",
"lifecycle": "bonding",
"lpLock": {
"hasUnlockedLiquidity": true,
"isFullyPermanentlyLocked": true,
"permanentlyLockedBps": 1,
"poolAddress": "11111111111111111111111111111111",
"positionCount": 1
},
"mintAddress": "11111111111111111111111111111111",
"reads": "complete",
"slot": 1,
"tokenDecimals": 1,
"totalSupply": "1000000000",
"unavailableReason": "<string>",
"unreadBuckets": [
"curve_unsold"
]
}{
"code": "token_not_found",
"detail": "<string>",
"instance": "<string>",
"requestId": "req_0123456789abcdef0123456789abcdef",
"status": 404,
"title": "Token not found",
"type": "https://blank.build/docs/reference/errors#token_not_found",
"causes": [
{
"code": "invalid_api_key",
"detail": "<string>",
"title": "<string>",
"context": {}
}
],
"context": {},
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}{
"code": "validation_failed",
"detail": "<string>",
"instance": "<string>",
"requestId": "req_0123456789abcdef0123456789abcdef",
"status": 422,
"title": "Validation failed",
"type": "https://blank.build/docs/reference/errors#validation_failed",
"causes": [
{
"code": "invalid_api_key",
"detail": "<string>",
"title": "<string>",
"context": {}
}
],
"context": {},
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}{
"code": "rate_limit_exceeded",
"detail": "<string>",
"instance": "<string>",
"requestId": "req_0123456789abcdef0123456789abcdef",
"status": 429,
"title": "Rate limit exceeded",
"type": "https://blank.build/docs/reference/errors#rate_limit_exceeded",
"causes": [
{
"code": "invalid_api_key",
"detail": "<string>",
"title": "<string>",
"context": {}
}
],
"context": {},
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}{
"code": "internal_error",
"detail": "<string>",
"instance": "<string>",
"requestId": "req_0123456789abcdef0123456789abcdef",
"status": 500,
"title": "Internal server error",
"type": "https://blank.build/docs/reference/errors#internal_error",
"causes": [
{
"code": "invalid_api_key",
"detail": "<string>",
"title": "<string>",
"context": {}
}
],
"context": {},
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}{
"code": "rate_limit_unavailable",
"detail": "<string>",
"instance": "<string>",
"requestId": "req_0123456789abcdef0123456789abcdef",
"status": 503,
"title": "Rate limiting unavailable",
"type": "https://blank.build/docs/reference/errors#rate_limit_unavailable",
"causes": [
{
"code": "invalid_api_key",
"detail": "<string>",
"title": "<string>",
"context": {}
}
],
"context": {},
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}Path Parameters
Pattern:
^[1-9A-HJ-NP-Za-km-z]{32,44}$Example:
"11111111111111111111111111111111"
Response
Supply composition for the token.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Available options:
bonding, migrating, graduated Show child attributes
Show child attributes
Pattern:
^[1-9A-HJ-NP-Za-km-z]{32,44}$Example:
"11111111111111111111111111111111"
Available options:
complete, partial Required range:
x >= 0Required range:
x >= 0Pattern:
^(?:0|[1-9][0-9]*)$Example:
"1000000000"
Available options:
curve_unsold, curve_leftover, migration_reserve, pool_reserve, vesting_escrows, staking_vault, tokenomics_vault, fee_vault, free_float