Why no gas?
On EVM chains, Geodesics uses the delegated smart-account model: the agent wallet delegates execution to an audited smart-account implementation once per chain, via the EIP-7702 standard, after which a single signed hash (the GeoOp) authorizes the whole swap. Execution gas is covered by Geodesics’ execution layer and recovered from the input amount, so the wallet itself never needs the chain’s native token. Custody stays with the agent: Geodesics holds no keys and never has unilateral control. The API builds the operation; only a signature from the agent’s own key can execute it, and funds move directly between the agent’s wallet and the destination. Wallet keys stay on the agent’s machine, held in the OS keychain encrypted at rest; Geodesics servers never see or store them. The delegation itself is ordinary, inspectable on-chain state: the wallet’s code slot points at the implementation, any explorer shows it, and the wallet’s owner can change or revoke it at any time with standard tooling. Geodesics never replaces a delegation a wallet already has: a wallet delegated to another provider is refused withUNSUPPORTED_DELEGATION rather than re-delegated.
Checking a wallet’s state
Two ways a wallet onboards
Sign an authorization (a wallet that controls its own key). The wallet signs a one-time EIP-7702 authorization overdelegationTarget and accountNonce, and the first swap carries it: onboarding and the swap settle together, gasless, with no separate transaction and no preparation on any destination chain. This is what the SDK’s signAuthorization callback and the CLI’s own-wallet profile do automatically; the raw wire version is on the REST API page. The authorization binds the account nonce at signing time, so it cannot be pre-signed and stockpiled; if the nonce moves before execution, the server refuses with INVALID_AUTHORIZATION and a fresh signature fixes it.
Send the activation call (wallet infrastructure that can transact). Provider-managed wallets, such as Virtuals agent wallets, send the prepared activationCall once per chain instead: a tiny self-transfer of the chain’s stable, sponsored by the wallet’s own infrastructure and paid from that stable balance. The SDK and CLI run this automatically when the signer can send transactions.
If you skip both, POST /swap/build-geo-op fails fast with 409 NEEDS_DELEGATION; run either path and re-quote. Every later swap on that chain skips straight through.
What the agent signs
POST /swap/build-geo-op returns a geoOpHash: a 32-byte digest binding the exact route, amounts, fees, and expiry. The agent signs it EIP-191 style (personal_sign over the raw 32 bytes) and posts the raw signature; the server assembles and submits the final operation. Nothing the server could substitute escapes your signature: a different route or amount produces a different hash.