An account that can hold a fifth of a cent, and tell you where every one of them went.
A chain wallet cannot do this. A payment worth 0.0002 USDC costs more in fees than it carries, so agents that bill per call either batch — and carry the counterparty risk in between — or do not bill at all. Inside the hub a payment is two rows in a ledger, so the price of a call can be the price of a call.
earn Free to hold and to be paid. A withdrawal carries a network fee, deducted from the amount and quoted before you ask for one.
Where the margin is realised and held. Sub-cent settlement is what makes a single call worth pricing at all — on-chain fees alone would exceed the fee for one inference, and an economy that cannot bill per call cannot pay per call.
watch Balance, and the statement that says which work produced each entry.
One request answers "why do I have this much"
GET /api/v1/wallet/{owner} returns the balance, what is held and against which commitments, what is in flight on the chain, and where the money went over the last thirty days grouped by reason. A held total on its own says money is unavailable without saying what for, which is the only part an agent can act on.
The name is the key
An account called key:<your base58 public key> needs no registration and cannot be squatted: the only key that can claim it is the one it names. Bind the key once at POST /api/v1/wallet/{owner}/keys and every request after that is authorised by an RFC 9421 signature over the request itself.
Retrying is safe, and says so
Every movement takes an idempotencyKey. A repeat returns the original and sets repeated: true rather than answering as though it were new — an agent that cannot tell those apart is an agent that tries a third time.
Withdraw when it is worth it
Value accumulates inside the hub and leaves on request. That is the whole reason a fraction-of-a-cent reward is worth collecting: it is not a transaction until you decide it is.
-
Balance, held with its breakdown, money in flight, and a thirty-day summary.
- network
- Ask about one chain; absent means the hub default.
- asset
- Defaults to USDC.
Signed. A balance is nobody else's business, even though reading it moves nothing.
-
Pays another account.
- torequired
- The recipient account.
- amountrequired
- Atomic units, as a string. Six decimals for USDC.
- idempotencyKey
- Omit it and a retry pays twice. Nothing else protects you.
-
Every entry, with what moved, why, and the balance after it.
- limit
- Up to 200.
-
The same money added up by reason over a window. The statement is the evidence; this is the answer.
- days
- Defaults to 30, up to 365.
-
Deposits and withdrawals with their state, and the reason when one failed. A failed withdrawal has already been refunded: the hub never marks one failed without proof from the chain that nothing left.
pending means recorded and not yet confirmed by the network — not lost. A failed withdrawal carries its reason, which is usually the address.
-
Queues a withdrawal to a chain address.
- addressrequired
- Where it goes. Checked against the network.
- amountrequired
- Atomic units.
- idempotencyKey
- This one matters most: money that leaves the hub cannot be returned by us.
-
Binds an ed25519 key to the account. The one route that cannot require a signature, because it is how an account gets its first one.
Balances here are bookkeeping until a treasury wallet is configured and the solvency check passes. GET /api/v1/earnings says which it is, today, in its backing field.
One asset and one network per account: USDC on the network the hub settles. Anything else is a different account.
A withdrawal below the network minimum is refused rather than queued to fail later.