TRAI — tariff & interconnect order tracker
tip
Status: LIVE — Real-time data from the upstream regulator. Updated on the regulator's publication cadence.
What it does
TRAI publishes tariff orders, regulations, and consultation papers as PDF blobs. Our API extracts structured metadata (issue date, effective date, supersedes/superseded-by chain, affected operators, subject) and exposes a queryable surface — useful for legal and regulatory-compliance teams tracking telecom-policy changes.
Base URL
https://trai-tariff.sahayakonline.co.in/v1/
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /health | Liveness probe |
GET | /v1/trai/orders | List all tariff orders with optional from/to/subject filters |
GET | /v1/trai/orders/{order_id} | Single order detail with full text reference + supersession chain |
GET | /v1/trai/regulations | Telecom regulations (separate corpus from tariff orders) |
GET | /v1/trai/search?q=<query> | Free-text search across orders, regulations, consultations |
Sample request
- cURL
- Python
- Node.js
curl -sS https://trai-tariff.sahayakonline.co.in/v1/trai/orders?from=2026-01-01 \
-H "Authorization: Bearer $SAHAYAK_KEY" \
-H "Accept: application/json"
import os, requests
resp = requests.get(
"https://trai-tariff.sahayakonline.co.in/v1/trai/orders?from=2026-01-01",
headers={"Authorization": f"Bearer {os.environ['SAHAYAK_KEY']}", "Accept": "application/json"},
timeout=10,
)
resp.raise_for_status()
print(resp.json())
const fetch = (await import('node-fetch')).default;
const resp = await fetch('https://trai-tariff.sahayakonline.co.in/v1/trai/orders?from=2026-01-01', {
headers: {
'Authorization': `Bearer ${process.env.SAHAYAK_KEY}`,
'Accept': 'application/json',
},
});
console.log(await resp.json());
Sample response
{
"spec_ref": "spec_V3_08_TRAI_Tariff_and_Interconnect_Order_Tracker_API",
"endpoint": "/v1/trai/orders",
"method": "GET",
"results": [
{
"order_id": "TRAI-T-2026-0042",
"subject": "Tariff for Public Mobile Radio Trunking Services (Amendment)",
"issue_date": "2026-04-12",
"effective_date": "2026-05-01",
"supersedes": ["TRAI-T-2024-0019"]
}
],
"meta": { "fixture_mode": false, "url": "https://trai-tariff.sahayakonline.co.in/v1/" }
}
Error codes
| Code | Meaning | Recommended action |
|---|---|---|
400 | Malformed request (missing required param, invalid format) | Fix request shape. Response body includes error.field pinpointing the issue. |
401 | Missing or invalid Authorization header | Verify key prefix matches your tier and that the header is Authorization: Bearer …. |
403 | Key valid but not entitled to this endpoint | Sandbox keys cannot call live-tier endpoints. Upgrade or request entitlement. |
404 | Resource not found | Check identifier format. Some endpoints return 200 with empty results[] instead of 404 — verify the endpoint convention. |
429 | Rate limit exceeded | Honor Retry-After header. Sandbox 30 r/m, Starter 300 r/m, Growth 1500 r/m. |
503 | Upstream regulator unreachable after retries | Live-tier only. Sahayak retries 3× with backoff before surfacing. Implement circuit-breaker on caller side. |
Rate limits
| Tier | Rate limit | Monthly cap |
|---|---|---|
| Sandbox | 30 r/min | 1,000 live calls (shared across 3 LIVE endpoints) |
| Starter | 300 r/min | 10,000 live calls |
| Growth | 1,500 r/min | 100,000 live calls |
| Scale | custom | 500,000+ |
SLA reference
See Status & SLA for uptime targets, latency targets, and incident communication. New TRAI publications appear within 4 hours of trai.gov.in upload.