Submit URLs for standard or instant indexing straight from your own code. One API key, one header, four endpoints.
You can send your first request in a couple of minutes.
Sign in, open your account page and copy the key from the API Key section. You can regenerate it there at any time.
We share the API base URL privately with people who are actually going to build on it, so it is not published on this page. Message us and we will send it over.
Pick an endpoint below, paste in your key and base URL, and post your URLs. Credits are charged only when the batch is accepted.
We do not publish the API base URL here. Contact us and we will share it with you directly, so it stays with people who genuinely need it.
Every example on this page writes it as BASE_URL. Replace that placeholder with the address we send you, and keep the rest of the path exactly as shown.
Contact us for the base URLBoth endpoints take the same request body. They differ in how fast the URLs are pushed and what they cost.
The everyday option. Good for regular publishing, large batches and routine coverage of a whole site.
The fast lane. Use it for pages that need attention now, such as a launch, a fix or a time sensitive post.
Every request carries your API key in a header. There are no other credentials to manage.
X-API-Key: YOUR_API_KEYAdd each path to the base URL we send you. Every endpoint returns JSON.
| Method | Path | What it does |
|---|---|---|
| POST | /api/v1/indexing/submit | Submit URLs to the standard indexing queue |
| POST | /api/v1/indexing/status | Check whether URLs currently appear in Google |
| POST | /api/v1/instant-indexing/submit | Submit URLs to the instant indexing queue |
| POST | /api/v1/instant-indexing/status | Look up the live status of your instant submissions |
| GET | /api/v1/instant-indexing/batches | List your instant indexing batches, newest first |
| GET | /api/v1/account/credits | Read your credit balance, per URL pricing and limits |
Pick a product to see its path and a ready to run example in your language.
POST /api/v1/indexing/submit| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | A label for the batch so you can recognise it later. Up to 120 characters. |
| urls | string[] | Yes | Absolute http:// or https:// URLs, up to 500 per request. Duplicates are removed before you are charged. |
| dripfeed | number | No | Number of days to spread the submission over. Leave it out to submit everything at once. |
curl -X POST "BASE_URL/api/v1/indexing/submit" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"name": "My first batch",
"urls": [
"https://example.com/page-1",
"https://example.com/page-2"
]
}'Both products expose a status endpoint. They answer different questions, so read the note under each one.
POST /api/v1/indexing/statusAsks Google whether each URL is currently in the index. Use it to confirm the outcome of a batch you submitted earlier.
curl -X POST "BASE_URL/api/v1/indexing/status" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{ "urls": ["https://example.com/page-1"] }'Costs 5 credits per URL, and accepts up to 100 URLs per request.
Every response has the same shape: a success flag, a message and a data object.
{
"success": true,
"message": "URLs submitted for indexing.",
"data": {
"batchId": "68c7dad9265f988545ebc774",
"batchName": "My first batch",
"urlsSubmitted": 2,
"submissionStatus": "Submitted",
"creditsCharged": 40,
"remainingCredits": 824,
"createdAt": "2026-09-15T09:22:33.229Z"
}
}{
"success": true,
"message": "Checked 2 URLs.",
"data": {
"results": [
{ "url": "https://example.com/page-1", "indexed": true, "checked": true },
{ "url": "https://example.com/page-2", "indexed": false, "checked": true }
],
"urlsChecked": 2,
"creditsCharged": 10,
"remainingCredits": 814
}
}Errors always set success to false and explain what to change. The HTTP status code tells you the category.
{
"success": false,
"message": "Insufficient credits. This request needs 40 credits but the account has 10.",
"creditsRequired": 40,
"creditsAvailable": 10
}Worth knowing before you build a loop around these endpoints.
30 / min
Submissions per API key
120 / min
Status and account reads per API key
500
URLs per submission
100
URLs per status check
What each status code means and what to do about it.
| Status | What it means | What to do |
|---|---|---|
| 400 | The request body is missing a field or a value is out of range | Read the message, it names the field. Check name is present and urls is a non-empty array. |
| 401 | The API key is missing, malformed or not recognised | Confirm the X-API-Key header is set and matches the key on your account page. |
| 402 | Not enough credits for this request | The response tells you how many were needed and how many you have. Top up, or send fewer URLs. |
| 403 | The account cannot use this endpoint | Instant indexing needs a paid plan. If the account is inactive, contact support. |
| 404 | Nothing on your account matched the request | Check the tracking IDs or URLs. Status lookups only cover submissions made with this account. |
| 422 | Every URL was blocked by our content policy | See blockedUrls in the response for the reason on each URL. No credits were charged. |
| 429 | Too many requests in a short window | Slow down and retry after a minute. Batch your URLs into fewer, larger requests. |
| 502 | The upstream indexing provider was unavailable | Retry shortly. Nothing was charged, so it is safe to send the same batch again. |
Message us for the API base URL, or tell us what you are building and we will help you wire it up.