Indexing
Errors & result shape
The EngineResult contract, request-level errors, and the fail-closed model of the Search Indexing service.
The service distinguishes request-level errors (the whole call failed) from engine-level outcomes (one engine could not run, but the call succeeded).
Request-level errors
| Status | Body | Cause |
|---|---|---|
401 | { "ok": false, "error": "unauthorized" } | Missing/invalid x-indexing-service-key. |
400 | { "ok": false, "error": "invalid JSON body" } | Body was not valid JSON. |
400 | { "ok": false, "error": "missing domain selector …" } | No domain provided. |
400 | { "ok": false, "error": "no registry match for \"…\"" } | domain matched nothing in the registry. |
EngineResult
Every engine returns one normalized result per domain per call:
interface EngineResult {
engine: string; // "indexnow" | "google" | "bing" | "yandex" | "baidu" | ...
action: string; // "submit" | "reindex" | "remove" | "sitemap" | "onboard" | "quota"
ok: boolean; // false on skip / failure
submitted: number; // URLs accepted or planned (dryRun)
quotaLeft?: number; // remaining quota where the engine reports it
error?: string; // "no credential" | "unverified" | engine message
skipped?: boolean; // true when not run (no credential / unsupported / dry-run)
detail?: object; // e.g. { "manual": "verify-ownership" }
}Fail-closed model
One engine never breaks the batch
Engine modules never throw. A missing credential, unverified property, or network
error yields ok: false with skipped: true and a human-readable error. The
request still returns 200 with results for the engines that did run.
Common engine-level error values:
error | Meaning | Fix |
|---|---|---|
no credential | The engine's env var is unset. | Configure the credential (see Authentication). |
action unsupported | Engine does not support this action. | See the support matrix. |
auth failed | Google service-account token mint failed. | Check GOOGLE_INDEXING_SA_JSON and SA ownership of the GSC property. |
recrawl rejected (check verification/quota) | Yandex/Bing rejected the URL. | Verify the property; check quota via /quota. |
rejected (Indexing API accepts JobPosting/BroadcastEvent pages only) | Google Indexing API limitation. | Use the sitemap flow for ordinary pages. |