The API is deliberately small: one endpoint, two methods.
One URL — GET
GET https://yandex.com/indexnow?url=<String>&key=<String>[&keyLocation=<String>]url and key are required; keyLocation only when the key file is not in the root. The URL must comply with RFC 3986.
Many URLs — POST
POST https://yandex.com/indexnow
Content-Type: application/json; charset=utf-8
{ "host": "www.example.com",
"key": "…",
"keyLocation": "https://www.example.com/key.txt",
"urlList": [ "https://www.example.com/url1", … ] }Up to 10,000 URLs per request. host, key and urlList are required.
Response codes worth handling
- 200 OK — accepted.
- 202 Accepted — new key awaiting verification. Not an error; keep submitting.
- 400 — invalid parameters in the body.
- 403 Invalid key — the key could not be loaded, or does not match the submitted URLs. On a directory-scoped key this is usually a scope violation rather than a wrong key.
- 405 — only GET and POST are supported.
- 422 — the large family: invalid key location, invalid URL, key too short or too long, invalid characters, missing key, host or URL, more than 10,000 URLs,
urlListnot an array or empty. - 429 Too Many Requests — the per-IP limit was exceeded.
Rate limiting
Yandex states there is no limit on the number of requests and that its algorithms prevent excessive submission — while also documenting 429. Read together: submit as changes happen, batch where you can, and treat 429 as back-pressure requiring a retry with backoff rather than as a failure.
Implementation notes
Distinguish 202 from 200 in logs so a new key is not mistaken for a broken one; treat 422 as a permanent fault requiring a fix rather than a retry; and batch changes into a single POST rather than firing a GET per page, which is what usually triggers 429 on a busy publishing system.
How we apply this
The three response codes to handle properly are 202, 422 and 429, and integrations routinely treat all non-200 responses as failure. That produces two bad behaviours: regenerating a valid key during its verification window, and retrying a malformed request forever. We batch into POST for anything above a handful of URLs, which also avoids most rate limiting.
Related services