curl --request POST \
--url https://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"wallet": "<string>",
"tokenMints": [
"<string>"
],
"maxTransactions": 10
}
'import requests
url = "https://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs"
payload = {
"wallet": "<string>",
"tokenMints": ["<string>"],
"maxTransactions": 10
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({wallet: '<string>', tokenMints: ['<string>'], maxTransactions: 10})
};
fetch('https://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs', 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/fee-share/deployer/claim-txs",
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([
'wallet' => '<string>',
'tokenMints' => [
'<string>'
],
'maxTransactions' => 10
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs"
payload := strings.NewReader("{\n \"wallet\": \"<string>\",\n \"tokenMints\": [\n \"<string>\"\n ],\n \"maxTransactions\": 10\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"wallet\": \"<string>\",\n \"tokenMints\": [\n \"<string>\"\n ],\n \"maxTransactions\": 10\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet\": \"<string>\",\n \"tokenMints\": [\n \"<string>\"\n ],\n \"maxTransactions\": 10\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"response": {
"wallet": "<string>",
"quoteMint": "So11111111111111111111111111111111111111112",
"transactions": [
{
"blockhash": {
"blockhash": "<string>",
"lastValidBlockHeight": 123
},
"transaction": "<string>"
}
],
"remainingTokenMints": [
"<string>"
],
"deferredClaims": [
{
"tokenMint": "<string>",
"protocol": "dbc",
"reason": "needs_wallet_sol",
"additionalSolLamports": "<string>"
}
],
"transactionVersion": 0
}
}{
"success": false,
"response": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"response": "<string>"
}{
"success": false,
"response": "<string>"
}Create Deployer Claim Transactions
Build a bounded batch of version-0, sponsor-partially-signed transactions for pending pool deployer fees and the aggregate SOL deployer vault. The wallet must sign. Sponsorship is repaid from proceeds, with existing wallet SOL covering any shortfall. Claims that cannot be safely funded or simulated are returned in deferredClaims. The planner does not rely on profits from earlier transactions in the same batch or spend the same aggregate vault balance twice. Each withdrawal drains the wallet-wide deployer vault even when tokenMints filters pool collection. maxTransactions limits returned transactions; at most 20 pool claim candidates are attempted per request. Confirm each returned transaction in order, then request a fresh batch for remaining claims. The response is not cached.
curl --request POST \
--url https://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"wallet": "<string>",
"tokenMints": [
"<string>"
],
"maxTransactions": 10
}
'import requests
url = "https://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs"
payload = {
"wallet": "<string>",
"tokenMints": ["<string>"],
"maxTransactions": 10
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({wallet: '<string>', tokenMints: ['<string>'], maxTransactions: 10})
};
fetch('https://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs', 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/fee-share/deployer/claim-txs",
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([
'wallet' => '<string>',
'tokenMints' => [
'<string>'
],
'maxTransactions' => 10
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs"
payload := strings.NewReader("{\n \"wallet\": \"<string>\",\n \"tokenMints\": [\n \"<string>\"\n ],\n \"maxTransactions\": 10\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"wallet\": \"<string>\",\n \"tokenMints\": [\n \"<string>\"\n ],\n \"maxTransactions\": 10\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api-v2.bags.fm/api/v1/fee-share/deployer/claim-txs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet\": \"<string>\",\n \"tokenMints\": [\n \"<string>\"\n ],\n \"maxTransactions\": 10\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"response": {
"wallet": "<string>",
"quoteMint": "So11111111111111111111111111111111111111112",
"transactions": [
{
"blockhash": {
"blockhash": "<string>",
"lastValidBlockHeight": 123
},
"transaction": "<string>"
}
],
"remainingTokenMints": [
"<string>"
],
"deferredClaims": [
{
"tokenMint": "<string>",
"protocol": "dbc",
"reason": "needs_wallet_sol",
"additionalSolLamports": "<string>"
}
],
"transactionVersion": 0
}
}{
"success": false,
"response": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"response": "<string>"
}{
"success": false,
"response": "<string>"
}transaction, must retain its sponsor signature, and requires the deployer wallet’s signature. Confirm the batch before requesting the next one.
A tokenMints filter limits pending pool collection; every vault withdrawal still drains the wallet-wide deployer balance. See Deployer Fees for signing, funding, and retry handling.Authorizations
API key authentication. Provide your API key as the header value.
Body
Deployer wallet that will receive the fees and must sign every returned transaction. An API key alone cannot authorize withdrawal.
Optional filter of 1–20 base mints whose pending pool fees should be collected. Omit to consider all discovered tokens. This does not restrict the wallet-wide vault withdrawal.
1 - 20 elementsMaximum number of returned transactions, from 1 to 20; defaults to 10. At most 20 pool claim candidates are attempted per request, independently of this response limit. Deferred candidates do not consume transaction slots.
1 <= x <= 20