Start
Quickstart
From sign-in to your first render in a few minutes.
1. Top up and create a key
Sign in with your email, add money to your wallet with UPI under Wallet, then create a key under Keys in your workspace. Keys start with rtr_live_ and are shown once.
export ROUTER_KEY=rtr_live_...2. Get a quote
Every media call gets a rupee price before it runs. Ask GET /models/{id} which params a model takes.
curl https://userouter.in/api/v1/quote \
-H "Authorization: Bearer $ROUTER_KEY" \
-H "content-type: application/json" \
-d '{"model": "kling/kling-v2.1", "params": {"duration_s": 5, "resolution": "1080p"}}'{
"quote_id": "q_...",
"model": { "id": "kling/kling-v2.1", "name": "Kling 2.1" },
"spec": ["5 s", "1080p"],
"amount_paise": 3840,
"gst_paise": 691,
"gst": "extra",
"currency": "INR",
"expires_at": "2026-11-11T10:15:00Z"
}That is ₹38.40 + ₹6.91 GST. Prices on this page are examples.
3. Run it
curl https://userouter.in/api/v1/generations \
-H "Authorization: Bearer $ROUTER_KEY" \
-H "content-type: application/json" \
-d '{"quote_id": "q_...", "input": {"prompt": "A Mumbai street at dusk, slow push in"}}'You get 202 and a generation with status queued. Poll GET /generations/{id} until it is succeeded or failed. A failed render is never charged.
4. Or chat with a text model
The chat endpoint takes the OpenAI request shape, so most SDKs work by changing the base URL.
from openai import OpenAI
client = OpenAI(base_url="https://userouter.in/api/v1", api_key="rtr_live_...")
r = client.chat.completions.create(
model="deepseek/deepseek-v4.1-flash",
messages=[{"role": "user", "content": "Namaste!"}],
)
print(r.choices[0].message.content, r.usage.cost_paise)Next: Generations, Chat completions, or add Router to your agent.