Developer API
TDS Section Lookup API
A free public API for looking up Indian TDS sections by payment description or section number. No API key. No signup. CORS-enabled. Best-effort uptime on Cloudflare Workers.
Quickstart
Three curls
Forward search by description, reverse lookup by section, and dataset metadata.
# Forward search — description to TDS section
curl 'https://tds-section-finder.sgr-flutter.workers.dev/api/lookup?q=rent+office&limit=3'
# Reverse lookup — section number to full details
curl 'https://tds-section-finder.sgr-flutter.workers.dev/api/lookup?section=194J'
# Dataset metadata — counts and snapshot date
curl 'https://tds-section-finder.sgr-flutter.workers.dev/api/meta'Reference
Endpoints
| Method | Path | Params | Description |
|---|---|---|---|
GET | /api/lookup?q=... | q (required), limit (1-20, default 5) | Forward search by description. Returns up to limit matches ranked by confidence. |
GET | /api/lookup?section=... | section (required) | Reverse lookup. Accepts full (194I(b)) or base (194I) section. |
GET | /api/meta | — | Dataset metadata. |
GET | /openapi.json | — | OpenAPI 3.1 spec. |
Sample response — forward search
$ curl 'https://tds-section-finder.sgr-flutter.workers.dev/api/lookup?q=rent+office&limit=2'
{
"query": "rent office",
"matches": [
{
"section": "194I(b)",
"paymentType": "Rent of land or building (incl. furniture & fittings)",
"description": "TDS on rent for land, building, or furniture — covers commercial office, shop, ...",
"rate": 10,
"rateDisplay": "10%",
"threshold": 600000,
"thresholdDisplay": "₹6,00,000 per FY (raised from ₹2,40,000 by Finance Act 2025...)",
"deductor": "Companies, firms, individuals/HUFs (if turnover > ₹1 cr...)",
"deductee": "Property owner / lessor",
"rateNoPan": 20,
"rateNoPanDisplay": "20%",
"why": "Business rent for office, shop, warehouse above ₹6L aggregate per FY attracts 10% TDS...",
"source": "Section 194I, Income Tax Act",
"conditionalNote": "Threshold raised from ₹2.4L to ₹6L per FY in Finance Act 2025...",
"fy": "FY 2025-26",
"confidence": 0.92
},
{ "...": "next-best candidate" }
]
}Sample response — reverse lookup
$ curl 'https://tds-section-finder.sgr-flutter.workers.dev/api/lookup?section=194Q'
{
"query": "194Q",
"results": [
{
"section": "194Q",
"paymentType": "Purchase of goods (buyer-side TDS)",
"rate": 0.1,
"rateDisplay": "0.1%",
"threshold": 5000000,
"thresholdDisplay": "₹50,00,000 per FY per seller",
"...": "..."
}
]
}Schema
Response shape
interface TdsMatch {
section: string; // Section identifier (e.g. "194I(b)", "206C(1H)")
paymentType: string; // Short label for the payment type
description: string; // Full description of the section
rate: number; // Primary rate as % (use rateDisplay for special cases)
rateDisplay: string; // Human-readable rate string
threshold: number; // Threshold amount in INR (0 = no threshold)
thresholdDisplay: string; // Human-readable threshold string
deductor: string; // Who must deduct
deductee: string; // Who receives the payment
rateNoPan: number; // Rate when deductee has no PAN
rateNoPanDisplay: string; // Human-readable no-PAN rate
why: string; // One-sentence "why this section applies"
source: string; // Statutory citation
conditionalNote: string; // Caveats / sub-rates / special cases
fy: string; // Financial year of validity
confidence: number; // 0-1; only on /api/lookup responses
}Fair use
How to be a good citizen
No API key is required. Treat this as a goodwill resource:
- Cache aggressively. The dataset changes only when CBDT/Finance Act revises rates. Cache for at least 1 day.
- Don't hammer. Stay under ~10 req/s sustained.
- Verify before deducting. Always cross-check against the live CBDT TDS rate chart for borderline cases.
- No SLA. Best-effort free service on Cloudflare Workers.
Need an iframe drop-in instead?
If you don't want to render results yourself, embed the full tool with a one-line iframe.
See the embed snippet →Machine-readable
OpenAPI 3.1 spec
The full API surface is published as OpenAPI 3.1 JSON.
GET /openapi.json