1. Create an API key
Sign in to Fous Studio. Open Developers at the bottom of the window, turn on Developer mode, then select API keys and create a key. Keys belong to the organization you are in; its credits, limits and connected accounts apply to every call.
Store the key as FOUS_API_KEY in your server environment. Never put it in browser code or a repository.
export FOUS_API_KEY="fous_sk_..."
2. Pick a tool
Every public tool has a handle such as @hacker-news and one or more operations with a typed input. Search the catalog without a key:
curl --get 'https://api.fous.com/v1/catalog' --data-urlencode 'query=hacker news'
The result lists each tool's api handle and its operations. Open one in the catalog to read its input schema and verified examples: GET /v1/catalog/detail?api=@hacker-news. Find a tool explains the filters.
3. Call it
Send the handle, the operation and an input that matches its schema. Add an Idempotency-Key so that a retried request returns the same result instead of running and charging again.
curl 'https://api.fous.com/v1/query' \
-H "Authorization: Bearer $FOUS_API_KEY" \
-H "Idempotency-Key: $FOUS_IDEMPOTENCY_KEY" \
-H 'Content-Type: application/json' \
-d '{"api":"@hacker-news","operation":"list_front_page","input":{"list_name":"show_hn","max_results":5}}'
The Python example uses the requests package (pip install requests). Node.js 18 or later has fetch built in.
4. Read the result
Check the HTTP status and success, then read data.output. The receipt tells you what ran and what it cost.
{
"success": true,
"data": {
"output": {
"stories": [
{
"rank": 1,
"title": "Show HN: Jeff – Jev-compatible 0.8B decision models, trained at home",
"author": "firelex",
"points": 230,
"item_id": 49883844,
"posted_at": "2026-09-28T20:23:36Z",
"website_link": "https://github.com/firelex/jeff",
"comment_count": 79,
"discussion_link": "https://news.ycombinator.com/item?id=49883844"
}
]
},
"receipt": {
"request_id": "req_mg7x9f2kQ1nTz8bW3pLc0RhV",
"api": "@hacker-news",
"operation": "list_front_page",
"billing": { "status": "settled", "reserved_credits": 1, "charged_credits": 1 }
}
}
}A failure returns success: false and an error with a code to branch on. Errors and limits lists every code.
5. Keep the request ID
The receipt's request_id (also sent as the X-Request-Id header) identifies the run. Look it up at any time without running the tool again:
curl "https://api.fous.com/v1/query/requests/$FOUS_REQUEST_ID" \
-H "Authorization: Bearer $FOUS_API_KEY"
After a timeout or a dropped connection, retry with the same body and the same idempotency key. Use a new key when you want fresh data. Retries and idempotency.
Next steps
- Call a tool: every request field, versions and private tools.
- Connect an AI agent: the same tools in Claude, Codex, Cursor and VS Code.
- API reference: parameters and responses for every endpoint.