Skip to content

API

Create checks and read verdicts from your own system. Same credits, same verdicts, same endpoints the app uses — there is no separate API to fall out of step.

Base URL https://api.indexaction.com/api/v1

Authentication

Create a key in your account under API, then send it as a bearer-style header. The key is shown once at creation — only a hash is stored, so it cannot be recovered afterwards. Rate limits apply per key, so one integration can never starve another.

Authorization: Api-Key ia_live_xxxxxxxxxxxxxxxx

Create a check

Duplicates and invalid lines are removed before anything is charged, and the response tells you what was dropped. Send an Idempotency-Key and a retried request resolves to the same check instead of charging twice.

curl https://api.indexaction.com/api/v1/checks/ \
  -H "Authorization: Api-Key YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "urls": [
      "https://example.com/page-1",
      "https://example.com/page-2"
    ],
    "name": "June batch"
  }'

Returns 201 with the check, initially queued:

{
  "id": "55c79216-28fd-4c54-b813-14bb210d6fae",
  "status": "queued",
  "total_count": 2,
  "processed_count": 0,
  "credits_used": "2.00",
  "input_report": { "submitted": 2, "accepted": 2, "duplicates": 0, "invalid": 0 },
  "results": []
}

Read the results

Poll until status is succeeded, failed or canceled. Partial results are available while it runs, so you can stream progress. A second or two between polls is plenty.

{
  "status": "succeeded",
  "total_count": 2,
  "indexed_count": 1,
  "not_indexed_count": 1,
  "error_count": 0,
  "indexed_pct": 50.0,
  "credits_used": "2.00",
  "credits_refunded": "0.00",
  "results": [
    { "url": "https://example.com/page-1", "status": "indexed",
      "note": "Found in Google",
      "matches": [{ "link": "https://example.com/page-1", "title": "Page 1" }] },
    { "url": "https://example.com/page-2", "status": "not_indexed",
      "note": "Google returned no result", "matches": [] }
  ]
}

Verdicts

Three values, and the third one matters. Most tools collapse a failed check into “not indexed”, which sends you chasing a problem that may not exist.

indexed

Google returned the page — at the exact URL, or the same page under its canonical URL.

not_indexed

Google returned no result in any query form we try. Established by an individual query, not inferred.

error

We could not determine it — a timeout or an upstream failure. Treat as unknown, never as missing. This credit is refunded.

indexed_pct excludes errors from its denominator: a run where half the checks failed should not report a halved index rate.

Endpoints

Method Path Purpose
POST /checks/ Create a check. Up to 1,000 URLs.
GET /checks/{id}/ Status, counts, and per-URL verdicts.
GET /checks/ Paginated history. Filter by status, project, date.
POST /checks/{id}/cancel/ Stop a running check; unchecked URLs are refunded.
POST /checks/{id}/rerun/ Re-run the same URL list.
GET /checks/{id}/diff/ Newly indexed and dropped-out URLs vs the previous check.
GET /checks/{id}/export/ Download CSV or XLSX. ?format=csv|xlsx&verdict=…
GET /projects/ Saved URL lists. Full CRUD.
GET /dashboard/ Balance and aggregate totals.

Errors

Every error carries a stable machine-readable code, so you never have to match on human-readable text.

{ "code": "insufficient_credits",
  "detail": "You do not have enough credits for this check.",
  "required": "1000.00", "balance": "240.00", "shortfall": "760.00" }

An OpenAPI schema is served at https://api.indexaction.com/api/schema/, with a browsable reference at /api/docs/.

Get an API key
indexaction on Facebook Email [email protected]