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.