Examples on this page use $API_URL. Set it once, with the /v1 prefix
included — every route lives under it:
export API_URL=https://<your-api-host>/v1The networks a workspace starts with
Every workspace’s registry is seeded from the same fifteen built-in networks:
| Slug | Network | VM | Chain ID |
|---|---|---|---|
ethereum |
Ethereum | evm |
1 |
base |
Base | evm |
8453 |
bnbchain |
BNB Chain | evm |
56 |
arbitrum |
Arbitrum | evm |
42161 |
arbitrum-sepolia |
Arbitrum Sepolia | evm |
421614 |
optimism |
OP Mainnet | evm |
10 |
sepolia |
Sepolia | evm |
11155111 |
solana |
Solana | svm |
7565164 |
solana-testnet |
Solana Testnet | svm |
7565166 |
solana-devnet |
Solana Devnet | svm |
7565165 |
hyperevm |
HyperEVM | evm |
999 |
hyperevm-testnet |
HyperEVM Testnet | evm |
998 |
robinhood |
Robinhood Chain | evm |
4663 |
robinhood-testnet |
Robinhood Chain Testnet | evm |
46630 |
ink |
Ink | evm |
57073 |
These slugs are what every network selector and defaultNetwork accepts, and
the set is fixed — there is no route that removes a network, so every one of
them stays available for the life of the workspace.
A well-formed slug that is not one of them answers differently depending on where you sent it, and there is no single rule — check the route you are calling:
| Where | Unknown but well-formed slug |
|---|---|
GET /v1/workspace/assets?network= |
400 unsupported_network — passed to the signing engine, which refuses it |
defaultNetwork on account creation |
400 unsupported_network — same reason |
A malformed value is rejected before it reaches the registry: the ?network=
query selector answers 400 invalid_parameter, while a malformed
defaultNetwork fails body validation with 400 invalid_body.
Use a testnet while you are integrating. sepolia and solana-devnet
carry no real value, and every example in these docs uses ethereum only
because it is the obvious name. A signature you build for ethereum binds to
real mainnet.
The service signs, it never contacts a chain
TEE Docker custodies keys and signs. It does not call a chain RPC — there is no sending, no simulating, no balance read, and no per-workspace RPC endpoint to register. A network here fixes two things about an address:
- Which chain a signature binds to — its
chainId, and - Which signing scheme the address uses —
evmsecp256k1 orsvmed25519.
You take the signed payload — a message signature, a signed digest, or signed bytes — and broadcast it against your own RPC. The gas, nonce, and blockhash a transaction needs are yours to fill in before you ask the service to sign.
Because a network is chosen once, at account creation, through defaultNetwork,
and never changed afterwards: the chain an address signs for is the address’s
own. To sign for a different chain, hold an address on it — in practice, an
account created with that defaultNetwork.
Reading the registry
GET /v1/workspace/networks lists the networks a workspace can sign for, each as
{ slug, name, chainId, vm }. It is read-only — there is no route that adds,
removes, or repoints a network. Scope: read.
Related
- Networks endpoint — request and response shapes
- Sign — the signing routes
- Errors — the full catalog