Developers
Your credits, everywhere you work.
One API key spends your VT.AI balance inside external tools - same rates as the web app, same ledger, per-key spend tracking in Settings.
1. Create a key
Log in → Settings → API keys → name it (e.g. “opencode laptop”) → copy the secret once - it is never shown again. Revoke anytime; revocation is instant.
2. Connect your tool
OpenCode / Cline / Continue (OpenAI-compatible)
{
"provider": "vt-ai",
"baseURL": "https://velatl.ai/api/v1",
"apiKey": "vtai_...",
"model": "fast"
}Claude Code (Anthropic-compatible)
export ANTHROPIC_BASE_URL="https://velatl.ai/api/v1" export ANTHROPIC_API_KEY="vtai_..." # model: fast (or balanced on paid plans)
Claude Desktop / MCP clients
# MCP server (Streamable HTTP): https://velatl.ai/api/mcp # Authorization: Bearer vtai_... # Tools: chat (billed), get_balance, list_models (free)
curl - OpenAI shape
curl https://velatl.ai/api/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer vtai_..." \
-d '{"model":"fast","messages":[{"role":"user","content":"Hi"}]}'curl - Anthropic shape
curl https://velatl.ai/api/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: vtai_..." \
-H "anthropic-version: 2023-06-01" \
-d '{"model":"fast","max_tokens":1024,"messages":[{"role":"user","content":"Hi"}]}'Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(base_url="https://velatl.ai/api/v1", api_key="vtai_...")
r = client.chat.completions.create(
model="fast",
messages=[{"role": "user", "content": "Hi"}],
)
print(r.choices[0].message.content)3. Models & pricing
Slugs below are the model values both protocols accept. Billed from the same balance at web rates - see per-key spend in Settings.
balanced
Stronger reasoning for writing, analysis and code.
4 cr / 1k in · 16 cr / 1k out · max 2,048 out
fast
Fast, low-cost chat for everyday questions and drafts.
2 cr / 1k in · 8 cr / 1k out · max 2,048 out
Billing & limits
- Every call reserves max cost first, then settles actuals - failed calls refund in full, automatically.
- Out of credits →
402 insufficient_credits. Top up or upgrade in billing. - Fair-use rate limits per key + plan caps shared with the web app.
- Every response carries
X-Request-Id- quote it in support mail. GET /api/v1/modelslists the models your plan can use.
Limits of v1
- Text only: no images, tool calling, JSON mode, or thinking blocks - rejected with a clear 400 before anything is billed.
- Sampling settings (temperature etc.) are accepted but run provider defaults.
- Token counts on streaming are usage estimates settled exactly server-side.