Anova API Docs
Quickstart
Used for all x-api-key headers below.
Get your API key from https://backyardbandwidth.com/user/dashboard
X-Api-Key: YOUR-API-KEY
Endpoints
POST /api/v1/llm/limits
Auth: x-api-keyLook up your current token allowance and how many tokens remain.
curl -XPOST \
-H "x-api-key: 629330d3854f86cf226c652b70d92a6a973cbf5af29cd0acd4b67f3e" \
https://api.backyardbandwidth.com/api/v1/llm/limits
{
"data": { "tokens_left": 3000000 },
"error": {},
"success": true
}
curl -XPOST \
-H "x-api-key: 629330d3854f86cf226c652b70d92a6a973cbf5af29cd0acd4b67fe" \
https://api.backyardbandwidth.com/api/v1/llm/limits
{
"data": {},
"error": { "msg": "Unable to lookup tokens" },
"success": false
}
POST /api/v1/llm/tokenize
Auth: x-api-keyTokenize a prompt to estimate usage.
curl -XPOST \
-H "x-api-key: 629330d3854f86cf226c652b70d92a6a973cbf5af29cd0acd4b67f3e" \
-H "content-type: application/json" \
--data '{"prompt": "this is a test"}' \
https://api.backyardbandwidth.com/api/v1/llm/tokenize
{
"data": { "tokens": 4 },
"error": {},
"success": true
}
prompt)curl -XPOST \
-H "x-api-key: 629330d3854f86cf226c652b70d92a6a973cbf5af29cd0acd4b67f3e" \
-H "content-type: application/json" \
--data '{"pro": "this is a test"}' \
https://api.backyardbandwidth.com/api/v1/llm/tokenize
{
"data": {},
"error": { "msg": "No prompt provided" },
"success": false
}
POST /api/v1/llm/send
Auth: x-api-keySubmit a prompt for processing. Returns a uuid you can poll with /status.
curl -XPOST \
-H "x-api-key: 629330d3854f86cf226c652b70d92a6a973cbf5af29cd0acd4b67f3e" \
-H "content-type: application/json" \
--data '{"prompt": "hi who are you?"}' \
https://api.backyardbandwidth.com/api/v1/llm/send
{
"data": {
"answer": {},
"status": "PENDING",
"uuid": "0ed02fa0-c6c9-473c-b147-d307da57e3b7"
},
"error": {},
"success": true
}
prompt)curl -XPOST \
-H "x-api-key: 629330d3854f86cf226c652b70d92a6a973cbf5af29cd0acd4b67f3e" \
-H "content-type: application/json" \
--data '{"prot": "hi who are you?"}' \
https://api.backyardbandwidth.com/api/v1/llm/send
{
"data": {},
"error": { "msg": "No prompt presented" },
"success": false
}
POST /api/v1/llm/status
Auth: x-api-keyCheck the current status of a submission using its uuid.
curl -XPOST \
-H "x-api-key: 629330d3854f86cf226c652b70d92a6a973cbf5af29cd0acd4b67f3e" \
-H "content-type: application/json" \
--data '{"uuid": "0ed02fa0-c6c9-473c-b147-d307da57e3b7"}' \
https://api.backyardbandwidth.com/api/v1/llm/status
{
"data": {
"answer": " I am Anova, a stateless coding assistant created by Backyard Bandwidth to provide fast, accurate, readable, and well-commented code and unbiased factual information only.",
"status": "SUCCESS",
"uuid": "0ed02fa0-c6c9-473c-b147-d307da57e3b7"
},
"error": {},
"success": true
}
uuid)curl -XPOST \
-H "x-api-key: 629330d3854f86cf226c652b70d92a6a973cbf5af29cd0acd4b67f3e" \
-H "content-type: application/json" \
--data '{"uui": "0ed02fa0-c6c9-473c-b147-d307da57e3b7"}' \
https://api.backyardbandwidth.com/api/v1/llm/status
{
"data": {},
"error": { "msg": "No UUID supplied" },
"success": false
}
// 1) Send prompt
const API_KEY = "629330d3854f86cf226c652b70d92a6a973cbf5af29cd0acd4b67f3e";
const API_BASE = "https://api.backyardbandwidth.com";
const sendRes = await fetch(`${API_BASE}/api/v1/llm/send`, {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ prompt })
}).then(r => r.json());
// 2) Poll status until SUCCESS (or timeout)
let data = sendRes.data;
while (data.status === "PENDING") {
await new Promise(r => setTimeout(r, 1200));
const s = await fetch(`${API_BASE}/api/v1/llm/status`, {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ uuid: data.uuid })
}).then(r => r.json());
data = s.data;
}
if (data.status === "SUCCESS") console.log(data.answer);
Notes
- All endpoints are
POSTand require thex-api-keyheader. - Responses follow
{ data, error, success }. Whensuccessisfalse, check.error.msg. /sendreturns{ status: "PENDING", uuid }. Use/statusto retrieve the final.data.answer.- All endpoints have a hard limit of
10 request per second
What’s a token?
Applies to all plansA token is a small chunk of text the AI reads or writes. Think of tokens as pieces of words: in English, 1 token ≈ 3–4 characters or ~0.75 words. Both your input and the AI’s output count toward your monthly limit.
- Your question or prompt (including spaces, punctuation, code formatting).
- Any text you paste in (docs, JSON, logs, etc.).
- The AI’s reply.
- Optional instructions in the chat (system text) if present.
- Quick Q&A: ~200–500 tokens total (short question + short answer).
- Code help / small snippet: ~800–1,500 tokens.
- Medium task (explain + code + examples): ~1,500–3,000 tokens.
- Long, doc-heavy or RAG session: ~8,000–20,000 tokens.
Assuming a 30-day month. Your actual usage varies by prompt size and reply length.
| Plan | Avg tokens/day | Quick Q&A (~300) | Medium task (~2,000) | Long/RAG (~12,000) |
|---|---|---|---|---|
| Basic (20M/mo) | ~665k | ~2,200 chats | ~330 tasks | ~55 sessions |
| Pro (75M/mo) | ~2.5M | ~8,300 chats | ~1,250 tasks | ~210 sessions |
| Heavy (500M/mo) | ~16.7M | ~55,500 chats | ~8,300 tasks | ~1,390 sessions |
Estimates only. If you paste large documents or request long code outputs, totals rise accordingly.
- Ask for concise answers when you don’t need full prose (“bullet points please”).
- Paste only the parts of a document you want analyzed, or ask for a summary of long text first.
- When coding, request just the function or diff instead of full files when possible.
- Turn off live web lookup when you don’t need fresh data.
- 1,000 tokens ≈ ~750 words.
- A short paragraph is ~50–100 tokens; a page of text is ~500–1,000 tokens.
- Code tends to use more tokens than plain English because of symbols and indentation.