Authentication

All requests authenticate with your secret API key sent as a Bearer token in the Authorization header. You can find and regenerate your key in Settings → API.

Authorization: Bearer ii_live_xxxxxxxxxxxxxxxxxxxxxxxx

Never expose your secret key in client-side code. Treat it like a password.

Base URL

All endpoints are relative to your site’s REST base:

BASE https://www.expressindexing.com/wp-json/indexinstantly/v1

Rate limits

The rate limit is the same on every plan — plans differ in how many credits you hold, not how fast you may spend them.

LimitValueApplies to
Requests per minute60Each API key, on a rolling one-minute window.
URLs per request200More than this is rejected with 422.
Credits per URL1Counted on submission, not on the indexing result.

Go over the per-minute limit and the response is 429 with a Retry-After header giving the seconds to wait. Honour it instead of retrying straight away — retries inside the window keep failing.

A per-account daily submission cap can also be switched on. It is off by default; where it is on, submissions past it return 429 with a message saying so, and the window resets at midnight in the timezone configured for that cap.

Submit URLs

Queue a batch of URLs for indexing. Returns a batch ID you can poll for status.

POST https://www.expressindexing.com/wp-json/indexinstantly/v1/index

Request body

FieldTypeDescription
urlsstring[]Array of absolute URLs. Max 200 per request.

Example

curl -X POST https://www.expressindexing.com/wp-json/indexinstantly/v1/index \
  -H "Authorization: Bearer ii_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "urls": ["https://example.com/a", "https://example.com/b"] }'

Response

{
  "batch_id": "btch_8K2qA7d3",
  "accepted": 2,
  "blocked": 0,
  "duplicates": 0,
  "duplicate_urls": [],
  "status": "queued",
  "remaining_credits": 9798
}

A URL this account or this site has already submitted is not sent again and is not charged. It is counted in duplicates, listed in duplicate_urls, and recorded in your history with status duplicate — drop those from your own retry list rather than resending them.

Batch status

Retrieve the current processing status of a previously submitted batch.

GET https://www.expressindexing.com/wp-json/indexinstantly/v1/batch/{batch_id}
StatusMeaning
queuedAccepted and waiting in the indexing queue.
processingSubmitted to Google; awaiting its crawl.
indexedSuccessfully submitted for indexing.
failedCould not be submitted (see error detail).
duplicateAlready submitted earlier; not sent again and not charged.
blockedRefused by a content rule; not sent and not charged.

Account & credits

Check your remaining credit balance and current plan.

GET https://www.expressindexing.com/wp-json/indexinstantly/v1/account

Errors

The API uses conventional HTTP status codes. Errors return a JSON body with a code and message.

CodeMeaning
401Missing or invalid API key.
402Insufficient credits.
422Too many URLs (limit 200) or invalid payload.
429Rate limit exceeded, or a daily cap reached. The response carries a Retry-After header with the seconds to wait.

Code samples

JavaScript (fetch)

const res = await fetch("https://www.expressindexing.com/wp-json/indexinstantly/v1/index", {
  method: "POST",
  headers: {
    "Authorization": "Bearer ii_live_xxxxxxxxxxxxxxxxxxxxxxxx",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({ urls: ["https://example.com/page"] })
});
const data = await res.json();

Python (requests)

import requests
r = requests.post(
  "https://www.expressindexing.com/wp-json/indexinstantly/v1/index",
  headers={"Authorization": "Bearer ii_live_xxxxxxxxxxxxxxxxxxxxxxxx"},
  json={"urls": ["https://example.com/page"]},
)
print(r.json())

Get your API key →

Telegram
WhatsApp