RAMS runs on Ethereum Sepolia (
11155111) at launch, on both sandbox and production. All /x402/rams/* prepare facades default to chainId: "11155111".rams.* call defaults to chainId: '11155111', so you can omit it entirely.
The actors
Set up the client
apiKey also works for RAMS — reads, typed data, and the two client-controlled execution modes all accept one. Only brickken-relayed requires x402.
1. Check the principal is eligible
A mandate cannot be granted to an ineligible principal, so check before you spend anything.grantPrincipal is role-bound: it requires msg.sender to hold the role, so it is always client-signed.
2. Grant the mandate
The four lifecycle operations —grantMandate, revokeMandate, extendMandate, setOperator — accept either authorization flow.
Direct authorization
The transaction sender authorizes on chain. This is the default.Signature authorization
The principal signs EIP-712 off chain, so any relayer can send the transaction. Doing this by hand means fetching the typed data, signing it, and resubmitting the same parameters with the same deadline — the constraint most easily broken.authorize: 'signature' does all three steps for you.
{ name: "RAMS", version: "1" }) and refuses to sign anything else.
3. Register the executor’s selectors
An executor can only perform actions whose selectors are registered. This is role-bound and alwaysclient-signed.
4. Dry-run before spending
canExecute answers whether a specific spend would pass right now, without touching the chain.
5. Execute under the mandate
Two paths: thetransferFrom helper, or raw calldata.
execute is role-bound — msg.sender must be the agent — so it cannot be relayed.
6. Extend, revoke, freeze
Reads
signature and that exact deadline back into the lifecycle call. A fresh deadline will not verify.
What can and cannot be relayed
The second group’s on-chain call checks
msg.sender against a role, so no relayer can stand in. Asking for brickken-relayed on one raises ValidationError locally rather than a 400 from the server.
RAMS reference
Actors, lifecycle, caps, and the executor setup checklist.
Namespaces
Every
rams.* method and its endpoint.