curl --request POST \
--url https://api.sandbox.brickken.com/x402/rams/revoke-mandate \
--header 'Content-Type: application/json' \
--header 'X-Payment: <api-key>' \
--data '
{
"chainId": "11155111",
"agent": "<string>",
"principal": "<string>",
"signerAddress": "<string>",
"signature": "<string>",
"deadline": "<string>",
"executionMode": "brickken-relayed",
"agentMandateAddress": "<string>",
"gasLimit": "<string>",
"nonce": 123,
"ownerEmail": "jsmith@example.com",
"email": "jsmith@example.com"
}
'import requests
url = "https://api.sandbox.brickken.com/x402/rams/revoke-mandate"
payload = {
"chainId": "11155111",
"agent": "<string>",
"principal": "<string>",
"signerAddress": "<string>",
"signature": "<string>",
"deadline": "<string>",
"executionMode": "brickken-relayed",
"agentMandateAddress": "<string>",
"gasLimit": "<string>",
"nonce": 123,
"ownerEmail": "jsmith@example.com",
"email": "jsmith@example.com"
}
headers = {
"X-Payment": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Payment': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
chainId: '11155111',
agent: '<string>',
principal: '<string>',
signerAddress: '<string>',
signature: '<string>',
deadline: '<string>',
executionMode: 'brickken-relayed',
agentMandateAddress: '<string>',
gasLimit: '<string>',
nonce: 123,
ownerEmail: 'jsmith@example.com',
email: 'jsmith@example.com'
})
};
fetch('https://api.sandbox.brickken.com/x402/rams/revoke-mandate', 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.sandbox.brickken.com/x402/rams/revoke-mandate",
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([
'chainId' => '11155111',
'agent' => '<string>',
'principal' => '<string>',
'signerAddress' => '<string>',
'signature' => '<string>',
'deadline' => '<string>',
'executionMode' => 'brickken-relayed',
'agentMandateAddress' => '<string>',
'gasLimit' => '<string>',
'nonce' => 123,
'ownerEmail' => 'jsmith@example.com',
'email' => 'jsmith@example.com'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Payment: <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://api.sandbox.brickken.com/x402/rams/revoke-mandate"
payload := strings.NewReader("{\n \"chainId\": \"11155111\",\n \"agent\": \"<string>\",\n \"principal\": \"<string>\",\n \"signerAddress\": \"<string>\",\n \"signature\": \"<string>\",\n \"deadline\": \"<string>\",\n \"executionMode\": \"brickken-relayed\",\n \"agentMandateAddress\": \"<string>\",\n \"gasLimit\": \"<string>\",\n \"nonce\": 123,\n \"ownerEmail\": \"jsmith@example.com\",\n \"email\": \"jsmith@example.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Payment", "<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://api.sandbox.brickken.com/x402/rams/revoke-mandate")
.header("X-Payment", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chainId\": \"11155111\",\n \"agent\": \"<string>\",\n \"principal\": \"<string>\",\n \"signerAddress\": \"<string>\",\n \"signature\": \"<string>\",\n \"deadline\": \"<string>\",\n \"executionMode\": \"brickken-relayed\",\n \"agentMandateAddress\": \"<string>\",\n \"gasLimit\": \"<string>\",\n \"nonce\": 123,\n \"ownerEmail\": \"jsmith@example.com\",\n \"email\": \"jsmith@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.brickken.com/x402/rams/revoke-mandate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Payment"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"chainId\": \"11155111\",\n \"agent\": \"<string>\",\n \"principal\": \"<string>\",\n \"signerAddress\": \"<string>\",\n \"signature\": \"<string>\",\n \"deadline\": \"<string>\",\n \"executionMode\": \"brickken-relayed\",\n \"agentMandateAddress\": \"<string>\",\n \"gasLimit\": \"<string>\",\n \"nonce\": 123,\n \"ownerEmail\": \"jsmith@example.com\",\n \"email\": \"jsmith@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"transactions": {},
"txId": "<string>",
"info": {}
}
}Revoke RAMS Mandate
Prepare revocation of an ERC-8226 mandate.
curl --request POST \
--url https://api.sandbox.brickken.com/x402/rams/revoke-mandate \
--header 'Content-Type: application/json' \
--header 'X-Payment: <api-key>' \
--data '
{
"chainId": "11155111",
"agent": "<string>",
"principal": "<string>",
"signerAddress": "<string>",
"signature": "<string>",
"deadline": "<string>",
"executionMode": "brickken-relayed",
"agentMandateAddress": "<string>",
"gasLimit": "<string>",
"nonce": 123,
"ownerEmail": "jsmith@example.com",
"email": "jsmith@example.com"
}
'import requests
url = "https://api.sandbox.brickken.com/x402/rams/revoke-mandate"
payload = {
"chainId": "11155111",
"agent": "<string>",
"principal": "<string>",
"signerAddress": "<string>",
"signature": "<string>",
"deadline": "<string>",
"executionMode": "brickken-relayed",
"agentMandateAddress": "<string>",
"gasLimit": "<string>",
"nonce": 123,
"ownerEmail": "jsmith@example.com",
"email": "jsmith@example.com"
}
headers = {
"X-Payment": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Payment': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
chainId: '11155111',
agent: '<string>',
principal: '<string>',
signerAddress: '<string>',
signature: '<string>',
deadline: '<string>',
executionMode: 'brickken-relayed',
agentMandateAddress: '<string>',
gasLimit: '<string>',
nonce: 123,
ownerEmail: 'jsmith@example.com',
email: 'jsmith@example.com'
})
};
fetch('https://api.sandbox.brickken.com/x402/rams/revoke-mandate', 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.sandbox.brickken.com/x402/rams/revoke-mandate",
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([
'chainId' => '11155111',
'agent' => '<string>',
'principal' => '<string>',
'signerAddress' => '<string>',
'signature' => '<string>',
'deadline' => '<string>',
'executionMode' => 'brickken-relayed',
'agentMandateAddress' => '<string>',
'gasLimit' => '<string>',
'nonce' => 123,
'ownerEmail' => 'jsmith@example.com',
'email' => 'jsmith@example.com'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Payment: <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://api.sandbox.brickken.com/x402/rams/revoke-mandate"
payload := strings.NewReader("{\n \"chainId\": \"11155111\",\n \"agent\": \"<string>\",\n \"principal\": \"<string>\",\n \"signerAddress\": \"<string>\",\n \"signature\": \"<string>\",\n \"deadline\": \"<string>\",\n \"executionMode\": \"brickken-relayed\",\n \"agentMandateAddress\": \"<string>\",\n \"gasLimit\": \"<string>\",\n \"nonce\": 123,\n \"ownerEmail\": \"jsmith@example.com\",\n \"email\": \"jsmith@example.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Payment", "<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://api.sandbox.brickken.com/x402/rams/revoke-mandate")
.header("X-Payment", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chainId\": \"11155111\",\n \"agent\": \"<string>\",\n \"principal\": \"<string>\",\n \"signerAddress\": \"<string>\",\n \"signature\": \"<string>\",\n \"deadline\": \"<string>\",\n \"executionMode\": \"brickken-relayed\",\n \"agentMandateAddress\": \"<string>\",\n \"gasLimit\": \"<string>\",\n \"nonce\": 123,\n \"ownerEmail\": \"jsmith@example.com\",\n \"email\": \"jsmith@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.brickken.com/x402/rams/revoke-mandate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Payment"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"chainId\": \"11155111\",\n \"agent\": \"<string>\",\n \"principal\": \"<string>\",\n \"signerAddress\": \"<string>\",\n \"signature\": \"<string>\",\n \"deadline\": \"<string>\",\n \"executionMode\": \"brickken-relayed\",\n \"agentMandateAddress\": \"<string>\",\n \"gasLimit\": \"<string>\",\n \"nonce\": 123,\n \"ownerEmail\": \"jsmith@example.com\",\n \"email\": \"jsmith@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"transactions": {},
"txId": "<string>",
"info": {}
}
}ramsRevokeMandate for an agent / principal pair.
Authorization modes
| Mode | Authorization |
|---|---|
| Direct | signerAddress is the principal or an approved operator |
| Principal signature | Any sender supplies signature and the matching deadline from Typed Data |
info.mode; pay x402 only when sending.
Next step
Preparing does not touch the chain. The response gives youtxId, the unsigned transactions, and an x402Requirements quote.
Choose who broadcasts
client-signed (the default) — you sign the transaction and Brickken broadcasts it. client-broadcast — you sign and broadcast it yourself, then confirm with txHash. Either way the operation price is split evenly: half at prepare, half at send.Submit it and settle the payment
POST to /send-transactions. The first attempt answers 402 Payment Required; read PAYMENT-REQUIRED, sign the payment locally, and retry with X-PAYMENT. An x-api-key is accepted here instead of paying.Poll until it confirms
GET /get-transaction-status with the txId. Your payment settles only after the operation confirms, and is released if it reverts.Authorizations
Base64-encoded x402 payment payload. Supported for x402-eligible agentic methods on /x402/... facades, /prepare-transactions, and eligible /send-transactions retries.
Body
Target operation chain ID. RAMS is available on Ethereum Sepolia (11155111) only at launch. Decimal and 0x hex values are accepted.
"11155111"
"0xaa36a7"
Agent whose mandate is revoked.
^0x[a-fA-F0-9]{40}$Principal that granted the mandate.
^0x[a-fA-F0-9]{40}$Required for direct/client-signed mode. Omit for brickken-relayed execution; Brickken supplies its operation signer.
^0x[a-fA-F0-9]{40}$Optional EIP-712 signature from the principal (never the operator). At least 65 bytes for EOAs (r||s||v); longer payloads are allowed for EIP-1271 contract wallets. Omit for direct mode (the transaction sender authorizes on-chain). Obtain the payload to sign from GET /rams/typed-data/{operation}.
^0x([a-fA-F0-9]{2})*$Unix-seconds signature deadline (uint256). Required when signature is provided and must be greater than now — it must equal the deadline that was signed. Ignored (encoded as 0) in direct mode.
Optional. Only valid together with signature + deadline: Brickken's relayer becomes the transaction sender and the on-chain authorization rides on the principal's EIP-712 signature. Omit for client-signed execution (default on all /x402/rams facades).
brickken-relayed Optional AgentMandate contract override; defaults to the chain's configured RAMS AgentMandate address.
^0x[a-fA-F0-9]{40}$Optional explicit gas limit.
Optional explicit transaction nonce when managing nonces manually.
Optional owner attribution email.
Alias for ownerEmail where supported.
Response
Prepared unsigned transaction payload.
Show child attributes
Show child attributes