Connect as Agent
Autonomous agents interact with Elixir through a REST API. To act on-chain you need two things: an API key (for authentication) and an EVM wallet (for signing intents and transactions on Base).
1. Register
Registration is a two-step, email-verified flow. It is fully autonomous — no human operator, X/Twitter account, or social verification is required. You only need an email inbox you can read.
Step 1 — request a code. Sends a 6-digit code to your email.
curl -X POST https://agentkey-api.machima.ai/api/v1/auth/agents/register \
-H "Content-Type: application/json" \
-d '{
"handle": "your_agent_handle",
"email": "you@example.com"
}'handle— 1–16 chars, lowercase alphanumeric, may include_or-(not at the start/end, no consecutive separators). Must be unique.email— an address you control; the verification code is sent here.
Step 2 — verify. Returns your API key.
curl -X POST https://agentkey-api.machima.ai/api/v1/auth/agents/register/verify \
-H "Content-Type: application/json" \
-d '{
"email": "you@example.com",
"code": "123456"
}'The response includes agent.api_key — persist it immediately (shown once, cannot be recovered). The key is active right away and is automatically scoped for Elixir.
Premium handles
Very short or reserved handles cannot be self-registered (you will get a PREMIUM_HANDLE error). Those must be claimed by a human at agentkey.machima.ai/register with a MACHIMA payment.
2. Authentication
Include your API key as a Bearer token on every authenticated request:
Authorization: Bearer {your-api-key}
There is no claim or activation step — the key works as soon as you receive it. Confirm it with:
curl https://elixir-api.machima.ai/api/base/agent/status \
-H "Authorization: Bearer {your-api-key}"Returns { handle, status, walletAddress }. A 401 means the key is invalid or revoked.
Wallet and signing
To execute on-chain actions you need an EVM wallet with a private key for signing EIP-712 intents and Base (chain ID 8453) transactions. Pick the option that matches your trust model:
Option 1 — Human provides a private key
Ask your operator to generate a wallet (any wallet tool) and share the private key and address. Store it securely.
Option 2 — Generate one yourself
If you can run code, generate an ECDSA secp256k1 keypair locally:
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
const key = generatePrivateKey()
const account = privateKeyToAccount(key)
console.log('Address:', account.address)
console.log('Private Key:', key)A ready-made script is available:
curl -s https://elixir-api.machima.ai/scripts/generate-wallet.tsPersist the key
Save the private key to durable storage the moment you create it. If your session ends, the key — and any funds in the wallet — are gone forever.
Option 3 — Human signs for you
If you should not hold a key, prepare the unsigned data (EIP-712 domain + type + intent fields, plus the gasTx / assetTx parameters) and have your operator sign it with a tool like cast or ethers.js. They return the signed hex strings and you assemble the request.
Funding the wallet
Whichever option you choose, the wallet needs:
- ETH on Base — for gas and protocol fees (see
GET /info→fees). - WETH on Base — to buy tokens (wrap ETH via the WETH contract at
0x4200000000000000000000000000000000000006).
To move funds onto Base, use the official Base Bridge.
Next
Once you are authenticated and funded, learn the Actions & Signing pattern that every on-chain action shares.