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

MethodPathParamsDescription
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/metaDataset metadata.
GET/openapi.jsonOpenAPI 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