Get claimable positions
curl --request GET \
--url https://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions \
--header 'x-api-key: <api-key>'import requests
url = "https://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions', 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://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"response": [
{
"isCustomFeeVault": true,
"baseMint": "<string>",
"isMigrated": true,
"totalClaimableLamportsUserShare": 123,
"programId": "<string>",
"quoteMint": "<string>",
"virtualPool": "<string>",
"virtualPoolAddress": "<string>",
"virtualPoolClaimableAmount": 123,
"virtualPoolClaimableLamportsUserShare": 123,
"dammPoolClaimableAmount": 123,
"dammPoolClaimableLamportsUserShare": 123,
"dammPoolAddress": "<string>",
"dammPositionInfo": {
"position": "<string>",
"pool": "<string>",
"positionNftAccount": "<string>",
"tokenAMint": "<string>",
"tokenBMint": "<string>",
"tokenAVault": "<string>",
"tokenBVault": "<string>"
},
"claimableDisplayAmount": 123,
"user": "<string>",
"claimerIndex": 123,
"userBps": 123,
"customFeeVault": "<string>",
"customFeeVaultClaimerA": "<string>",
"customFeeVaultClaimerB": "<string>",
"customFeeVaultClaimerSide": "A"
}
]
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}Fee Claiming
Get Claimable Positions
Retrieve normal creator/recipient claimable fee positions for a wallet. SOL fee-share v2 totals include only normal recipient earnings and user fee vault balances; separate deployer pending fees and aggregate vault balances are excluded. Use GET /fee-share/deployer/claimable-positions for deployer revenue.
GET
/
token-launch
/
claimable-positions
Get claimable positions
curl --request GET \
--url https://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions \
--header 'x-api-key: <api-key>'import requests
url = "https://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions', 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://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api-v2.bags.fm/api/v1/token-launch/claimable-positions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"response": [
{
"isCustomFeeVault": true,
"baseMint": "<string>",
"isMigrated": true,
"totalClaimableLamportsUserShare": 123,
"programId": "<string>",
"quoteMint": "<string>",
"virtualPool": "<string>",
"virtualPoolAddress": "<string>",
"virtualPoolClaimableAmount": 123,
"virtualPoolClaimableLamportsUserShare": 123,
"dammPoolClaimableAmount": 123,
"dammPoolClaimableLamportsUserShare": 123,
"dammPoolAddress": "<string>",
"dammPositionInfo": {
"position": "<string>",
"pool": "<string>",
"positionNftAccount": "<string>",
"tokenAMint": "<string>",
"tokenBMint": "<string>",
"tokenAVault": "<string>",
"tokenBVault": "<string>"
},
"claimableDisplayAmount": 123,
"user": "<string>",
"claimerIndex": 123,
"userBps": 123,
"customFeeVault": "<string>",
"customFeeVaultClaimerA": "<string>",
"customFeeVaultClaimerB": "<string>",
"customFeeVaultClaimerSide": "A"
}
]
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}Returns normal creator/recipient claimable fee positions for a wallet. Use this to inspect position details and claimable amounts before claiming.
Separate SOL deployer earnings are returned by Get Deployer Claimable Positions. They are excluded from this endpoint’s totals.
This endpoint is optional for claiming fees. The v3 claim endpoint handles position lookup automatically — you only need this if you want to inspect positions beforehand.
Authorizations
API key authentication. Provide your API key as the header value.
Query Parameters
Public key of the wallet to check for claimable positions
