Overview
To use the Herodotus Cloud Services APIs, you need to obtain an API key:- Visit the Herodotus Console.
- Register or log in using your GitHub account or in-browser wallet with Sign in with Ethereum.

- Apply for credits or use an invite link to a project with credits.

- Once logged in, you can access your API key for your Project.

- Include this API key in your requests to authenticate with the API.
Programmatic wallet authentication
For AI agents, CLIs, and other non-browser clients, you can authenticate without the Herodotus Console UI using an EVM wallet and the EIP-712 challenge flow. The result is a Bearer access token plus an API key — no cookie jar required.Want a copy-paste playbook for an AI assistant? Load the
Herodotus Auth AI Skill — it includes the full
protocol contract, anti-hallucination guardrails, and a viem reference
example.
https://auth-billing.api.herodotus.cloud
Step 1 — Fetch a challenge
challengeToken plus an eip712 object with domain, types, primaryType, and message. Sign exactly those fields — do not reconstruct them client-side.
Step 2 — Sign the typed data
Use any EIP-712 signer (viem, ethers, MetaMask, KMS, hardware wallet). The wallet that signs must match the address in the challenge URL.Step 3 — Exchange for a Bearer session
channel is "bearer", no Set-Cookie is sent. Use Authorization: Bearer <accessToken> on every subsequent call. Omit channel (or pass "cookie") to fall back to the browser cookie flow.
Step 4 — Retrieve your API key
First-time wallets are auto-provisioned with a Personal project and one active API key. Read it with:data[0].apiKey is the value to use against Atlantic API, Storage Proof API, etc. To mint additional keys later, POST /api-keys with { "projectId": "...", "type": { "name": "...", "color": "..." } }.
Step 5 — Refresh
When the access token approachesexpiresAt, exchange the refresh token for a new pair:
{ accessToken, refreshToken, expiresAt }. The previous refresh token is invalidated. Cookie callers continue to refresh via cookies — the same endpoint serves both transports.

