API
IndexChex API v1
Published · By IndexChex
In brief
IndexChex API v1 is a JSON REST API at https://indexchex.com/api/v1 with six endpoints: create and read index-check jobs, fetch a check report, create and read index-submission jobs, and read the credit balance. Requests authenticate with a per-user API key sent in the Authorization header and are limited to 120 requests a minute.
Scope
Version 1 is the original programmatic interface to IndexChex. It exposes the two core jobs of the product, checking whether URLs are in Google's index and submitting URLs for Googlebot crawling, plus a balance lookup so a client can confirm it has enough credits before queuing work. It does not expose the backlink monitor or drip-feed scheduling, which remain dashboard features.
Integrations that already target SpeedyIndex's request format should use the SpeedyIndex-compatible v2 instead. Both versions draw from the same credit balance and return the same underlying jobs, so a team can mix them.
Base URL and authentication
All routes sit under https://indexchex.com/api/v1. The application mounts its API routes under the /api prefix and this version under /v1.
Authentication uses a per-user API key. The client sends the key as the full value of the Authorization header:
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: application/json
The server trims the header value, hashes it and looks up the matching key. A missing or unknown key is rejected before any job is created. Keys belong to a single user, and every job lookup is scoped to that user: requesting another account's job ID returns 404 with {"message": "Resource not found."}.
Endpoints
| Method | Path | Purpose | Key parameters |
|---|---|---|---|
| POST | /index-check/jobs | Create an index-check job | urls (array, 1 to 10,000), name (optional, max 255 chars) |
| GET | /index-check/jobs/{run} | Status and counts for a check job | run (numeric job ID) |
| GET | /index-check/jobs/{run}/report | Per-URL results of a finished check | run (numeric job ID) |
| POST | /index-submit/jobs | Create an index-submission job | urls (array), name, instantIndex (boolean), checker (integer 0 to 5) |
| GET | /index-submit/jobs/{run} | Status, counts and scheduled re-check details | run (numeric job ID) |
| GET | /balance | Current credit balance | none |
Creating an index-check job
The body is a JSON object with a urls array. Each entry is trimmed of whitespace and must be a non-empty string. Arrays longer than 10,000 entries fail validation with the message "Too many URLs. Maximum allowed: 10000". Each URL costs 1 credit, matching the index checker in the web app.
POST /api/v1/index-check/jobs
{ "name": "October guest posts", "urls": ["https://example.com/post-1", "https://example.org/review"] }
The response returns job_id, status (initially pending), total_urls, checked_urls, indexed_count, not_indexed_count, name and queued_at as an ISO 8601 timestamp.
Reading check status and the report
GET /index-check/jobs/{run} adds failed_count, progress_percent and completed_at. Poll it until the job finishes. The report endpoint then lists every URL in one of three arrays: indexed_links, unindexed_links and failed_links. If the job is still running, the report endpoint answers with "Report not ready. Check status and retry later." rather than a partial list. A URL in failed_links is one the checker could not resolve; it is not evidence of non-indexation.
Creating a submission job
The submission body takes the same urls and name fields plus two options:
instantIndex:trueselects instant mode (60 credits per URL, at most 1,000 URLs). Omitted orfalseselects standard mode (1 credit per URL, at most 10,000 URLs). The snake-case aliasinstant_indexand the strings"true","false","1"and"0"are also accepted.checker: an integer from 0 to 5. A value of 1 to 5 schedules an automatic index check that many days after submission; 0 or omission schedules none. See scheduled index checks for how those credits are reserved.
The response carries job_id, status, total_urls, submitted_urls, successful_count, failed_count, name, queued_at, and three scheduled-check fields: scheduled_check_days, scheduled_check_status and scheduled_check_at.
Reading submission status
GET /index-submit/jobs/{run} returns the counts above plus progress_percent, success_percent, completed_at and scheduled_check_run_id. Once a scheduled re-check has started, that ID can be passed to the check endpoints to read which submitted URLs were found in Google. "Successful" here means the URL was delivered for crawling; indexation is only known after a check.
Balance
GET /balance returns {"balance": 12345}, the account's current credits, never below zero.
Errors and limits
| Situation | HTTP status | Body |
|---|---|---|
| Validation failure (empty list, too many URLs, bad types) | 422 | Laravel validation errors keyed by field |
| Business rule rejected (for example insufficient credits) | 422 | {"message": "..."} |
| Job not found or owned by another user | 404 | {"message": "Resource not found."} |
| Rate limit exceeded | 429 | {"message": "Too many requests. Please wait and retry."} |
The rate limit is 120 requests per minute, counted per authenticated user. A client polling many jobs should back off between status calls instead of looping on them; status polling every 30 to 60 seconds is ample for jobs that take minutes to hours.
Behaviour worth knowing
Submission through the API is the same process the dashboard uses, so the published performance figures apply equally. Those figures, and how they are produced, are on the measurement methodology page; the full limits table is in the IndexChex specifications. As with every submission route, IndexChex guarantees that Googlebot crawls the URLs, not that Google indexes them, and it does not use Google's Indexing API, which Google limits to job-posting and livestream pages.
A typical automated loop looks like this:
GET /balanceto confirm credits.POST /index-submit/jobswithcheckerset to 3, so a re-check runs three days later.- Poll
GET /index-submit/jobs/{run}untilscheduled_check_run_idappears and that check completes. GET /index-check/jobs/{id}/reportand resubmit theunindexed_links.
Changes to the API are dated in the IndexChex changelog.
FAQ
How do I authenticate to IndexChex API v1?
Send your IndexChex API key as the value of the Authorization header on every request. The key is created per user in the account settings and the server matches it against a stored hash.
Is there a rate limit?
Yes. Each user may make 120 requests per minute to v1. Requests above that receive HTTP 429 with a short JSON message asking the client to wait and retry.
Can API v1 drip-feed a submission?
No. The v1 submission endpoint accepts standard and instant jobs and an optional scheduled re-check. Drip feed is configured in the web dashboard.
Is API v1 related to Google's Indexing API?
No. It is IndexChex's own interface. IndexChex does not route submitted URLs through Google's Indexing API.
Terms used on this page
Sources
Cite this entry
IndexChex. (2026, October 8). IndexChex API v1. backlinkindexersoftware.com. https://backlinkindexersoftware.com/api-v1/
Entity: IndexChex (https://indexchex.com/) is the publisher of this site. IndexChex is a backlink indexer and bulk Google index checker that submits URLs for Googlebot crawling and verifies indexation in one credit system.