OpenAI-compatible API
Drop-in baseURL, honest limits.
Streaming, tools and JSON mode with per-key spend caps and INR billing - text + tools only. Anything unsupported fails fast with a clear 400 before billing.
Quickstart
Any OpenAI SDK - only the baseURL changes
Base URL: https://velatl.ai/api/v1 API key: velatl_... (Settings -> API keys; legacy vtai_... keys still work) Model: balanced | fast
Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(base_url="https://velatl.ai/api/v1", api_key="velatl_...")
r = client.chat.completions.create(
model="balanced",
messages=[{"role": "user", "content": "Hi"}],
)
print(r.choices[0].message.content)Tool calling + JSON mode
curl https://velatl.ai/api/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer velatl_..." \
-d '{
"model": "balanced",
"messages": [{"role":"user","content":"Weather in Chennai?"}],
"tools": [{"type":"function","function":{
"name":"get_weather","description":"Current conditions",
"parameters":{"type":"object","properties":{"city":{"type":"string"}}}}}],
"tool_choice": "auto",
"response_format": {"type":"json_object"}
}'
# tool definitions bill as input tokens - keep tool lists lean.Errors you can rely on
402 insufficient_credits- out of balance; top up in billing.400before billing for image/audio inputs, thinking blocks, forced tool_choice, legacy functions API, orn != 1.- Every response carries
X-Request-Id; every call settles in one ledger with automatic refunds on failure. GET /api/v1/modelsreturns your plan's models with per-1k credit rates.
Tool-specific guides
- VelATL + OpenCode - 1-minute provider setup with spend guardrails.
- VelATL + Claude Code - ANTHROPIC_BASE_URL with tool_use blocks.
- VelATL MCP server - chat, get_balance and list_models for any MCP client.
- Developer docs - the complete v1 reference both protocols share.