Submit URLs
Submit up to 1000 new, changed or deleted URLs from one host to IndexNow in a single call.
https://api.rankparse.com/v1/indexnow1 credit (refunded on failure)API keySubmits a batch of URLs from one host to IndexNow, which shares it with Bing, Yandex, Seznam, Naver and the other participating engines. Before the first submission for a host, create its key and host the key file.
Body parameters
Send JSON with Content-Type: application/json.
urlsarray of stringsrequired1 to 1000 absolute public http or https URLs, all on the same host, each on the default port. See the rules below. More than 1000 returns 400 indexnow_too_many_urls; a missing, empty or malformed list returns 400 indexnow_invalid_url.
Rules for urls:
- Every URL must be a valid public
http(s)URL. Private or reserved addresses, URLs with credentials (user:pass@), URLs with a#fragment, and URLs with leading or trailing whitespace are rejected withindexnow_invalid_url. - Every URL must use the default port.
https://example.com:8443/ais rejected because IndexNow keys are verified on the default port. - Every URL must have the same hostname.
https://example.com/aandhttps://www.example.com/bin one call fail withindexnow_host_mismatch. Make one call per host. - The host must be one of your websites or a subdomain of one (
blog.example.comfor a websiteexample.com), elseindexnow_host_not_a_website. - URLs are normalized (for example the host is lowercased) before they are sent.
- Submit URLs that are new, changed or deleted. IndexNow is a change signal, not a way to re-submit unchanged pages.
Response
dataobjectThe submission.
Show propertiesHide properties
hoststringThe host that was submitted.
url_countintegerNumber of URLs sent.
key_locationstringWhere the key file was verified.
statusstringaccepted when IndexNow answered HTTP 200 or 202.
credits_usedinteger1.
credits_remainingintegerYour balance after the call.
accepted means IndexNow accepted the notification. It does not mean any engine has crawled or indexed the pages yet.
Behavior and limits
- Cost: 1 credit per call, whatever the number of URLs. The credit is charged first and refunded automatically when the call fails, including validation errors and upstream failures. See Credits.
- Order of checks: body and URL validation, then website ownership, then key lookup, then key file verification (cached for 24 hours, see Key file verification), then the upstream submission (30 second timeout).
- Indexing page: submitted URLs that are tracked on the website's Indexing page get their IndexNow submission time recorded, shown as
indexnow.submitted_atin Indexing status. - Rate limit: the shared 60 requests per minute per key. IndexNow applies its own limits and can answer with
indexnow_rate_limited; send changes in batches instead of one URL per call.
Approval inbox for agents
If your workspace uses the approval inbox, a call made by an AI agent does not submit right away. A call is agent-origin when it uses an API key and carries the header X-RankParse-Client: mcp, which the RankParse API-key MCP server sends for submit_indexnow_urls. Calls from your own code without that header, and RapidAPI calls, are never held for approval.
For an agent-origin call in such a workspace, the submission goes through the same checks as a proposal before anything is charged:
| Situation | Response |
|---|---|
| The website's policy is to ask (the default) | 202 with data.status awaiting_approval, plus data.host, data.url_count, data.proposal_id, data.review_url and a top-level message. credits_used is 0. Nothing is submitted until you approve it in RankParse. The same URLs proposed again return the same proposal. |
| The website's policy is automatic and the daily URL limit (200 by default) has room | The submission runs now and returns the normal 200 accepted response with data.proposal_id added. The 1 credit is charged once. |
| The website's policy is automatic but the daily URL limit is used up | 202 awaiting_approval, and the message says the automatic limit is used up. |
| The automatic run is left to the hourly retry, or the same proposal was already approved | 202 with data.status approved and a message. Do not propose it again. |
| The automatic run failed | The status and code it would have had as a direct call (see Errors), with proposal_id added to the body. The credit is refunded. |
| The proposal is refused | The proposal error, for example 400 indexnow_key_not_found (checked before a proposal is created), 403 action_disabled_by_policy (the website's policy is off), 429 too_many_pending_proposals (25 waiting for the website) or 429 daily_proposal_limit_reached (100 new proposals today). |
credits_remaining in these responses is null only if the balance could not be read. Show the review_url to the person who must approve, and track the outcome with proposals. An agent that should always go through the inbox can call propose_indexnow_submit instead.
Errors
| HTTP | Code | When |
|---|---|---|
| 400 | indexnow_invalid_url | Body is not JSON, urls is missing or empty, an entry is not a string or not a valid public http(s) URL, or a URL has an explicit port. |
| 400 | indexnow_too_many_urls | More than 1000 URLs in one call. |
| 400 | indexnow_host_mismatch | The URLs do not all share one host. |
| 400 | indexnow_host_not_a_website | The host is not one of your websites or a subdomain of one. Add it under Dashboard, Sites. |
| 400 | indexnow_key_not_found | No key exists for this host. Create one first. |
| 400 | indexnow_key_not_verified | The key file at key_location is missing, not HTTP 200, or does not contain exactly the key. |
| 400 | indexnow_invalid_request | IndexNow rejected the submission as malformed. |
| 401 | invalid_api_key | Missing, invalid or revoked API key. |
| 402 | insufficient_credits | Not enough credits. Nothing was charged. |
| 402 | spend_cap_reached | Your monthly spend cap is reached. Nothing was charged. |
| 403 | capability_missing | Your workspace role cannot spend credits. |
| 403 | indexnow_key_rejected | IndexNow rejected the key. Confirm the key file is still hosted, then retry. |
| 422 | indexnow_url_mismatch | IndexNow rejected the URLs: they do not belong to the host, or the key does not match. |
| 429 | rate_limited | More than 60 requests in a minute. |
| 429 | indexnow_rate_limited | IndexNow's rate limit was reached. Slow down and retry later. |
| 503 | indexnow_unavailable | IndexNow is unreachable or returned an unexpected status. Retry later. |
Every failed call is refunded. See Errors for the error body format.
Related
MCP tools: submit_indexnow_urls (accepts urls; API-key MCP server) and propose_indexnow_submit (accepts urls, optional site_id and note; also on the secure OAuth connector).