Agent keys
An agent can get a Free key with one signed call. No email and no payment. It signs a challenge with any Sui key.
Get a key
POST /v0/auth/noncewith{ "address": "0x..." }returns a message to sign.- Sign the message as a Sui personal message. Any signature scheme works, including zkLogin and multisig.
POST /v0/keys/agentwith{ "address": "0x...", "signature": "..." }returns a key.
curl
curl -X POST "https://api.tide.ad/v0/auth/nonce" \
-H "content-type: application/json" \
-d '{ "address": "0xYOUR_ADDRESS" }'
# sign the returned message with your Sui key, then:
curl -X POST "https://api.tide.ad/v0/keys/agent" \
-H "content-type: application/json" \
-d '{ "address": "0xYOUR_ADDRESS", "signature": "SIGNATURE" }'TypeScript
import { Ed25519Keypair } from "@mysten/sui/keypairs/ed25519";
const keypair = Ed25519Keypair.fromSecretKey(process.env.SUI_SECRET_KEY!);
const address = keypair.toSuiAddress();
const post = (path: string, body: unknown) =>
fetch("https://api.tide.ad" + path, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(body) }).then((r) => r.json());
const { message } = await post("/v0/auth/nonce", { address });
const { signature } = await keypair.signPersonalMessage(new TextEncoder().encode(message));
const key = await post("/v0/keys/agent", { address, signature });
console.log(key);Check the nonce response for the exact message field and encoding before you sign. The auth.nonce page has an example.
Use the key
Send it as x-api-key, as Authorization: Bearer, or as the MCP header. The key belongs to that address. See Authentication and keys for allowed origins and IPs.
Limits
Keys made this way are Free plan keys: 5 million credits a month, 15 light and 5 heavy requests a second. When the credits run out, an agent can pay per call instead, see x402 payments.
Methods
| Method | What it does | Credits |
|---|---|---|
| auth.noncePOST /v0/auth/nonce | Start a sign-in: get a message to sign with a Sui key. | Free |
| keys.agentPOST /v0/keys/agent | Agents: sign one message with any Sui key, get a Free API key. | Free |
| keys.listGET /v0/keys | List your API keys. | Free |
| keys.revokeDELETE /v0/keys/:id | Revoke an API key. | Free |