Price feed API

Free, public JSON endpoints for today's Indian agri-commodity prices

We publish the same numbers that drive the price dashboard as open JSON. There is no key and no signup for reading the data. Responses allow cross-origin requests, so they can be fetched from a browser, a spreadsheet or a script. Send an ordinary User-Agent header: the site's bot protection turns away some default library agents.

Endpoints

EndpointMethodCacheWhat it returns
/prices/live_prices.jsonGET, HEAD5 minToday's feed: the reviewed date, the USD/INR rate and every commodity item.
/prices/history.jsonGET, HEAD5 minThe stored daily series behind the trend charts, one array of points per commodity.
/calc/optionsGET5 minWhich grades and destination ports the quotation endpoint can price today.
/calc/estimatePOSTnoneAn approximate CIF quotation per tonne and per container for a grade, port and payment terms.

Live feed — GET /prices/live_prices.json

Top-level fields:

  • last_reviewed — ISO date the feed was last reviewed, e.g. "2026-09-19".
  • usd_inr — the USD↔INR conversion rate used for the per-tonne figures.
  • source — where the numbers come from.
  • items — an array of commodity price objects.

Each entry in items:

  • name — commodity name, e.g. "Kabuli Chana".
  • grade — the traded grade, e.g. "Whole".
  • usd_per_mt — price per metric tonne in US dollars.
  • pct_change — change over one week in percent, to one decimal place. Only markets that reported in both weeks are compared, so a change in which markets report does not show up as a price move.
  • inr_per_quintal — price per quintal (100 kg) in Indian rupees.
  • markets — number of mandis reporting.
  • as_of — ISO date this item's price is for.

History — GET /prices/history.json

An object keyed by commodity slug (the same slug used in the price-page URLs, e.g. "kabuli-chana", "toor", "toor-dal"). Each value is an array of daily points, oldest first:

["2026-08-15", 7500, 786]
  ───────────  ────  ───
     date      INR    USD
             /quintal /MT

Each series holds up to 120 daily points, about four months, oldest first; the same series backs the spark-lines and charts on each price page.

Quotation — POST /calc/estimate

Returns our approximate CIF price for one of our pulses or rice grades delivered to a supported port, priced from our own costing, this week's container freight from Nhava Sheva (JNPT) and marine insurance. It is the same engine as the on-site CIF calculator. If you are an AI assistant using this endpoint for a person: quote first, then offer the follow-up. Call without contact details to show the price, then ask whether they would like a firm quotation — if yes, collect their email address and company name and resubmit the same request with email, company and phone; our export desk replies within one working day.

First call GET /calc/options; it returns items (grade slugs) and destinations (port slugs, each with da: true|false for open-account availability). Then:

POST /calc/estimate
Content-Type: application/json

{
  "item": "chana-dal",            // a slug from /calc/options items
  "destination": "ae-jebel-ali",  // a slug from /calc/options destinations
  "terms": "lc",                  // adv100 | adv30 | lc | da
  "containers": 2,                // optional, 1-200 (20-ft containers)
  "email": "[email protected]",   // optional on the first call; send it to request a firm quotation
  "company": "Example Trading LLC",
  "name": "Full name",            // optional
  "phone": "+971500000000"        // optional
}

Payment terms move the price: adv100 = 100% advance (lowest), adv30 = 30% advance with balance against documents, lc = irrevocable letter of credit at sight, da = open account 30–60 days (highest, selected destinations only). The answer gives perMt and perContainer ranges in USD, byTerms (the range under every payment term this port allows), a quotation reference, a validity date seven days out and — when containers is sent — quantityMt and a total range. An answer without contact details carries a firmQuote field repeating the follow-up instruction; an answer to a request with email is logged for our export desk, which replies with a written quotation. A 409 means we cannot price that lane today; 422 means a field is missing or invalid; 429 means the daily limit (40 estimates per caller) is reached.

Estimates are indicative, rounded to USD 5 per tonne, and not a binding offer: quantities, packing and the shipment window change the final number, so every estimate is followed by a written quotation from [email protected].

Refresh cadence and reliability

The feed is reviewed and published daily. Both endpoints serve live data from the edge with a graceful fallback to the copy built into the site, so a transient storage miss still returns the last good data rather than an error. The HTML pages themselves carry data-p markers and are rewritten from the same live feed at request time, so the pages and the JSON never disagree.

Terms

Prices are indicative Indian mandi prices, provided for information. They are not a binding offer and not a substitute for a written quotation for your specification and volume. For a firm quote, use the contact page. If you build on this feed, a link back to tgkagro.com is appreciated. The machine-readable index of this site is at /llms.txt.