TitanEnsemble — Quickstart
Base URL: https://api.titanensemble.com · Auth: X-API-Key: <your key> on every request.
TitanEnsemble is one API for the frontier models — your provider key pays the model, the subscription pays for the intelligence layer: every API key keeps its own persistent memory, its own briefing, and its own reading material. An API key is a conversation.
This walkthrough ends in a working call, in under a minute.
0. Get your API key
Sign in at titanensemble.com, then open Settings → Keys and create a key. It is shown exactly once — copy it now.
export TITAN_KEY=qk_...
Each key is its own conversation, with its own memory, briefing and reading material. Create a separate key per project or per assistant rather than reusing one; keys are also the unit you revoke.
1. See the seats
curl -s https://api.titanensemble.com/v1/models \
-H "X-API-Key: $TITAN_KEY" | jq '.data[].id'
Six seats: AgentK, AgentG, AgentM, AgentQ, AgentD (frontier models, served on
your own provider account) and AgentT (hosted by us — works before you add any
provider key, and it's what the free tier runs on).
2. Your first completion — the hosted seat
curl -s https://api.titanensemble.com/v1/chat/completions \
-H "X-API-Key: $TITAN_KEY" -H "Content-Type: application/json" \
-d '{"model": "AgentT", "messages": [{"role": "user", "content": "hello"}]}'
Standard OpenAI-compatible request/response shapes — existing SDKs work by pointing
base_url at us.
3. Add a provider key — unlock the frontier seats
Store your own provider credential once. We validate it against the provider at paste time (a metadata-only call — zero tokens billed) and never show it again:
curl -s -X PUT https://api.titanensemble.com/v1/secrets/providers/openrouter \
-H "X-API-Key: $TITAN_KEY" -H "Content-Type: application/json" \
-d '{"value": "sk-or-..."}'
- A bad key is a
400with the provider's own verdict — nothing is stored. - A provider outage is a
503— nothing is stored; try again. - Supported providers today:
openrouter,together,novita. You can store keys for several; calls route across your accounts by your priority order, then measured speed.
Check what your keys unlock:
curl -s https://api.titanensemble.com/v1/secrets -H "X-API-Key: $TITAN_KEY" | jq .availability
Each provider row shows which seats it serves (a false cell means that provider
doesn't carry the model — add a key for one that does).
4. A frontier completion — on your key
curl -s https://api.titanensemble.com/v1/chat/completions \
-H "X-API-Key: $TITAN_KEY" -H "Content-Type: application/json" \
-d '{"model": "AgentK", "messages": [{"role": "user", "content": "hello"}]}'
Your provider bills the model tokens directly. We never place a paid call on your behalf with our own accounts — if no credential of yours can serve a seat, the request fails with a clear error instead.
5. Teach your key
The briefing — what you TELL a key (persistent instructions, editable any time):
curl -s -X PUT https://api.titanensemble.com/v1/auth/keys/$KEY_ID/briefing \
-H "X-API-Key: $TITAN_KEY" -H "Content-Type: application/json" \
-d '{"text": "You are the support bot for AcmeCo. Never discuss pricing."}'
A knowledge set — what you GIVE it to read (text documents, embedded and retrieved into that key's calls):
SET=$(curl -s -X POST https://api.titanensemble.com/v1/knowledge-sets \
-H "X-API-Key: $TITAN_KEY" -H "Content-Type: application/json" \
-d '{"name": "product docs"}' | jq -r .id)
curl -s -X POST https://api.titanensemble.com/v1/knowledge-sets/$SET/documents \
-H "X-API-Key: $TITAN_KEY" -H "Content-Type: application/json" \
-d '{"name": "faq.md", "text": "Q: How do refunds work?\nA: ..."}'
curl -s -X POST https://api.titanensemble.com/v1/knowledge-sets/$SET/attach \
-H "X-API-Key: $TITAN_KEY" -H "Content-Type: application/json" \
-d '{"key_id": "'$KEY_ID'"}'
Text only, quota'd per plan. Knowledge sets are account-level — attach the same set to several keys; each key composes its own reading list.
6. Watch your usage
curl -s https://api.titanensemble.com/v1/usage/summary -H "X-API-Key: $TITAN_KEY"
The breakdown shows tokens per resource type — and for calls served on your own
provider accounts, which provider served each slice, so your provider invoices
reconcile against our numbers. Optional per-key spending ceilings:
PUT /v1/budgets/api_token/{key_id}.
Full endpoint reference: API.md.