Skip to main content
PATCH
/
custodians
/
me
/
gas-sponsorship
/
chains
/
{chainId}
Update gas sponsorship for a chain
curl --request PATCH \
  --url https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains/{chainId} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "value": "10"
}'
import requests

url = "https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains/{chainId}"

payload = { "value": "10" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.patch(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({value: '10'})
};

fetch('https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains/{chainId}', 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/{chainId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'value' => '10'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$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://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains/{chainId}"

payload := strings.NewReader("{\n \"value\": \"10\"\n}")

req, _ := http.NewRequest("PATCH", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
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.patch("https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains/{chainId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"value\": \"10\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.portalhq.io/api/v3/custodians/me/gas-sponsorship/chains/{chainId}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"value\": \"10\"\n}"

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"
  }
}
{
"error": "<string>"
}
{
"error": "<string>"
}

Authorizations

Authorization
string
header
required

Portal API Key (Custodian API Key). Pass as a Bearer token in the Authorization header.

Path Parameters

chainId
string
required

The CAIP-2 chain ID. Be sure the colon (:) is URI-encoded as %3A in the URL.

Body

application/json
value
string
required

The new maximum gas allowance limit in ETH/SOL units.

Response

Gas sponsor updated successfully

chainId
string
currentPeriod
object
gasSponsor
object | null

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).