Claude API · priced in ₹

Same code.In rupees.One new URL.

Opus 5.5, Fable 5.1, Sonnet 5 and Haiku 4.5 in Claude Code, Cursor and the tools you already use. One base URL, one key — paid over UPI, cards or net banking, with no international card.

  • 3-day trial ₹499
  • GST included
  • no auto-renewal
Secured by RazorpayUPIRuPayVisaMastercardNet banking
or run the setup once
POSTapi.ultracode.in/v1/messages—
one key, four railsrouting diagram · not a benchmark
round trip—from this browser
billed in₹INRUPI · cards · net banking
context—largest window listed

for developers in india

Claude's four tiers, priced in ₹.

Paying for Claude in dollars usually means an international card and a forex charge from your bank. Here the plan is in rupees, paid the way you pay for everything else.

UPI, cards, net banking

Through Razorpay, GST included. No international card, no forex markup on your statement.

Every tier on it

Opus 5.5, Fable 5.1, Sonnet 5 and Haiku 4.5. Pick one per request with the model field.

A window that refills

Every plan is an allowance on a rolling five-hour window, which then opens again in full. Nothing renews by itself.

the switch

Three moves. None of them in your code.

your .env
.env+2 −0
+ANTHROPIC_BASE_URL=https://api.ultracode.in
+ANTHROPIC_AUTH_TOKEN=sk-uc-••••••••
 everything elseunchanged

Set the base URL

Two variables the client already reads. No SDK fork, no wrapper, no proxy on your machine.

your request
{
  "model": "claude-opus-5-5","claude-fable-5-1","claude-sonnet-5","claude-haiku-4-5-20251001",
  "max_tokens": 1024,
  "stream": true,
  "messages": [ … ]
}

Name a tier

One field picks the tier. The rest of the body is whatever your client already sends.

the response
  1. event:message_start
  2. event:content_block_start
  3. event:content_block_delta
  4. event:content_block_delta
  5. event:content_block_stop
  6. event:message_delta
  7. event:message_stop

Read the stream

Frames arrive in the order the SDK expects, message_start to message_stop, so the parser you have keeps working.

with the key

Built in from the first request.

Four things people ask about in the first minute, each shown rather than described.

Nothing to enable

Tool use, vision, documents, web search and streaming arrive with the key. There is nothing to enable and no second product to buy.

GET /health—
first sample on its way
min —max —0 sampleslive

Round trip, from where you sit

Each point is one GET /health from this browser to api.ultracode.in. It measures the path, not the model.

last five—

Five hours, then full again

The allowance is counted inside a rolling five-hour window. At the end of it, it reopens in full.

Pay in rupees

UPI, cards or net banking, GST included. The plan buys the window; the window refills.

4 tiers · read live from /v1/models

Four tiers, one field.

The model field picks the rail. Names and windows below are read from /v1/models when this page loads.

default

Opus 5.5

claude-opus-5-5
1Mcontext window

"model": "claude-opus-5-5"

deepest

Fable 5.1

claude-fable-5-1
1Mcontext window

"model": "claude-fable-5-1"

everyday

Sonnet 5

claude-sonnet-5
1Mcontext window

"model": "claude-sonnet-5"

volume

Haiku 4.5

claude-haiku-4-5-20251001
200Kcontext window

"model": "claude-haiku-4-5-20251001"

see it stream

A reply, streaming.

A recorded session, replayed in your browser token by token the way a client reads it — a different task each day.

POST /v1/messages · stream: true · claude-opus-5-5recorded session · not live inference

Add exponential backoff with jitter to fetchJson in lib/http.ts. Keep the signature.

Opus 5.5plays when this comes into view

I'll keep fetchJson's signature and wrap the existing call in a retry loop that only re-runs on 5xx and network failures.

lib/http.ts
export async function fetchJson<T>(url: string, init?: RequestInit): Promise<T> {
  for (let attempt = 0; ; attempt++) {
    const res = await fetch(url, init).catch(() => null);
    if (res?.ok) return (await res.json()) as T;
    const retryable = !res || res.status >= 500;
    if (!retryable || attempt === 4) throw new Error(res ? `${res.status} ${url}` : `network ${url}`);
    const base = 250 * 2 ** attempt;
    await new Promise((r) => setTimeout(r, base + Math.random() * base));
  }
}

A 4xx still throws on the first pass, so callers that already handle validation errors see no change. The wait grows from 250 ms to 4 s with full jitter, five attempts in total.

12 clients · one base URL

Works where you already work.

  • Claude Code
  • Cursor
  • VS Code
  • Zed
  • Cline
  • Windsurf
  • Roo Code
  • OpenClaw
  • OpenCode
  • Anthropic SDK
  • Claude for Excel
  • Claude for Microsoft 365

Anything that takes a base URL and a key in the Anthropic format. The setup command configures the common ones; the docs cover the rest.

3 plans · all in ₹

Three plans, one shape.

An allowance per rolling five-hour window, a validity in days, one key.

plans · all in ₹one key · every tier · refills every 5 h
start here

Trial

Every model, every feature. Prove it on your own code.

₹499

about ₹166 a day3 days · one payment
Start the 3-day trial
our pick

5×

The everyday plan. Real coding room, refilled every five hours.

₹2,999/ month

about ₹100 a day30 days · one payment
Get 5×
best value

20×

Built for agents, long sessions and whole-repo runs.

₹4,999/ month

about ₹167 a day30 days · one payment
Get 20×
on every plan
modelsOpus 5.5Fable 5.1Sonnet 5Haiku 4.5
with the keytool usevisiondocumentsweb searchstreaming
paying
  • Prices in ₹, GST included
  • UPI, cards or net banking via Razorpay
  • no auto-renewal

Prices in ₹, GST included · UPI, cards or net banking via Razorpay · no auto-renewal · refund policy

Compare every plan

Before you buy

What is the 5-hour window?

Each plan has an allowance per rolling 5-hour window. Once it is spent, requests get 429 Too Many Requests, with a Retry-After header, until the window refills in full. The paid plans get 5× and 20× the Trial's usage.

Which models are on every plan?

All four tiers — Opus 5.5, Fable 5.1, Sonnet 5 and Haiku 4.5 — are included on every plan. One key, one endpoint, all models.

How do I pay?

In ₹ through Razorpay — UPI, debit or credit cards, or net banking. Prices include GST, and no plan renews by itself. Sign in, pick a plan and pay; your key is on your dashboard as soon as the payment goes through.

Is there a permanent free tier?

No. The Trial plan runs the full service — every model — for 3 days at a small cost, so you can check quality and latency on your own work before a monthly plan.

every question →

start

Point your tools at one URL.

Run the setup once, send the request you were about to send anyway, and judge it on the answer.