IndexPro API Documentation

Submit URLs for standard or instant indexing straight from your own code. One API key, one header, four endpoints.

Start in three steps

You can send your first request in a couple of minutes.

1

Copy your API key

Sign in, open your account page and copy the key from the API Key section. You can regenerate it there at any time.

2

Ask us for the base URL

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.

3

Send your first batch

Pick an endpoint below, paste in your key and base URL, and post your URLs. Credits are charged only when the batch is accepted.

About the base URL

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 URL

Which API should I use?

Both endpoints take the same request body. They differ in how fast the URLs are pushed and what they cost.

Standard Indexing

The everyday option. Good for regular publishing, large batches and routine coverage of a whole site.

  • Usually picked up within a few days
  • Best for bulk submissions and ongoing content
  • Available on every account with credits
20 credits per URL

Instant Indexing

The fast lane. Use it for pages that need attention now, such as a launch, a fix or a time sensitive post.

  • Often picked up within minutes
  • Best for launches, urgent fixes and priority pages
  • Requires a paid plan, free accounts get a 403
70 credits per URL

Authentication

Every request carries your API key in a header. There are no other credentials to manage.

X-API-Key: YOUR_API_KEY
  • Send the key in the X-API-Key header on every request.
  • Authorization: Bearer YOUR_API_KEY works too, if that suits your HTTP client better.
  • Keep the key server side. Never put it in a query string, a browser app or a public repository, because anything holding it can spend your credits.
  • If a key is ever exposed, regenerate it from your account page. The old key stops working immediately.

Endpoint reference

Add each path to the base URL we send you. Every endpoint returns JSON.

MethodPathWhat it does
POST/api/v1/indexing/submitSubmit URLs to the standard indexing queue
POST/api/v1/indexing/statusCheck whether URLs currently appear in Google
POST/api/v1/instant-indexing/submitSubmit URLs to the instant indexing queue
POST/api/v1/instant-indexing/statusLook up the live status of your instant submissions
GET/api/v1/instant-indexing/batchesList your instant indexing batches, newest first
GET/api/v1/account/creditsRead your credit balance, per URL pricing and limits

Submitting URLs

Pick a product to see its path and a ready to run example in your language.

POST /api/v1/indexing/submit

Request body

FieldTypeRequiredDescription
namestringYesA label for the batch so you can recognise it later. Up to 120 characters.
urlsstring[]YesAbsolute http:// or https:// URLs, up to 500 per request. Duplicates are removed before you are charged.
dripfeednumberNoNumber 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"
    ]
  }'

Checking status

Both products expose a status endpoint. They answer different questions, so read the note under each one.

POST /api/v1/indexing/status

Asks 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.

Responses

Every response has the same shape: a success flag, a message and a data object.

Submit response

{
  "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"
  }
}

Status response

{
  "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
  }
}

Error response

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
}

Limits and behaviour

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

  • Duplicate URLs inside one request are collapsed into one, so the same link is never charged for twice.
  • URLs that break our content policy are dropped and listed under blockedUrls. You are not charged for them.
  • Credits are reserved when the request arrives and returned in full if the submission cannot be delivered.
  • On a 429 or a 502, wait a moment and retry. Exponential backoff, starting around one second, is plenty.

Error codes

What each status code means and what to do about it.

StatusWhat it meansWhat to do
400The request body is missing a field or a value is out of rangeRead the message, it names the field. Check name is present and urls is a non-empty array.
401The API key is missing, malformed or not recognisedConfirm the X-API-Key header is set and matches the key on your account page.
402Not enough credits for this requestThe response tells you how many were needed and how many you have. Top up, or send fewer URLs.
403The account cannot use this endpointInstant indexing needs a paid plan. If the account is inactive, contact support.
404Nothing on your account matched the requestCheck the tracking IDs or URLs. Status lookups only cover submissions made with this account.
422Every URL was blocked by our content policySee blockedUrls in the response for the reason on each URL. No credits were charged.
429Too many requests in a short windowSlow down and retry after a minute. Batch your URLs into fewer, larger requests.
502The upstream indexing provider was unavailableRetry shortly. Nothing was charged, so it is safe to send the same batch again.

Ready to start building?

Message us for the API base URL, or tell us what you are building and we will help you wire it up.