curl --request POST \
--url https://api.sandbox.brickken.com/x402/rams/execute \
--header 'Content-Type: application/json' \
--header 'X-Payment: <api-key>' \
--data '
{
"chainId": "11155111",
"signerAddress": "<string>",
"target": "<string>",
"data": "<string>",
"asset": "<string>",
"from": "<string>",
"to": "<string>",
"amount": "<string>",
"executorAddress": "<string>",
"gasLimit": "<string>",
"nonce": 123,
"ownerEmail": "jsmith@example.com",
"email": "jsmith@example.com"
}
'import requests
url = "https://api.sandbox.brickken.com/x402/rams/execute"
payload = {
"chainId": "11155111",
"signerAddress": "<string>",
"target": "<string>",
"data": "<string>",
"asset": "<string>",
"from": "<string>",
"to": "<string>",
"amount": "<string>",
"executorAddress": "<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',
signerAddress: '<string>',
target: '<string>',
data: '<string>',
asset: '<string>',
from: '<string>',
to: '<string>',
amount: '<string>',
executorAddress: '<string>',
gasLimit: '<string>',
nonce: 123,
ownerEmail: 'jsmith@example.com',
email: 'jsmith@example.com'
})
};
fetch('https://api.sandbox.brickken.com/x402/rams/execute', 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/execute",
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',
'signerAddress' => '<string>',
'target' => '<string>',
'data' => '<string>',
'asset' => '<string>',
'from' => '<string>',
'to' => '<string>',
'amount' => '<string>',
'executorAddress' => '<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/execute"
payload := strings.NewReader("{\n \"chainId\": \"11155111\",\n \"signerAddress\": \"<string>\",\n \"target\": \"<string>\",\n \"data\": \"<string>\",\n \"asset\": \"<string>\",\n \"from\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"executorAddress\": \"<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/execute")
.header("X-Payment", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chainId\": \"11155111\",\n \"signerAddress\": \"<string>\",\n \"target\": \"<string>\",\n \"data\": \"<string>\",\n \"asset\": \"<string>\",\n \"from\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"executorAddress\": \"<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/execute")
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 \"signerAddress\": \"<string>\",\n \"target\": \"<string>\",\n \"data\": \"<string>\",\n \"asset\": \"<string>\",\n \"from\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"executorAddress\": \"<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": {}
}
}Execute RAMS Action
Prepare an agent action through the principal-bound AgentExecutor.
curl --request POST \
--url https://api.sandbox.brickken.com/x402/rams/execute \
--header 'Content-Type: application/json' \
--header 'X-Payment: <api-key>' \
--data '
{
"chainId": "11155111",
"signerAddress": "<string>",
"target": "<string>",
"data": "<string>",
"asset": "<string>",
"from": "<string>",
"to": "<string>",
"amount": "<string>",
"executorAddress": "<string>",
"gasLimit": "<string>",
"nonce": 123,
"ownerEmail": "jsmith@example.com",
"email": "jsmith@example.com"
}
'import requests
url = "https://api.sandbox.brickken.com/x402/rams/execute"
payload = {
"chainId": "11155111",
"signerAddress": "<string>",
"target": "<string>",
"data": "<string>",
"asset": "<string>",
"from": "<string>",
"to": "<string>",
"amount": "<string>",
"executorAddress": "<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',
signerAddress: '<string>',
target: '<string>',
data: '<string>',
asset: '<string>',
from: '<string>',
to: '<string>',
amount: '<string>',
executorAddress: '<string>',
gasLimit: '<string>',
nonce: 123,
ownerEmail: 'jsmith@example.com',
email: 'jsmith@example.com'
})
};
fetch('https://api.sandbox.brickken.com/x402/rams/execute', 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/execute",
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',
'signerAddress' => '<string>',
'target' => '<string>',
'data' => '<string>',
'asset' => '<string>',
'from' => '<string>',
'to' => '<string>',
'amount' => '<string>',
'executorAddress' => '<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/execute"
payload := strings.NewReader("{\n \"chainId\": \"11155111\",\n \"signerAddress\": \"<string>\",\n \"target\": \"<string>\",\n \"data\": \"<string>\",\n \"asset\": \"<string>\",\n \"from\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"executorAddress\": \"<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/execute")
.header("X-Payment", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chainId\": \"11155111\",\n \"signerAddress\": \"<string>\",\n \"target\": \"<string>\",\n \"data\": \"<string>\",\n \"asset\": \"<string>\",\n \"from\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"executorAddress\": \"<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/execute")
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 \"signerAddress\": \"<string>\",\n \"target\": \"<string>\",\n \"data\": \"<string>\",\n \"asset\": \"<string>\",\n \"from\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"executorAddress\": \"<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": {}
}
}ramsExecute. signerAddress must be the mandate’s agent.
msg.sender against the mandated agent.Input modes
| Mode | Fields |
|---|---|
| Raw | target and full inner data calldata |
| ERC-20 helper | asset, from, to, and raw base-unit amount; the API encodes transferFrom |
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"
MUST be the agent wallet named in the mandate — msg.sender of AgentExecutor.execute is the agent. This operation is always client-signed and can never be brickken-relayed.
^0x[a-fA-F0-9]{40}$Raw mode: the contract the executor will call (e.g. the asset). Required when data is provided.
^0x[a-fA-F0-9]{40}$Raw mode: full inner calldata for target, at least 4 bytes. When present the request is treated as raw mode and asset/from/to/amount are ignored.
^0x([a-fA-F0-9]{2})*$Transfer-helper mode (data absent): token to move; becomes the executor call target.
^0x[a-fA-F0-9]{40}$Transfer-helper mode: token holder — normally the executor's bound principal. The response info warns when it differs from AgentExecutor.principal().
^0x[a-fA-F0-9]{40}$Transfer-helper mode: transfer recipient.
^0x[a-fA-F0-9]{40}$Transfer-helper mode: transfer amount. Raw base units — no decimals scaling is applied. Decimal string (canonical), 0x hex string, or number accepted.
Optional AgentExecutor contract override; defaults to the chain's configured (platform) RAMS AgentExecutor address. Executors are per-principal — pass the principal's executor here.
^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