curl --request GET \
--url https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains', 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.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"chainId": "eip155:11155111",
"currentPeriod": {
"gasAllowanceLimit": "499",
"gasUsage": "0.35080714673101143",
"transactionCount": "3005",
"endsAt": "2026-02-13T17:49:43.000Z"
}
},
{
"chainId": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
"currentPeriod": {
"gasAllowanceLimit": "5",
"gasUsage": "0.0053",
"transactionCount": "12",
"endsAt": "2026-02-13T17:49:43.000Z"
},
"gasSponsor": {
"address": "8K1q5fZcHz3bVExampleSolanaGasSponsorPublicKey",
"balance": "4.927",
"balanceInBaseUnits": "4927000000"
}
}
]{
"error": "<string>"
}{
"error": "<string>"
}Get gas sponsors
Retrieves all gas sponsors and their usage information across all chains for your Portal environment. Solana entries also include the gas sponsor’s on-chain address and current balance.
Filtering: Pass the optional chains query parameter to narrow the
response to a subset of chains. Each entry may be either a friendly
chain slug (for example solana, solana-devnet, base, ethereum)
or a full CAIP-2 chain ID (for example eip155:1,
solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp).
Tip — speed up your request: Only need a subset of chains?
Passing chains skips the data fetches for every chain you leave out,
which can reduce response times from several seconds to a few
hundred milliseconds. For example, if you only care about Solana
gas sponsor info, pass chains=solana,solana-devnet.
Note: Gas sponsorship must be enabled for your Portal environment.
curl --request GET \
--url https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains', 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.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"chainId": "eip155:11155111",
"currentPeriod": {
"gasAllowanceLimit": "499",
"gasUsage": "0.35080714673101143",
"transactionCount": "3005",
"endsAt": "2026-02-13T17:49:43.000Z"
}
},
{
"chainId": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
"currentPeriod": {
"gasAllowanceLimit": "5",
"gasUsage": "0.0053",
"transactionCount": "12",
"endsAt": "2026-02-13T17:49:43.000Z"
},
"gasSponsor": {
"address": "8K1q5fZcHz3bVExampleSolanaGasSponsorPublicKey",
"balance": "4.927",
"balanceInBaseUnits": "4927000000"
}
}
]{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Portal API Key (Custodian API Key). Pass as a Bearer token in the Authorization header.
Query Parameters
Comma-separated list of chains to include in the response. Each
entry may be a friendly slug (e.g. solana, base) or a full
CAIP-2 chain ID (e.g. eip155:1). When omitted, every configured
chain is returned.
Response
Gas sponsors retrieved successfully
Show child attributes
Show child attributes
Only present on Solana entries. null when no gas sponsor has
been configured for that chain yet. The balance and
balanceInBaseUnits fields are null when the RPC balance
lookup fails (the sponsor address is still returned).
Show child attributes
Show child attributes
Was this page helpful?