Get API access

Developers

The egg rate API, free to read.

Every number on this site comes from the same endpoints documented below. Prices are returned as integer paise per egg, alongside rupee values and per-unit prices, so your client never has to do price maths.

Markets covered
34

NECC declared zones

Latest rate date
17 August 2026

Refreshed daily

Read auth
None

No API key needed

Response format
JSON

Envelope with meta and data

Quickstart

One request, the whole board.

# today's rates for every market
curl https://eggrate-api.eggrates19.workers.dev/api/v1/rates/today

# one market, all four unit prices
curl https://eggrate-api.eggrates19.workers.dev/api/v1/rates/barwala

# 90 days of history
curl "https://eggrate-api.eggrates19.workers.dev/api/v1/rates/namakkal/history?days=90"

# only Tamil Nadu, cheapest first
curl "https://eggrate-api.eggrates19.workers.dev/api/v1/rates/today?state=tamil-nadu&sort=rate_asc"

Live response, trimmed to one row

{
  "success": true,
  "meta": {
    "rate_date": "2026-08-17",
    "count": 34,
    "currency": "INR",
    "source": "necc"
  },
  "data": [
    {
      "market": "namakkal",
      "name": "Namakkal",
      "state": {
        "slug": "tamil-nadu",
        "name": "Tamil Nadu",
        "code": "TN"
      },
      "zone": "South",
      "rate_date": "2026-08-17",
      "paise": 564,
      "rupees": 5.64,
      "prices": {
        "piece": {
          "eggs": 1,
          "paise": 564,
          "rupees": 5.64,
          "display": "₹5.64"
        },
        "tray": {
          "eggs": 30,
          "paise": 16920,
          "rupees": 169.2,
          "display": "₹169"
        },
        "hundred": {
          "eggs": 100,
          "paise": 56400,
          "rupees": 564,
          "display": "₹564"
        },
        "peti": {
          "eggs": 210,
          "paise": 118440,
          "rupees": 1184.4,
          "display": "₹1,184"
        }
      },
      "change": {
        "paise": 0,
        "rupees": 0,
        "percent": 0,
        "direction": "flat",
        "display": "No change",
        "since": "2026-08-16"
      }
    }
  ]
}

Captured from the live API when this page was rendered. `paise` is authoritative; `rupees` and `display` are conveniences derived from it.

17 endpoints

Full reference

All paths are relative to https://eggrate-api.eggrates19.workers.dev/api/v1

API endpoint reference
EndpointWhat it returnsQuery params
GET/rates/todayThe full rate board for one day, one row per market.date, state, zone, sort, unit
GET/rates/{market}Current declared rate for a single market, with all four unit prices.date
GET/rates/{market}/historyDaily price series plus average, low, high, change and volatility.days (2–730), date
GET/rates/{market}/monthlyMonthly average, low and high for a market.months (1–36)
GET/summaryNational roll-up and per-zone averages.date
GET/trendsBiggest gainers and decliners, plus cheapest and dearest markets.date, limit (1–34)
GET/marketsMarket master list with state, zone and coordinates.state, zone
GET/markets/{market}Everything for one market in a single call: rate, series, monthly, neighbours.date, days, months
GET/statesEvery state with today’s average, low and high.date
GET/states/{state}One state with each of its markets.date
GET/catalogStates and markets together, handy for sitemaps.
GET/healthLiveness plus row counts and coverage window.
GET/openapi.jsonOpenAPI 3.1 schema for the whole API.
POST/subscribeAdd an email to the daily rate list.
POST/contactSend a message to the team.
POST/admin/ratesBearer token requiredIngest declared rates for a date.
POST/admin/carry-forwardBearer token requiredRepeat the last known rate for markets missing a date.

Response shape

Envelope, prices and change

Every successful response is { success, meta, data }. meta always carries generated_at, and on rate endpoints it also carries as_of, rate_date, stale and a human date_label.

as_of is the date you asked about. rate_date is the newest print actually returned. When a market has not declared for your requested date, its row keeps the last declared price and its own rate_date reflects that, with stale: true on the envelope. Nothing is silently invented.

prices holds all four selling units, each with eggs, paise, rupees and a preformatted display string. change compares against the market’s own previous declared rate and includes since, the date being compared with.

Errors

{
  "success": false,
  "error": {
    "code": "not_found",
    "message": "No market called \"nope\".",
    "details": { "hint": "GET /api/v1/markets lists every available market slug." }
  }
}

Codes: bad_request, not_found, unauthorized, rate_limited, conflict, unprocessable, internal_error, no_data.

Fair use

Caching and limits

Read endpoints are cached at Cloudflare’s edge for five minutes with a stale-while-revalidate window, and they set Cache-Control accordingly. Honour it and you will rarely hit origin. Rates change once a day, so polling more often than hourly gains you nothing.

There is no hard rate limit on read endpoints today, and no key to request. Write endpoints (/subscribe, /contact) are throttled per email address. Ingestion endpoints under /admin require a bearer token.

Rates are NECC declared wholesale prices republished for information. Attribution back to this site is appreciated but not required.

Building something with this? Tell us and we will keep your use case in mind before changing anything.