Stabletrust enables AI agents to transact privately on EVM chains - shield tokens, transfer confidentially, withdraw silently. Balances are encrypted on-chain. No one can see what your agent holds or where it sends.
Built for the private agent economy.
No SDK. No setup. Just POST.
// Shield tokens into a confidential accountawaitfetch("https://stabletrust-api.fairblock.network/deposit",{method: "POST",headers: {"Content-Type": "application/json"},body: JSON.stringify({privateKey: process.env.AGENT_KEY,tokenAddress: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",// USDCamount: "10000000",// 10 USDCchainId: 84532,// Base Sepolia}),});That's it. Your agent now has a private balance no one can read.
EOA → [account/create] → Confidential Account → [deposit] → shielded balance
→ [transfer] → Recipient
Recipient → [apply] → spendable → [withdraw] → EOA
- Create account - provision a confidential account (idempotent). Required before an account can receive a transfer.
- Deposit - shield ERC-20 tokens. Balance becomes encrypted on-chain.
- Transfer - send privately to any address. Amount is invisible on-chain.
- Apply - a recipient applies received funds, moving them from
pendingtoavailableso they can be spent or withdrawn. - Withdraw - unshield back to public ERC-20 at any time.
- Balance - check any account's decrypted balance. Read-only - sends no transaction.
Provision your confidential account (idempotent). Required before an account can receive a transfer.
constres=awaitfetch("https://stabletrust-api.fairblock.network/account/create",{method: "POST",headers: {"Content-Type": "application/json"},body: JSON.stringify({privateKey: process.env.AGENT_KEY,chainId: 84532,}),});const{ address, created }=awaitres.json();// { success: true, address: '0x...', created: true } // created:false if it already existedconstres=awaitfetch("https://stabletrust-api.fairblock.network/deposit",{method: "POST",headers: {"Content-Type": "application/json"},body: JSON.stringify({privateKey: process.env.AGENT_KEY,tokenAddress: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",amount: "10000000",chainId: 84532,}),});const{ receipt }=awaitres.json();// { hash: '0x...' }Read-only - decrypts and returns the balance without sending any transaction. Returns exists: false with zero balances if the account hasn't been created yet.
constres=awaitfetch("https://stabletrust-api.fairblock.network/balance",{method: "POST",headers: {"Content-Type": "application/json"},body: JSON.stringify({privateKey: process.env.AGENT_KEY,tokenAddress: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",chainId: 84532,}),});const{ exists, balance }=awaitres.json();// { exists: true, balance: { total: '10000000', available: '10000000', pending: '0' }}constres=awaitfetch("https://stabletrust-api.fairblock.network/transfer",{method: "POST",headers: {"Content-Type": "application/json"},body: JSON.stringify({privateKey: process.env.AGENT_KEY,recipientAddress: "0x...recipient",tokenAddress: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",amount: "5000000",// 5 USDCchainId: 84532,}),});const{ receipt }=awaitres.json();// { hash: '0x...' }Apply received funds - moves a recipient's balance from pending to available so it can be spent or withdrawn.
constres=awaitfetch("https://stabletrust-api.fairblock.network/apply",{method: "POST",headers: {"Content-Type": "application/json"},body: JSON.stringify({privateKey: process.env.AGENT_KEY,chainId: 84532,}),});const{ tx }=awaitres.json();// { success: true, message: 'Pending balance applied', tx: '0x...' }constres=awaitfetch("https://stabletrust-api.fairblock.network/withdraw",{method: "POST",headers: {"Content-Type": "application/json"},body: JSON.stringify({privateKey: process.env.AGENT_KEY,tokenAddress: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",amount: "5000000",chainId: 84532,}),});const{ receipt }=awaitres.json();// { hash: '0x...' }/deposit
| Field | Type | Required | Description |
|---|---|---|---|
privateKey | string | yes | Agent wallet private key |
tokenAddress | string | yes | ERC-20 token contract address |
amount | string | yes | Amount in token base units |
chainId | number | yes | Target network chain ID |
waitForFinalization | boolean | no | Wait for tx finality (default: true) |
/balance
| Field | Type | Required | Description |
|---|---|---|---|
privateKey | string | yes | Agent wallet private key (used for decryption) |
tokenAddress | string | yes | ERC-20 token contract address |
chainId | number | yes | Target network chain ID |
address | string | no | Address to query - defaults to wallet from privateKey |
/transfer
| Field | Type | Required | Description |
|---|---|---|---|
privateKey | string | yes | Agent wallet private key |
recipientAddress | string | yes | Recipient Ethereum address |
tokenAddress | string | yes | ERC-20 token contract address |
amount | string | yes | Amount in token base units |
chainId | number | yes | Target network chain ID |
useOffchainVerify | boolean | no | Off-chain proof verification (default: false) |
waitForFinalization | boolean | no | Wait for tx finality (default: true) |
/withdraw
| Field | Type | Required | Description |
|---|---|---|---|
privateKey | string | yes | Agent wallet private key |
tokenAddress | string | yes | ERC-20 token contract address |
amount | string | yes | Amount in token base units |
chainId | number | yes | Target network chain ID |
useOffchainVerify | boolean | no | Off-chain proof verification (default: false) |
waitForFinalization | boolean | no | Wait for tx finality (default: true) |
/account/create
| Field | Type | Required | Description |
|---|---|---|---|
privateKey | string | yes | Agent wallet private key |
chainId | number | yes | Target network chain ID |
waitForFinalization | boolean | no | Wait for account finality (default: true) |
/apply
| Field | Type | Required | Description |
|---|---|---|---|
privateKey | string | yes | Agent wallet private key |
chainId | number | yes | Target network chain ID |
waitForFinalization | boolean | no | Wait for tx finality (default: true) |
| Chain | ID |
|---|---|
| Base | 8453 |
| Base Sepolia | 84532 |
| Ethereum Sepolia | 11155111 |
| Arbitrum Sepolia | 421614 |
| Arc | 5042002 |
| Stable | 2201 |
| Tempo | 42431 |