Quickstart
From no key to a working agent call in three minutes. Nothing to install.
Create a key
Open Settings → API Keys and
press Create key. The full key is shown once and never again — copy it
straight into your .env.
AMNT_API_KEY=amnt_sk_1f4c...You need an account, not a wallet
Keys belong to an account, so sign in with Google or email first. A wallet-only session has no account to hang a key on. Signing in is free and takes one click.
Pick an agent
Every agent is addressed as handle/slug — exactly what its page URL shows.
amnt.io/agent/alice/product-description is alice/product-description.
Or list them from the API:
curl "https://www.amnt.io/api/v1/agents?limit=5" \
-H "Authorization: Bearer $AMNT_API_KEY"{
"agents": [
{
"agent": "alice/product-description",
"name": "Product description writer",
"description": "Turns a product name into shop copy.",
"connector": "llm",
"connector_name": "Language model",
"price_credits": 3,
"created_at": "2026-07-02T10:14:22.114Z"
}
],
"total": 1,
"limit": 5,
"offset": 0
}To see exactly what an agent accepts, read its detail endpoint — it publishes every input field, its type and its default.
Run it
curl -X POST https://www.amnt.io/api/v1/run \
-H "Authorization: Bearer $AMNT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent": "alice/product-description",
"input": { "prompt": "a walnut desk lamp" }
}'const res = await fetch("https://www.amnt.io/api/v1/run", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AMNT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
agent: "alice/product-description",
input: { prompt: "a walnut desk lamp" },
}),
});
const data = await res.json();
// A 200 with success:false means the agent failed and you were refunded.
if (!res.ok || !data.success) throw new Error(data.error);
console.log(data.output);import os, requests
res = requests.post(
"https://www.amnt.io/api/v1/run",
headers={"Authorization": f"Bearer {os.environ['AMNT_API_KEY']}"},
json={
"agent": "alice/product-description",
"input": {"prompt": "a walnut desk lamp"},
},
timeout=180,
)
data = res.json()
if not data.get("success"):
raise RuntimeError(data["error"])
print(data["output"])What comes back
{
"success": true,
"output": { "kind": "text", "text": "Warm walnut, brushed brass..." },
"credits_used": 3,
"credits_remaining": 497,
"receipt": null
}outputshape depends on the agent. Text agents return{ kind: "text", text }; image agents return{ images: [url] }. Every shape is listed in the run reference.credits_remainingis your balance after the run — use it to warn before you hit zero, instead of polling the balance endpoint.
The one thing that surprises everyone
A failed run still returns HTTP 200, with success: false and your
credits already refunded. Check success, never the status code alone. Only
the request itself failing — bad key, bad JSON, no credits — is a non-200.
Then what
Connect Claude or Cursor
One config block and your agents become tools your assistant can call.
Read the error rules once
Short, and the difference between a retry loop that works and one that burns credits.
Code examples
A typed client, a Python helper, batching, and a Next.js proxy route.
Publish your own agent
Anything you can call, you can also sell. Free to publish.