curl --request POST \
--url https://public-api-v2.bags.fm/api/v1/fee-share/admin/update-config/v2 \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"baseMint": "<string>",
"payer": "<string>",
"claimersArray": [
"<string>"
],
"basisPointsArray": [
5000
],
"feeLimits": [
{
"asset": {
"mint": "<string>",
"tokenProgram": "<string>"
},
"basisPoints": 5000,
"maximumFeeRaw": "<string>"
}
],
"additionalLookupTables": [
"<string>"
]
}
'import requests
url = "https://public-api-v2.bags.fm/api/v1/fee-share/admin/update-config/v2"
payload = {
"baseMint": "<string>",
"payer": "<string>",
"claimersArray": ["<string>"],
"basisPointsArray": [5000],
"feeLimits": [
{
"asset": {
"mint": "<string>",
"tokenProgram": "<string>"
},
"basisPoints": 5000,
"maximumFeeRaw": "<string>"
}
],
"additionalLookupTables": ["<string>"]
}
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({
baseMint: '<string>',
payer: '<string>',
claimersArray: ['<string>'],
basisPointsArray: [5000],
feeLimits: [
{
asset: {mint: '<string>', tokenProgram: '<string>'},
basisPoints: 5000,
maximumFeeRaw: '<string>'
}
],
additionalLookupTables: ['<string>']
})
};
fetch('https://public-api-v2.bags.fm/api/v1/fee-share/admin/update-config/v2', 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/admin/update-config/v2",
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([
'baseMint' => '<string>',
'payer' => '<string>',
'claimersArray' => [
'<string>'
],
'basisPointsArray' => [
5000
],
'feeLimits' => [
[
'asset' => [
'mint' => '<string>',
'tokenProgram' => '<string>'
],
'basisPoints' => 5000,
'maximumFeeRaw' => '<string>'
]
],
'additionalLookupTables' => [
'<string>'
]
]),
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/admin/update-config/v2"
payload := strings.NewReader("{\n \"baseMint\": \"<string>\",\n \"payer\": \"<string>\",\n \"claimersArray\": [\n \"<string>\"\n ],\n \"basisPointsArray\": [\n 5000\n ],\n \"feeLimits\": [\n {\n \"asset\": {\n \"mint\": \"<string>\",\n \"tokenProgram\": \"<string>\"\n },\n \"basisPoints\": 5000,\n \"maximumFeeRaw\": \"<string>\"\n }\n ],\n \"additionalLookupTables\": [\n \"<string>\"\n ]\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/admin/update-config/v2")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"baseMint\": \"<string>\",\n \"payer\": \"<string>\",\n \"claimersArray\": [\n \"<string>\"\n ],\n \"basisPointsArray\": [\n 5000\n ],\n \"feeLimits\": [\n {\n \"asset\": {\n \"mint\": \"<string>\",\n \"tokenProgram\": \"<string>\"\n },\n \"basisPoints\": 5000,\n \"maximumFeeRaw\": \"<string>\"\n }\n ],\n \"additionalLookupTables\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api-v2.bags.fm/api/v1/fee-share/admin/update-config/v2")
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 \"baseMint\": \"<string>\",\n \"payer\": \"<string>\",\n \"claimersArray\": [\n \"<string>\"\n ],\n \"basisPointsArray\": [\n 5000\n ],\n \"feeLimits\": [\n {\n \"asset\": {\n \"mint\": \"<string>\",\n \"tokenProgram\": \"<string>\"\n },\n \"basisPoints\": 5000,\n \"maximumFeeRaw\": \"<string>\"\n }\n ],\n \"additionalLookupTables\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"response": {
"contractVersion": 1,
"operation": {
"kind": "config",
"baseMint": "<string>",
"flow": "dbc"
},
"asset": {
"mint": "<string>",
"tokenProgram": "<string>",
"decimals": 123
},
"feeLimits": [
{
"asset": {
"mint": "<string>",
"tokenProgram": "<string>"
},
"basisPoints": 5000,
"maximumFeeRaw": "<string>"
}
],
"transactions": [
{
"id": "<string>",
"kind": "config",
"dependsOn": [
"<string>"
],
"format": "v0",
"encoding": "base64",
"transaction": "<string>",
"messageSha256": "<string>",
"requiredSigners": [
"<string>"
],
"lifetime": {
"blockhash": "<string>",
"lastValidBlockHeight": "<string>"
},
"budget": {
"computeUnitLimit": 123,
"loadedAccountsDataSizeLimit": 123,
"priorityFee": {
"unit": "total_lamports",
"amount": "<string>"
}
},
"size": {
"bytes": 123,
"accounts": 123,
"signatures": 123
}
}
],
"readiness": {
"status": "ready"
}
}
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}Create custom quote Fee Share config update plan
Update the claimer/BPS recipients of a custom quote fee share config. Returns a staged transaction plan: sign and send the entries in response.transactions in order. If response.readiness.status is setup_required, confirm the setup transaction(s) first, then call this endpoint again to fetch the rebuilt plan. The caller must own the config’s manager wallet.
curl --request POST \
--url https://public-api-v2.bags.fm/api/v1/fee-share/admin/update-config/v2 \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"baseMint": "<string>",
"payer": "<string>",
"claimersArray": [
"<string>"
],
"basisPointsArray": [
5000
],
"feeLimits": [
{
"asset": {
"mint": "<string>",
"tokenProgram": "<string>"
},
"basisPoints": 5000,
"maximumFeeRaw": "<string>"
}
],
"additionalLookupTables": [
"<string>"
]
}
'import requests
url = "https://public-api-v2.bags.fm/api/v1/fee-share/admin/update-config/v2"
payload = {
"baseMint": "<string>",
"payer": "<string>",
"claimersArray": ["<string>"],
"basisPointsArray": [5000],
"feeLimits": [
{
"asset": {
"mint": "<string>",
"tokenProgram": "<string>"
},
"basisPoints": 5000,
"maximumFeeRaw": "<string>"
}
],
"additionalLookupTables": ["<string>"]
}
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({
baseMint: '<string>',
payer: '<string>',
claimersArray: ['<string>'],
basisPointsArray: [5000],
feeLimits: [
{
asset: {mint: '<string>', tokenProgram: '<string>'},
basisPoints: 5000,
maximumFeeRaw: '<string>'
}
],
additionalLookupTables: ['<string>']
})
};
fetch('https://public-api-v2.bags.fm/api/v1/fee-share/admin/update-config/v2', 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/admin/update-config/v2",
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([
'baseMint' => '<string>',
'payer' => '<string>',
'claimersArray' => [
'<string>'
],
'basisPointsArray' => [
5000
],
'feeLimits' => [
[
'asset' => [
'mint' => '<string>',
'tokenProgram' => '<string>'
],
'basisPoints' => 5000,
'maximumFeeRaw' => '<string>'
]
],
'additionalLookupTables' => [
'<string>'
]
]),
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/admin/update-config/v2"
payload := strings.NewReader("{\n \"baseMint\": \"<string>\",\n \"payer\": \"<string>\",\n \"claimersArray\": [\n \"<string>\"\n ],\n \"basisPointsArray\": [\n 5000\n ],\n \"feeLimits\": [\n {\n \"asset\": {\n \"mint\": \"<string>\",\n \"tokenProgram\": \"<string>\"\n },\n \"basisPoints\": 5000,\n \"maximumFeeRaw\": \"<string>\"\n }\n ],\n \"additionalLookupTables\": [\n \"<string>\"\n ]\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/admin/update-config/v2")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"baseMint\": \"<string>\",\n \"payer\": \"<string>\",\n \"claimersArray\": [\n \"<string>\"\n ],\n \"basisPointsArray\": [\n 5000\n ],\n \"feeLimits\": [\n {\n \"asset\": {\n \"mint\": \"<string>\",\n \"tokenProgram\": \"<string>\"\n },\n \"basisPoints\": 5000,\n \"maximumFeeRaw\": \"<string>\"\n }\n ],\n \"additionalLookupTables\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api-v2.bags.fm/api/v1/fee-share/admin/update-config/v2")
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 \"baseMint\": \"<string>\",\n \"payer\": \"<string>\",\n \"claimersArray\": [\n \"<string>\"\n ],\n \"basisPointsArray\": [\n 5000\n ],\n \"feeLimits\": [\n {\n \"asset\": {\n \"mint\": \"<string>\",\n \"tokenProgram\": \"<string>\"\n },\n \"basisPoints\": 5000,\n \"maximumFeeRaw\": \"<string>\"\n }\n ],\n \"additionalLookupTables\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"response": {
"contractVersion": 1,
"operation": {
"kind": "config",
"baseMint": "<string>",
"flow": "dbc"
},
"asset": {
"mint": "<string>",
"tokenProgram": "<string>",
"decimals": 123
},
"feeLimits": [
{
"asset": {
"mint": "<string>",
"tokenProgram": "<string>"
},
"basisPoints": 5000,
"maximumFeeRaw": "<string>"
}
],
"transactions": [
{
"id": "<string>",
"kind": "config",
"dependsOn": [
"<string>"
],
"format": "v0",
"encoding": "base64",
"transaction": "<string>",
"messageSha256": "<string>",
"requiredSigners": [
"<string>"
],
"lifetime": {
"blockhash": "<string>",
"lastValidBlockHeight": "<string>"
},
"budget": {
"computeUnitLimit": 123,
"loadedAccountsDataSizeLimit": 123,
"priorityFee": {
"unit": "total_lamports",
"amount": "<string>"
}
},
"size": {
"bytes": 123,
"accounts": 123,
"signatures": 123
}
}
],
"readiness": {
"status": "ready"
}
}
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}Authorizations
API key authentication. Provide your API key as the header value.
Body
Public key of the base mint
Public key of the payer wallet
Array of fee claimer wallet public keys. Must align with basisPointsArray, be unique, and contain 1-100 entries.
1 - 100 elementsPublic key of a fee claimer wallet
Array of basis points for each fee claimer. Must align with claimersArray and total 10,000.
1 - 100 elementsBasis points allocated to the corresponding claimer
0 <= x <= 10000Optional: requested transaction wire format. Defaults to v0.
v0, v1 Optional: signed token transfer-fee schedule ceilings. Defaults to the observed active schedule; a higher execution-time rate or cap fails the bounded transaction. Maximum 4 entries.
4Show child attributes
Show child attributes
Optional: extra address lookup tables to compile the transactions against. Maximum 8 entries.
8Public key of a lookup table address
Response
Successfully built the config update plan
true
A staged, potentially multi-transaction plan for a custom quote operation. Sign and send the entries in transactions in order; if readiness.status is setup_required, confirm the setup transaction(s) first, then call this endpoint again to fetch the rebuilt plan.
Show child attributes
Show child attributes
