{
  "openapi": "3.1.0",
  "info": {
    "title": "IndexMachine API",
    "version": "1.0.0",
    "summary": "Check your own sites' pages on Google and request indexing, plus IndexNow.",
    "description": "Read the sites you connected to IndexMachine and their pages, check a URL against Google, queue a Request indexing click and notify IndexNow engines.\n\nSend your key as `Authorization: Bearer <key>`. A key is `im_live_`, 8 letters or digits, an underscore and 43 more. Create, roll and revoke keys on the Settings page of the dashboard (https://app.indexmachine.co/settings), which shows a new key once.\n\nA Request indexing click is not instant: it is queued, and the user's IndexMachine Chrome extension performs it in their own Google Search Console. Chrome must be running with the extension, signed in to Google. Google takes about 10 requests per site per Pacific day. `eta` is when the click is expected; Google alone decides whether and when it indexes the page.\n\nErrors share one shape: `{\"error\": {\"code\", \"message\"}}`. Branch on `code`; `message` is for people."
  },
  "servers": [
    {
      "url": "https://api.indexmachine.co/v1",
      "description": "Production."
    }
  ],
  "security": [
    {
      "apiKey": []
    }
  ],
  "tags": [
    {
      "name": "Account",
      "description": "The user, the extension and the key behind a request."
    },
    {
      "name": "Sites",
      "description": "Search Console properties connected to IndexMachine, and their pages."
    },
    {
      "name": "Indexing",
      "description": "URL checks and Request indexing clicks."
    },
    {
      "name": "IndexNow",
      "description": "Notifying Bing and the other IndexNow engines."
    },
    {
      "name": "Meta",
      "description": "This document."
    }
  ],
  "paths": {
    "/me": {
      "get": {
        "operationId": "getMe",
        "summary": "The account behind the key",
        "description": "The user's plan, the Chrome extension's last check-in, the key's permissions and the hourly request budget.",
        "tags": [
          "Account"
        ],
        "responses": {
          "200": {
            "description": "The key works.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Me"
                },
                "example": {
                  "user": {
                    "email": "owner@example.com",
                    "plan": "subscription",
                    "trial_ends_at": null
                  },
                  "extension": {
                    "last_seen_at": "2026-10-31T13:58:40Z",
                    "version": "1.2.0",
                    "online": true,
                    "supports_force": true
                  },
                  "api_key": {
                    "key_id": "Ab3dE5gH",
                    "label": "Claude Code",
                    "permissions": "full"
                  },
                  "rate_limit": {
                    "limit": 1000,
                    "remaining": 987,
                    "resets_at": "2026-10-31T15:00:00Z"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/activity": {
      "get": {
        "operationId": "getActivity",
        "summary": "What the extension did today",
        "description": "Today's Request indexing outcomes, per site and in total, where Google's daily quota is used up, the open requests per site and the last 20 events. `today` counts from midnight in `tz`; the quota day is the Pacific day.",
        "tags": [
          "Account"
        ],
        "parameters": [
          {
            "name": "tz",
            "in": "query",
            "required": false,
            "description": "IANA time zone for `today`, such as Europe/Berlin. Unknown or empty means UTC.",
            "schema": {
              "type": "string",
              "maxLength": 64
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Today's activity.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Activity"
                },
                "example": {
                  "timezone": "UTC",
                  "generated_at": "2026-10-31T14:00:00Z",
                  "today": {
                    "date": "2026-10-31",
                    "requested": 7,
                    "already_indexed": 2,
                    "rejected": 1,
                    "failed": 0,
                    "quota_exceeded": 0
                  },
                  "quota": {
                    "reached_site_ids": [
                      "0e6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c"
                    ],
                    "all_sites_reached": false,
                    "resets_at": "2026-11-01T07:00:00Z",
                    "approx_daily_limit_per_site": 10
                  },
                  "sites": [
                    {
                      "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                      "name": "example.com",
                      "site_url": "sc-domain:example.com",
                      "today": {
                        "requested": 4,
                        "already_indexed": 1,
                        "rejected": 0,
                        "failed": 0
                      },
                      "remaining": 38,
                      "waiting_retry": 3,
                      "needs_fix": 6,
                      "quota_reached": false,
                      "quota_used": 4,
                      "open_requests": 1
                    },
                    {
                      "id": "0e6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c",
                      "name": "shop.example.org",
                      "site_url": "https://shop.example.org/",
                      "today": {
                        "requested": 3,
                        "already_indexed": 1,
                        "rejected": 1,
                        "failed": 0
                      },
                      "remaining": 120,
                      "waiting_retry": 0,
                      "needs_fix": 0,
                      "quota_reached": true,
                      "quota_used": 10,
                      "open_requests": 0
                    }
                  ],
                  "extension": {
                    "last_seen_at": "2026-10-31T13:58:40Z",
                    "version": "1.2.0",
                    "attention": null,
                    "attention_since": null
                  },
                  "recent": [
                    {
                      "at": "2026-10-31T13:41:09Z",
                      "url": "https://example.com/pricing",
                      "site_name": "example.com",
                      "status": "requested",
                      "reason_code": null
                    },
                    {
                      "at": "2026-10-31T13:40:51Z",
                      "url": "https://shop.example.org/cart",
                      "site_name": "shop.example.org",
                      "status": "rejected",
                      "reason_code": "quota_exceeded"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/sites": {
      "get": {
        "operationId": "listSites",
        "summary": "List sites",
        "description": "Every Search Console property the user connected, with page counts by status.",
        "tags": [
          "Sites"
        ],
        "responses": {
          "200": {
            "description": "The sites, by name.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SiteList"
                },
                "example": {
                  "sites": [
                    {
                      "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                      "property": "sc-domain:example.com",
                      "name": "example.com",
                      "verified": true,
                      "billable": true,
                      "google_indexing_active": true,
                      "indexnow_ready": true,
                      "import_status": "completed",
                      "last_synced_at": "2026-10-31T06:00:00Z",
                      "counts": {
                        "total": 412,
                        "indexed": 351,
                        "awaiting": 38,
                        "rejected": 9,
                        "needs_fix": 6,
                        "excluded": 8
                      }
                    },
                    {
                      "id": "0e6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c",
                      "property": "https://shop.example.org/",
                      "name": "shop.example.org",
                      "verified": true,
                      "billable": true,
                      "google_indexing_active": true,
                      "indexnow_ready": false,
                      "import_status": "completed",
                      "last_synced_at": "2026-10-31T05:30:00Z",
                      "counts": {
                        "total": 1280,
                        "indexed": 902,
                        "awaiting": 301,
                        "rejected": 41,
                        "needs_fix": 22,
                        "excluded": 14
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/sites/{site}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Site"
        }
      ],
      "get": {
        "operationId": "getSite",
        "summary": "One site in full",
        "description": "A site with today's Request indexing quota, the median days from a first request to indexing over its pages, and 30 days of page counts, oldest first.",
        "tags": [
          "Sites"
        ],
        "responses": {
          "200": {
            "description": "The site.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SiteDetail"
                },
                "example": {
                  "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                  "property": "sc-domain:example.com",
                  "name": "example.com",
                  "verified": true,
                  "billable": true,
                  "google_indexing_active": true,
                  "indexnow_ready": true,
                  "import_status": "completed",
                  "last_synced_at": "2026-10-31T06:00:00Z",
                  "counts": {
                    "total": 412,
                    "indexed": 351,
                    "awaiting": 38,
                    "rejected": 9,
                    "needs_fix": 6,
                    "excluded": 8
                  },
                  "quota": {
                    "used_today": 4,
                    "limit": 10,
                    "reached": false,
                    "resets_at": "2026-11-01T07:00:00Z"
                  },
                  "speed": {
                    "median_days": 3.5,
                    "sample": 64
                  },
                  "history": [
                    {
                      "date": "2026-10-30",
                      "indexed": 348,
                      "not_indexed": 41,
                      "rejected": 9,
                      "needs_fix": 6,
                      "excluded": 8
                    },
                    {
                      "date": "2026-10-31",
                      "indexed": 351,
                      "not_indexed": 38,
                      "rejected": 9,
                      "needs_fix": 6,
                      "excluded": 8
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/sites/{site}/pages": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Site"
        }
      ],
      "get": {
        "operationId": "listPages",
        "summary": "List a site's pages",
        "description": "A site's pages ordered by path, filtered by status or by part of the URL. `next_cursor` reads the next page of results; it is null on the last one.",
        "tags": [
          "Sites"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "`not_indexed` is every page that is neither indexed nor excluded.",
            "schema": {
              "$ref": "#/components/schemas/PageFilter"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Part of the URL.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "$ref": "#/components/parameters/PagesLimit"
          },
          {
            "$ref": "#/components/parameters/Cursor"
          }
        ],
        "responses": {
          "200": {
            "description": "One page of results.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageList"
                },
                "example": {
                  "pages": [
                    {
                      "id": "8f14e45f-ceea-467f-a0e6-2a1b3c4d5e6f",
                      "url": "https://example.com/blog/new-post",
                      "path": "/blog/new-post",
                      "indexed": false,
                      "status": "awaiting",
                      "coverage_state": "Discovered - currently not indexed",
                      "issue_code": null,
                      "last_crawl_at": null,
                      "last_requested_at": null,
                      "next_attempt_at": "2026-10-31T15:00:00Z",
                      "added_manually": false
                    },
                    {
                      "id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
                      "url": "https://example.com/pricing",
                      "path": "/pricing",
                      "indexed": false,
                      "status": "requested",
                      "coverage_state": "Crawled - currently not indexed",
                      "issue_code": null,
                      "last_crawl_at": "2026-10-22T03:10:00Z",
                      "last_requested_at": "2026-10-30T09:15:31Z",
                      "next_attempt_at": "2026-11-06T09:15:31Z",
                      "added_manually": false
                    }
                  ],
                  "next_cursor": "eyJwYXRoIjoiL3ByaWNpbmciLCJpZCI6IjFjMmQifQ"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/urls/status": {
      "get": {
        "operationId": "getUrlStatus",
        "summary": "Check a URL",
        "description": "What IndexMachine knows about a URL of one of the user's sites: the stored Search Console inspection, an open request, and with `live=true` a fresh URL Inspection from Google (50 per site a day). When Google refuses a live check, the stored state comes back with a warning.",
        "tags": [
          "Indexing"
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "An http or https URL, 2048 characters at most.",
            "schema": {
              "type": "string",
              "maxLength": 2048
            }
          },
          {
            "name": "live",
            "in": "query",
            "required": false,
            "description": "Ask Google now. Uses 1 of 50 live checks per site a day.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The URL.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UrlStatus"
                },
                "example": {
                  "url": "https://example.com/blog/new-post",
                  "site": {
                    "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                    "property": "sc-domain:example.com"
                  },
                  "known": true,
                  "page": {
                    "id": "8f14e45f-ceea-467f-a0e6-2a1b3c4d5e6f",
                    "url": "https://example.com/blog/new-post",
                    "path": "/blog/new-post",
                    "indexed": false,
                    "status": "awaiting",
                    "coverage_state": "Discovered - currently not indexed",
                    "issue_code": null,
                    "last_crawl_at": null,
                    "last_requested_at": null,
                    "next_attempt_at": "2026-10-31T15:00:00Z",
                    "added_manually": false,
                    "inspected_at": "2026-10-31T06:12:00Z",
                    "first_indexed_at": null,
                    "issue": null,
                    "in_sitemap": true
                  },
                  "open_request": {
                    "id": "c9a1e2b3-4d5f-4a6b-8c7d-9e0f1a2b3c4d",
                    "status": "queued",
                    "url": "https://example.com/blog/new-post",
                    "force": false,
                    "source": "api",
                    "site": {
                      "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                      "property": "sc-domain:example.com"
                    },
                    "page": {
                      "id": "8f14e45f-ceea-467f-a0e6-2a1b3c4d5e6f",
                      "created": false,
                      "indexed": false,
                      "in_sitemap": true
                    },
                    "position": 1,
                    "eta": "2026-10-31T14:05:00Z",
                    "eta_reason": "next_extension_check",
                    "attempts": 0,
                    "outcome_details": null,
                    "created_at": "2026-10-31T14:00:12Z",
                    "served_at": null,
                    "completed_at": null
                  },
                  "live": {
                    "checked_at": "2026-10-31T14:01:02Z",
                    "verdict": "NEUTRAL",
                    "coverage_state": "Discovered - currently not indexed",
                    "indexing_state": "INDEXING_ALLOWED",
                    "last_crawl_at": null,
                    "page_fetch_state": null,
                    "robots_txt_state": "ALLOWED"
                  },
                  "live_quota": {
                    "used_today": 3,
                    "limit": 50,
                    "resets_at": "2026-11-01T07:00:00Z"
                  },
                  "warnings": []
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/indexing_requests": {
      "post": {
        "operationId": "createIndexingRequest",
        "summary": "Request indexing",
        "description": "Queues a Request indexing click for a URL of one of the user's sites. The user's IndexMachine Chrome extension performs it in their Search Console; `eta` says when, and `eta_reason` why.\n\nA URL that is not a page of the site yet is added as one. An indexed page answers `already_indexed` and queues nothing unless `force` is true, which asks Google to recrawl it and uses one of the day's requests like any other. A page with an open request answers that request with `existing: true`.\n\n`preview: true` changes nothing and answers what the request would do in `would`, with the same errors a real request would get.",
        "tags": [
          "Indexing"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IndexingRequestCreate"
              },
              "example": {
                "url": "https://example.com/blog/new-post",
                "force": false,
                "preview": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Nothing new was queued: a preview, a page that is already indexed, or an open request for the same page.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IndexingRequestResult"
                },
                "examples": {
                  "preview": {
                    "summary": "What a request would do",
                    "value": {
                      "outcome": "preview",
                      "existing": false,
                      "request": null,
                      "url": "https://example.com/landing/fall-sale",
                      "site": {
                        "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                        "property": "sc-domain:example.com"
                      },
                      "page": null,
                      "would": {
                        "create_page": true,
                        "needs_force": false,
                        "uses_last_quota": false,
                        "position": 1,
                        "eta": "2026-10-31T14:05:00Z",
                        "eta_reason": "next_extension_check"
                      },
                      "quota": {
                        "site_used_today": 4,
                        "site_limit": 10,
                        "resets_at": "2026-11-01T07:00:00Z"
                      },
                      "warnings": [
                        {
                          "code": "not_in_sitemap",
                          "message": "This URL is not in the sitemap: it is added as a page of the site."
                        }
                      ],
                      "hint": null
                    }
                  },
                  "already_indexed": {
                    "summary": "The page is on Google already",
                    "value": {
                      "outcome": "already_indexed",
                      "existing": false,
                      "request": null,
                      "url": "https://example.com/about",
                      "site": {
                        "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                        "property": "sc-domain:example.com"
                      },
                      "page": {
                        "id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
                        "indexed": true,
                        "in_sitemap": true
                      },
                      "would": null,
                      "quota": {
                        "site_used_today": 4,
                        "site_limit": 10,
                        "resets_at": "2026-11-01T07:00:00Z"
                      },
                      "warnings": [],
                      "hint": "The page is indexed. Send force: true to ask Google to recrawl it; that uses one of the day's requests."
                    }
                  },
                  "existing": {
                    "summary": "An open request for the same page",
                    "value": {
                      "outcome": "existing",
                      "existing": true,
                      "request": {
                        "id": "c9a1e2b3-4d5f-4a6b-8c7d-9e0f1a2b3c4d",
                        "status": "queued",
                        "url": "https://example.com/blog/new-post",
                        "force": false,
                        "source": "api",
                        "site": {
                          "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                          "property": "sc-domain:example.com"
                        },
                        "page": {
                          "id": "8f14e45f-ceea-467f-a0e6-2a1b3c4d5e6f",
                          "created": false,
                          "indexed": false,
                          "in_sitemap": true
                        },
                        "position": 1,
                        "eta": "2026-10-31T14:05:00Z",
                        "eta_reason": "next_extension_check",
                        "attempts": 0,
                        "outcome_details": null,
                        "created_at": "2026-10-31T14:00:12Z",
                        "served_at": null,
                        "completed_at": null
                      },
                      "url": "https://example.com/blog/new-post",
                      "site": {
                        "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                        "property": "sc-domain:example.com"
                      },
                      "page": {
                        "id": "8f14e45f-ceea-467f-a0e6-2a1b3c4d5e6f",
                        "indexed": false,
                        "in_sitemap": true
                      },
                      "would": null,
                      "quota": {
                        "site_used_today": 4,
                        "site_limit": 10,
                        "resets_at": "2026-11-01T07:00:00Z"
                      },
                      "warnings": [],
                      "hint": null
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Queued.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IndexingRequestResult"
                },
                "example": {
                  "outcome": "created",
                  "existing": false,
                  "request": {
                    "id": "c9a1e2b3-4d5f-4a6b-8c7d-9e0f1a2b3c4d",
                    "status": "queued",
                    "url": "https://example.com/blog/new-post",
                    "force": false,
                    "source": "api",
                    "site": {
                      "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                      "property": "sc-domain:example.com"
                    },
                    "page": {
                      "id": "8f14e45f-ceea-467f-a0e6-2a1b3c4d5e6f",
                      "created": false,
                      "indexed": false,
                      "in_sitemap": true
                    },
                    "position": 1,
                    "eta": "2026-10-31T14:05:00Z",
                    "eta_reason": "next_extension_check",
                    "attempts": 0,
                    "outcome_details": null,
                    "created_at": "2026-10-31T14:00:12Z",
                    "served_at": null,
                    "completed_at": null
                  },
                  "url": "https://example.com/blog/new-post",
                  "site": {
                    "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                    "property": "sc-domain:example.com"
                  },
                  "page": {
                    "id": "8f14e45f-ceea-467f-a0e6-2a1b3c4d5e6f",
                    "indexed": false,
                    "in_sitemap": true
                  },
                  "would": null,
                  "quota": {
                    "site_used_today": 4,
                    "site_limit": 10,
                    "resets_at": "2026-11-01T07:00:00Z"
                  },
                  "warnings": [],
                  "hint": null
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/UpgradeRequired"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/GoogleIndexingOff"
          },
          "422": {
            "$ref": "#/components/responses/PageNotIndexable"
          },
          "429": {
            "$ref": "#/components/responses/RequestCap"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      },
      "get": {
        "operationId": "listIndexingRequests",
        "summary": "List indexing requests",
        "description": "Requests newest first, open or closed, for one site or all of them. Closed requests are kept 90 days.",
        "tags": [
          "Indexing"
        ],
        "parameters": [
          {
            "name": "site",
            "in": "query",
            "required": false,
            "description": "Only this site: its id or its domain.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "`open`: preparing, queued or served. `closed`: every other status.",
            "schema": {
              "type": "string",
              "enum": [
                "open",
                "closed"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/RequestsLimit"
          },
          {
            "$ref": "#/components/parameters/Cursor"
          }
        ],
        "responses": {
          "200": {
            "description": "One page of results.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IndexingRequestList"
                },
                "example": {
                  "requests": [
                    {
                      "id": "c9a1e2b3-4d5f-4a6b-8c7d-9e0f1a2b3c4d",
                      "status": "queued",
                      "url": "https://example.com/blog/new-post",
                      "force": false,
                      "source": "api",
                      "site": {
                        "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                        "property": "sc-domain:example.com"
                      },
                      "page": {
                        "id": "8f14e45f-ceea-467f-a0e6-2a1b3c4d5e6f",
                        "created": false,
                        "indexed": false,
                        "in_sitemap": true
                      },
                      "position": 1,
                      "eta": "2026-10-31T14:05:00Z",
                      "eta_reason": "next_extension_check",
                      "attempts": 0,
                      "outcome_details": null,
                      "created_at": "2026-10-31T14:00:12Z",
                      "served_at": null,
                      "completed_at": null
                    },
                    {
                      "id": "d0b2f3c4-5e6a-4b7c-9d8e-0f1a2b3c4d5e",
                      "status": "requested",
                      "url": "https://example.com/pricing",
                      "force": false,
                      "source": "api",
                      "site": {
                        "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                        "property": "sc-domain:example.com"
                      },
                      "page": {
                        "id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
                        "created": false,
                        "indexed": false,
                        "in_sitemap": true
                      },
                      "position": null,
                      "eta": null,
                      "eta_reason": null,
                      "attempts": 1,
                      "outcome_details": null,
                      "created_at": "2026-10-30T09:12:40Z",
                      "served_at": "2026-10-30T09:15:02Z",
                      "completed_at": "2026-10-30T09:15:31Z"
                    }
                  ],
                  "next_cursor": null
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/indexing_requests/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/IndexingRequestId"
        }
      ],
      "get": {
        "operationId": "getIndexingRequest",
        "summary": "One indexing request",
        "description": "A request with its status, position, ETA and, once closed, what Search Console answered.",
        "tags": [
          "Indexing"
        ],
        "responses": {
          "200": {
            "description": "The request.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IndexingRequestEnvelope"
                },
                "example": {
                  "request": {
                    "id": "c9a1e2b3-4d5f-4a6b-8c7d-9e0f1a2b3c4d",
                    "status": "queued",
                    "url": "https://example.com/blog/new-post",
                    "force": false,
                    "source": "api",
                    "site": {
                      "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                      "property": "sc-domain:example.com"
                    },
                    "page": {
                      "id": "8f14e45f-ceea-467f-a0e6-2a1b3c4d5e6f",
                      "created": false,
                      "indexed": false,
                      "in_sitemap": true
                    },
                    "position": 1,
                    "eta": "2026-10-31T14:05:00Z",
                    "eta_reason": "next_extension_check",
                    "attempts": 0,
                    "outcome_details": null,
                    "created_at": "2026-10-31T14:00:12Z",
                    "served_at": null,
                    "completed_at": null
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      },
      "delete": {
        "operationId": "cancelIndexingRequest",
        "summary": "Cancel an indexing request",
        "description": "Takes an open request out of the queue. The page stays; a closed request cannot be canceled.",
        "tags": [
          "Indexing"
        ],
        "responses": {
          "200": {
            "description": "Canceled.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IndexingRequestEnvelope"
                },
                "example": {
                  "request": {
                    "id": "c9a1e2b3-4d5f-4a6b-8c7d-9e0f1a2b3c4d",
                    "status": "canceled",
                    "url": "https://example.com/blog/new-post",
                    "force": false,
                    "source": "api",
                    "site": {
                      "id": "5b0c1f7e-3d2a-4c6b-9a8e-1f2d3c4b5a69",
                      "property": "sc-domain:example.com"
                    },
                    "page": {
                      "id": "8f14e45f-ceea-467f-a0e6-2a1b3c4d5e6f",
                      "created": false,
                      "indexed": false,
                      "in_sitemap": true
                    },
                    "position": null,
                    "eta": null,
                    "eta_reason": null,
                    "attempts": 0,
                    "outcome_details": null,
                    "created_at": "2026-10-31T14:00:12Z",
                    "served_at": null,
                    "completed_at": "2026-10-31T14:02:00Z"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/RequestClosed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/sites/{site}/indexnow": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Site"
        }
      ],
      "post": {
        "operationId": "submitIndexNow",
        "summary": "Submit URLs to IndexNow",
        "description": "Notifies Bing, Yandex and the other IndexNow engines of up to 100 URLs of the site at once. It does not reach Google. Needs the site's IndexNow key file in place (`indexnow_ready`); 20 submissions per site a day.",
        "tags": [
          "IndexNow"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IndexNowSubmission"
              },
              "example": {
                "urls": [
                  "https://example.com/blog/new-post",
                  "https://example.com/pricing"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Submitted.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IndexNowResult"
                },
                "example": {
                  "submitted": 1,
                  "skipped": [
                    {
                      "url": "https://other.example.net/page",
                      "reason": "not_on_site"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/UpgradeRequired"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/IndexNowNotVerified"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenApiDocument",
        "summary": "This document",
        "description": "The OpenAPI 3.1 document of /v1. Needs no key.",
        "tags": [
          "Meta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "The document.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "im_live_ key",
        "description": "Send a key in the `Authorization` header: `Authorization: Bearer $INDEXMACHINE_API_KEY`. A key is `im_live_`, 8 letters or digits, an underscore and 43 more. A read-only key reads; only a full key queues requests, cancels them or submits to IndexNow.\n\nKeep keys out of browsers, apps and repositories."
      }
    },
    "parameters": {
      "Site": {
        "name": "site",
        "in": "path",
        "required": true,
        "description": "The site's id (a UUID) or its domain, such as example.com.",
        "schema": {
          "type": "string",
          "maxLength": 255
        }
      },
      "IndexingRequestId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "The request's id.",
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "Cursor": {
        "name": "cursor",
        "in": "query",
        "required": false,
        "description": "`next_cursor` from the previous page, as received.",
        "schema": {
          "type": "string",
          "maxLength": 500
        }
      },
      "PagesLimit": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "Pages to return, 50 by default.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200,
          "default": 50
        }
      },
      "RequestsLimit": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "Requests to return, 25 by default.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 25
        }
      }
    },
    "headers": {
      "XRequestId": {
        "description": "The request's id. The API keeps an `X-Request-Id` the client sends.",
        "schema": {
          "type": "string"
        }
      },
      "RateLimitLimit": {
        "description": "Requests allowed per hour for this user: 1,000 on paid plans, 300 otherwise.",
        "schema": {
          "type": "integer"
        }
      },
      "RateLimitRemaining": {
        "description": "Requests left in the current hour.",
        "schema": {
          "type": "integer"
        }
      },
      "RateLimitReset": {
        "description": "Seconds until the hourly budget resets.",
        "schema": {
          "type": "integer"
        }
      },
      "RetryAfter": {
        "description": "Seconds to wait before trying again.",
        "schema": {
          "type": "integer"
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "A parameter is missing or not valid.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "invalid_url": {
                "summary": "Not an http or https URL",
                "value": {
                  "error": {
                    "code": "invalid_url",
                    "message": "url must be an http or https URL of 2048 characters at most.",
                    "param": "url",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              },
              "invalid_parameter": {
                "summary": "A parameter out of range",
                "value": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "status must be one of indexed, not_indexed, awaiting, requested, rejected, needs_fix, excluded, not_found.",
                    "param": "status",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              },
              "invalid_cursor": {
                "summary": "A cursor from another list",
                "value": {
                  "error": {
                    "code": "invalid_cursor",
                    "message": "This cursor was not issued for this list. Send next_cursor as you received it.",
                    "param": "cursor",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "No key, or a key that is unknown, revoked or expired.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "api_key_missing": {
                "summary": "No key",
                "value": {
                  "error": {
                    "code": "api_key_missing",
                    "message": "Send your API key as Authorization: Bearer im_live_...",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              },
              "api_key_invalid": {
                "summary": "Unknown or revoked key",
                "value": {
                  "error": {
                    "code": "api_key_invalid",
                    "message": "This API key is unknown, revoked or expired.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "UpgradeRequired": {
        "description": "The plan does not include Request indexing for this site.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "upgrade_required": {
                "summary": "Trial or unpaid site",
                "value": {
                  "error": {
                    "code": "upgrade_required",
                    "message": "Requesting indexing needs a paid plan for this site.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "Forbidden": {
        "description": "A read-only key tried to change something.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "permission_denied": {
                "summary": "Read-only key",
                "value": {
                  "error": {
                    "code": "permission_denied",
                    "message": "This key is read-only.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "No such site, URL or request for this user.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "site_not_found": {
                "summary": "No site covers it",
                "value": {
                  "error": {
                    "code": "site_not_found",
                    "message": "None of your verified sites covers this URL.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              },
              "not_found": {
                "summary": "Unknown id",
                "value": {
                  "error": {
                    "code": "not_found",
                    "message": "No indexing request with this id.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "GoogleIndexingOff": {
        "description": "Google indexing is off for the site, or the site is not verified.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "google_indexing_off": {
                "summary": "Indexing switched off",
                "value": {
                  "error": {
                    "code": "google_indexing_off",
                    "message": "Google indexing is off for example.com. Turn it on in the dashboard.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "IndexNowNotVerified": {
        "description": "The site's IndexNow key file is not in place.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "indexnow_not_verified": {
                "summary": "No key file",
                "value": {
                  "error": {
                    "code": "indexnow_not_verified",
                    "message": "IndexNow is not verified for example.com: the key file is missing.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "RequestClosed": {
        "description": "The request is closed already.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "request_closed": {
                "summary": "Already done",
                "value": {
                  "error": {
                    "code": "request_closed",
                    "message": "This request is closed (requested) and cannot be canceled.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "PageNotIndexable": {
        "description": "The page cannot take a request.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "page_excluded": {
                "summary": "Excluded page",
                "value": {
                  "error": {
                    "code": "page_excluded",
                    "message": "This page is excluded from indexing. Include it again in the dashboard first.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              },
              "pages_limit_reached": {
                "summary": "Site full",
                "value": {
                  "error": {
                    "code": "pages_limit_reached",
                    "message": "example.com has reached its pages limit (1000), so this URL cannot be added.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "RateLimited": {
        "description": "Too many requests: the hourly API budget, 50 live checks per site a day, or 20 IndexNow submissions per site a day.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          },
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "rate_limited": {
                "summary": "Over a limit",
                "value": {
                  "error": {
                    "code": "rate_limited",
                    "message": "The hourly request budget is used up.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "RequestCap": {
        "description": "Too many requests, or too many open indexing requests: 10 per site and 100 in all.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          },
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "request_cap": {
                "summary": "Too many open requests",
                "value": {
                  "error": {
                    "code": "request_cap",
                    "message": "example.com has 10 open indexing requests. Wait for them to go out, or cancel some.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              },
              "rate_limited": {
                "summary": "Over the hourly budget",
                "value": {
                  "error": {
                    "code": "rate_limited",
                    "message": "The hourly request budget is used up.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      },
      "Unavailable": {
        "description": "The API is down for a moment.",
        "headers": {
          "X-Request-Id": {
            "$ref": "#/components/headers/XRequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "unavailable": {
                "summary": "Down",
                "value": {
                  "error": {
                    "code": "unavailable",
                    "message": "IndexMachine is unavailable. Try again in a minute.",
                    "request_id": "req_7f3c2a91b4d84e0f"
                  }
                }
              }
            }
          }
        }
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "description": "The body of every 4xx and 5xx response. Branch on `error.code`; `error.message` is for people and can change.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "$ref": "#/components/schemas/ErrorCode"
              },
              "message": {
                "type": "string",
                "description": "What happened and what to do, for people."
              },
              "param": {
                "type": "string",
                "description": "The parameter at fault, when there is one."
              },
              "request_id": {
                "type": "string",
                "description": "The request's id."
              }
            }
          }
        }
      },
      "ErrorCode": {
        "type": "string",
        "description": "Stable error codes. New codes can be added.",
        "enum": [
          "api_key_missing",
          "api_key_invalid",
          "permission_denied",
          "site_not_found",
          "not_found",
          "invalid_url",
          "invalid_parameter",
          "invalid_cursor",
          "upgrade_required",
          "google_indexing_off",
          "indexnow_not_verified",
          "request_closed",
          "page_excluded",
          "pages_limit_reached",
          "rate_limited",
          "request_cap",
          "unavailable"
        ]
      },
      "Warning": {
        "type": "object",
        "description": "Something worth knowing that did not stop the request. Codes include not_in_sitemap, removed_from_sitemap, recently_requested, parked, blocking_coverage, similar_page, live_check_refused and live_quota_reached; new ones can be added.",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "SiteRef": {
        "type": "object",
        "required": [
          "id",
          "property"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The site's id."
          },
          "property": {
            "type": "string",
            "description": "The Search Console property: sc-domain:example.com or a URL prefix."
          }
        }
      },
      "Plan": {
        "type": "string",
        "enum": [
          "subscription",
          "lifetime",
          "trial",
          "paused"
        ],
        "description": "`trial`: signed up and never paid; sites sync for 7 days, and requesting indexing needs a paid plan. `paused`: the trial ended without a payment."
      },
      "Me": {
        "type": "object",
        "required": [
          "user",
          "extension",
          "api_key",
          "rate_limit"
        ],
        "properties": {
          "user": {
            "type": "object",
            "required": [
              "email",
              "plan",
              "trial_ends_at"
            ],
            "properties": {
              "email": {
                "type": "string"
              },
              "plan": {
                "$ref": "#/components/schemas/Plan"
              },
              "trial_ends_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "description": "When the trial ends; null once the user has paid."
              }
            }
          },
          "extension": {
            "type": "object",
            "required": [
              "last_seen_at",
              "version",
              "online",
              "supports_force"
            ],
            "properties": {
              "last_seen_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "description": "The Chrome extension's last check-in; null when it never checked in."
              },
              "version": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The extension's version; null for 1.0.x, which does not report one."
              },
              "online": {
                "type": "boolean",
                "description": "Checked in within the last 40 minutes."
              },
              "supports_force": {
                "type": "boolean",
                "description": "Version 1.2.0 or newer: it can request a re-index of an indexed page."
              }
            }
          },
          "api_key": {
            "type": "object",
            "required": [
              "key_id",
              "label",
              "permissions"
            ],
            "properties": {
              "key_id": {
                "type": "string",
                "description": "The 8 characters after im_live_."
              },
              "label": {
                "type": "string"
              },
              "permissions": {
                "type": "string",
                "enum": [
                  "full",
                  "read_only"
                ]
              }
            }
          },
          "rate_limit": {
            "$ref": "#/components/schemas/RateLimit"
          }
        }
      },
      "RateLimit": {
        "type": "object",
        "required": [
          "limit",
          "remaining",
          "resets_at"
        ],
        "properties": {
          "limit": {
            "type": "integer"
          },
          "remaining": {
            "type": "integer"
          },
          "resets_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the hourly budget resets."
          }
        }
      },
      "Activity": {
        "type": "object",
        "required": [
          "timezone",
          "generated_at",
          "today",
          "quota",
          "sites",
          "extension",
          "recent"
        ],
        "properties": {
          "timezone": {
            "type": "string"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "description": "When this answer was made."
          },
          "today": {
            "type": "object",
            "required": [
              "date",
              "requested",
              "already_indexed",
              "rejected",
              "failed",
              "quota_exceeded"
            ],
            "properties": {
              "date": {
                "type": "string",
                "format": "date"
              },
              "requested": {
                "type": "integer"
              },
              "already_indexed": {
                "type": "integer"
              },
              "rejected": {
                "type": "integer"
              },
              "failed": {
                "type": "integer"
              },
              "quota_exceeded": {
                "type": "integer"
              }
            }
          },
          "quota": {
            "type": "object",
            "required": [
              "reached_site_ids",
              "all_sites_reached",
              "resets_at",
              "approx_daily_limit_per_site"
            ],
            "properties": {
              "reached_site_ids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "all_sites_reached": {
                "type": "boolean"
              },
              "resets_at": {
                "type": "string",
                "format": "date-time",
                "description": "When Google's daily quota resets: midnight Pacific."
              },
              "approx_daily_limit_per_site": {
                "type": "integer",
                "description": "About 10: observed, Google does not publish it."
              }
            }
          },
          "sites": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "name",
                "site_url",
                "today",
                "remaining",
                "waiting_retry",
                "needs_fix",
                "quota_reached",
                "quota_used",
                "open_requests"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "The site's id."
                },
                "name": {
                  "type": "string"
                },
                "site_url": {
                  "type": "string",
                  "description": "The Search Console property."
                },
                "today": {
                  "type": "object",
                  "required": [
                    "requested",
                    "already_indexed",
                    "rejected",
                    "failed"
                  ],
                  "properties": {
                    "requested": {
                      "type": "integer"
                    },
                    "already_indexed": {
                      "type": "integer"
                    },
                    "rejected": {
                      "type": "integer"
                    },
                    "failed": {
                      "type": "integer"
                    }
                  }
                },
                "remaining": {
                  "type": "integer",
                  "description": "Pages the extension can request now."
                },
                "waiting_retry": {
                  "type": "integer",
                  "description": "Pages waiting for their next attempt."
                },
                "needs_fix": {
                  "type": "integer",
                  "description": "Pages parked with an issue the user has to fix."
                },
                "quota_reached": {
                  "type": "boolean"
                },
                "quota_used": {
                  "type": "integer",
                  "description": "Requests since midnight Pacific."
                },
                "open_requests": {
                  "type": "integer",
                  "description": "Indexing requests queued through the dashboard, the API or MCP."
                }
              }
            }
          },
          "extension": {
            "type": "object",
            "required": [
              "last_seen_at",
              "version",
              "attention",
              "attention_since"
            ],
            "properties": {
              "last_seen_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "description": "The Chrome extension's last check-in."
              },
              "version": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "attention": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "What the extension needs from the user, such as signed_out; null when nothing."
              },
              "attention_since": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "description": "Since when."
              }
            }
          },
          "recent": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "at",
                "url",
                "site_name",
                "status",
                "reason_code"
              ],
              "properties": {
                "at": {
                  "type": "string",
                  "format": "date-time",
                  "description": "When."
                },
                "url": {
                  "type": "string"
                },
                "site_name": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "status": {
                  "type": "string",
                  "description": "requested, already_indexed, rejected, failed or quota_exceeded; new values can be added."
                },
                "reason_code": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          }
        }
      },
      "ImportStatus": {
        "type": "string",
        "enum": [
          "pending",
          "fetching_sitemap",
          "fetching_pages",
          "completed",
          "failed"
        ]
      },
      "SiteCounts": {
        "type": "object",
        "description": "Pages by status. The counts are disjoint and add up to total.",
        "required": [
          "total",
          "indexed",
          "awaiting",
          "rejected",
          "needs_fix",
          "excluded"
        ],
        "properties": {
          "total": {
            "type": "integer"
          },
          "indexed": {
            "type": "integer"
          },
          "awaiting": {
            "type": "integer",
            "description": "Not indexed yet: waiting for a request, requested, or waiting to retry."
          },
          "rejected": {
            "type": "integer"
          },
          "needs_fix": {
            "type": "integer"
          },
          "excluded": {
            "type": "integer"
          }
        }
      },
      "Site": {
        "type": "object",
        "required": [
          "id",
          "property",
          "name",
          "verified",
          "billable",
          "google_indexing_active",
          "indexnow_ready",
          "import_status",
          "last_synced_at",
          "counts"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The site's id."
          },
          "property": {
            "type": "string",
            "description": "The Search Console property: sc-domain:example.com or a URL prefix."
          },
          "name": {
            "type": "string"
          },
          "verified": {
            "type": "boolean",
            "description": "The user owns the property in Search Console."
          },
          "billable": {
            "type": "boolean",
            "description": "Covered by a paid plan: only billable sites take indexing requests."
          },
          "google_indexing_active": {
            "type": "boolean",
            "description": "Google indexing is switched on for the site."
          },
          "indexnow_ready": {
            "type": "boolean",
            "description": "The site's IndexNow key file is in place."
          },
          "import_status": {
            "$ref": "#/components/schemas/ImportStatus"
          },
          "last_synced_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "The last sitemap and Search Console sync."
          },
          "counts": {
            "$ref": "#/components/schemas/SiteCounts"
          }
        }
      },
      "SiteList": {
        "type": "object",
        "required": [
          "sites"
        ],
        "properties": {
          "sites": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Site"
            }
          }
        }
      },
      "SiteDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Site"
          },
          {
            "type": "object",
            "required": [
              "quota",
              "speed",
              "history"
            ],
            "properties": {
              "quota": {
                "type": "object",
                "required": [
                  "used_today",
                  "limit",
                  "reached",
                  "resets_at"
                ],
                "properties": {
                  "used_today": {
                    "type": "integer",
                    "description": "Request indexing clicks since midnight Pacific."
                  },
                  "limit": {
                    "type": "integer",
                    "description": "About 10 a day: observed, Google does not publish it."
                  },
                  "reached": {
                    "type": "boolean"
                  },
                  "resets_at": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Midnight Pacific."
                  }
                }
              },
              "speed": {
                "type": "object",
                "required": [
                  "median_days",
                  "sample"
                ],
                "properties": {
                  "median_days": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Median days from a first request to indexing, over the pages of the site; null under 20 pages."
                  },
                  "sample": {
                    "type": "integer",
                    "description": "Pages measured."
                  }
                }
              },
              "history": {
                "type": "array",
                "description": "Up to 30 days, oldest first.",
                "items": {
                  "type": "object",
                  "required": [
                    "date",
                    "indexed",
                    "not_indexed",
                    "rejected",
                    "needs_fix",
                    "excluded"
                  ],
                  "properties": {
                    "date": {
                      "type": "string",
                      "format": "date"
                    },
                    "indexed": {
                      "type": "integer"
                    },
                    "not_indexed": {
                      "type": "integer"
                    },
                    "rejected": {
                      "type": "integer"
                    },
                    "needs_fix": {
                      "type": "integer"
                    },
                    "excluded": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          }
        ]
      },
      "PageStatus": {
        "type": "string",
        "enum": [
          "indexed",
          "awaiting",
          "requested",
          "rejected",
          "needs_fix",
          "excluded",
          "not_found"
        ],
        "description": "`awaiting`: not indexed, waiting for its request. `requested`: the extension clicked Request indexing and Google has not indexed it yet. `rejected`: Google declined it after requests. `needs_fix`: parked with an issue to fix, or removed from the sitemap. `not_found`: the page answers 404 or 410. New values can be added."
      },
      "PageFilter": {
        "type": "string",
        "enum": [
          "indexed",
          "not_indexed",
          "awaiting",
          "requested",
          "rejected",
          "needs_fix",
          "excluded",
          "not_found"
        ]
      },
      "Page": {
        "type": "object",
        "required": [
          "id",
          "url",
          "path",
          "indexed",
          "status",
          "coverage_state",
          "issue_code",
          "last_crawl_at",
          "last_requested_at",
          "next_attempt_at",
          "added_manually"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The page's id."
          },
          "url": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "indexed": {
            "type": "boolean",
            "description": "On Google as of the last inspection."
          },
          "status": {
            "$ref": "#/components/schemas/PageStatus"
          },
          "coverage_state": {
            "type": [
              "string",
              "null"
            ],
            "description": "Search Console's coverage state, as Google words it."
          },
          "issue_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Why the page needs a fix, such as noindex or redirect."
          },
          "last_crawl_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Google's last crawl."
          },
          "last_requested_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "The last Request indexing click."
          },
          "next_attempt_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the extension may request it again."
          },
          "added_manually": {
            "type": "boolean",
            "description": "Added by URL, not from the sitemap."
          }
        }
      },
      "PageList": {
        "type": "object",
        "required": [
          "pages",
          "next_cursor"
        ],
        "properties": {
          "pages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Page"
            }
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "PageDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Page"
          },
          {
            "type": "object",
            "required": [
              "inspected_at",
              "first_indexed_at",
              "issue",
              "in_sitemap"
            ],
            "properties": {
              "inspected_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "description": "When IndexMachine last read the page's URL Inspection from Search Console; null when it was never inspected."
              },
              "first_indexed_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "description": "When IndexMachine first saw it indexed after a request."
              },
              "issue": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "code",
                      "message"
                    ],
                    "properties": {
                      "code": {
                        "type": "string"
                      },
                      "message": {
                        "type": "string"
                      }
                    }
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "in_sitemap": {
                "type": "boolean",
                "description": "Listed in the site's sitemap."
              }
            }
          }
        ]
      },
      "LiveInspection": {
        "type": "object",
        "description": "A fresh URL Inspection from Google, in Google's own words.",
        "required": [
          "checked_at",
          "verdict",
          "coverage_state",
          "indexing_state",
          "last_crawl_at",
          "page_fetch_state",
          "robots_txt_state"
        ],
        "properties": {
          "checked_at": {
            "type": "string",
            "format": "date-time",
            "description": "When Google answered."
          },
          "verdict": {
            "type": [
              "string",
              "null"
            ],
            "description": "PASS means the URL is on Google."
          },
          "coverage_state": {
            "type": [
              "string",
              "null"
            ]
          },
          "indexing_state": {
            "type": [
              "string",
              "null"
            ]
          },
          "last_crawl_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Google's last crawl."
          },
          "page_fetch_state": {
            "type": [
              "string",
              "null"
            ]
          },
          "robots_txt_state": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UrlStatus": {
        "type": "object",
        "required": [
          "url",
          "site",
          "known",
          "page",
          "open_request",
          "live",
          "live_quota",
          "warnings"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "The URL as checked, without its fragment."
          },
          "site": {
            "$ref": "#/components/schemas/SiteRef"
          },
          "known": {
            "type": "boolean",
            "description": "The URL is a page of the site."
          },
          "page": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PageDetail"
              },
              {
                "type": "null"
              }
            ]
          },
          "open_request": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/IndexingRequest"
              },
              {
                "type": "null"
              }
            ]
          },
          "live": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/LiveInspection"
              },
              {
                "type": "null"
              }
            ]
          },
          "live_quota": {
            "type": "object",
            "required": [
              "used_today",
              "limit",
              "resets_at"
            ],
            "properties": {
              "used_today": {
                "type": "integer"
              },
              "limit": {
                "type": "integer"
              },
              "resets_at": {
                "type": "string",
                "format": "date-time",
                "description": "Midnight Pacific."
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Warning"
            }
          }
        }
      },
      "IndexingRequestStatus": {
        "type": "string",
        "enum": [
          "preparing",
          "queued",
          "served",
          "requested",
          "already_indexed",
          "rejected",
          "failed",
          "canceled",
          "expired"
        ],
        "description": "Open: `preparing` (fetching the page's Search Console link), `queued`, `served` (the extension has it). Closed: `requested` (the extension clicked Request indexing), `already_indexed` (Search Console showed it on Google), `rejected`, `failed` (3 attempts), `canceled`, `expired` (open for 72 hours). New values can be added."
      },
      "EtaReason": {
        "type": "string",
        "enum": [
          "next_extension_check",
          "daily_quota",
          "extension_offline",
          "extension_update_required"
        ],
        "description": "`next_extension_check`: the extension's next check, about 5 minutes away on 1.2.0 or newer, 30 on older ones. `daily_quota`: the site used today's requests; after the reset at midnight Pacific. `extension_offline`: no check-in for 40 minutes, so no ETA. `extension_update_required`: a forced re-index needs extension 1.2.0 or newer, so no ETA."
      },
      "IndexingRequest": {
        "type": "object",
        "required": [
          "id",
          "status",
          "url",
          "force",
          "source",
          "site",
          "page",
          "position",
          "eta",
          "eta_reason",
          "attempts",
          "outcome_details",
          "created_at",
          "served_at",
          "completed_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The request's id."
          },
          "status": {
            "$ref": "#/components/schemas/IndexingRequestStatus"
          },
          "url": {
            "type": "string"
          },
          "force": {
            "type": "boolean",
            "description": "A re-index of a page that is already indexed."
          },
          "source": {
            "type": "string",
            "enum": [
              "dashboard",
              "api",
              "mcp"
            ]
          },
          "site": {
            "$ref": "#/components/schemas/SiteRef"
          },
          "page": {
            "type": "object",
            "required": [
              "id",
              "created",
              "indexed",
              "in_sitemap"
            ],
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "The page's id."
              },
              "created": {
                "type": "boolean",
                "description": "The request added this URL as a new page."
              },
              "indexed": {
                "type": "boolean"
              },
              "in_sitemap": {
                "type": "boolean"
              }
            }
          },
          "position": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Place in the site's queue, 1 first; null once served or closed."
          },
          "eta": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the extension is expected to click Request indexing; null when there is no honest estimate."
          },
          "eta_reason": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EtaReason"
              },
              {
                "type": "null"
              }
            ]
          },
          "attempts": {
            "type": "integer"
          },
          "outcome_details": {
            "type": [
              "string",
              "null"
            ],
            "description": "What Search Console said, once closed."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When it was queued."
          },
          "served_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the extension picked it up."
          },
          "completed_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When it closed."
          }
        }
      },
      "IndexingRequestEnvelope": {
        "type": "object",
        "required": [
          "request"
        ],
        "properties": {
          "request": {
            "$ref": "#/components/schemas/IndexingRequest"
          }
        }
      },
      "IndexingRequestList": {
        "type": "object",
        "required": [
          "requests",
          "next_cursor"
        ],
        "properties": {
          "requests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IndexingRequest"
            }
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "IndexingRequestCreate": {
        "type": "object",
        "required": [
          "url"
        ],
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2048,
            "description": "An http or https URL of one of the user's verified sites. The fragment is dropped."
          },
          "force": {
            "type": "boolean",
            "default": false,
            "description": "Request a re-index even when the page is already indexed."
          },
          "preview": {
            "type": "boolean",
            "default": false,
            "description": "Change nothing; answer what the request would do."
          }
        }
      },
      "IndexingRequestResult": {
        "type": "object",
        "required": [
          "outcome",
          "existing",
          "request",
          "url",
          "site",
          "page",
          "would",
          "quota",
          "warnings",
          "hint"
        ],
        "properties": {
          "outcome": {
            "type": "string",
            "enum": [
              "created",
              "existing",
              "already_indexed",
              "preview"
            ],
            "description": "`created` (202): queued now. `existing`: the open request for the same page. `already_indexed`: nothing queued, the page is indexed and force was false. `preview`: nothing changed."
          },
          "existing": {
            "type": "boolean",
            "description": "request is an open request made earlier for the same page."
          },
          "request": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/IndexingRequest"
              },
              {
                "type": "null"
              }
            ]
          },
          "url": {
            "type": "string",
            "description": "The URL as the API reads it, without its fragment."
          },
          "site": {
            "$ref": "#/components/schemas/SiteRef"
          },
          "page": {
            "oneOf": [
              {
                "type": "object",
                "description": "The stored page; null when the URL is not a page of the site yet.",
                "required": [
                  "id",
                  "indexed",
                  "in_sitemap"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The page's id."
                  },
                  "indexed": {
                    "type": "boolean"
                  },
                  "in_sitemap": {
                    "type": "boolean"
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "would": {
            "oneOf": [
              {
                "type": "object",
                "description": "On a preview: what the request would do.",
                "required": [
                  "create_page",
                  "needs_force",
                  "uses_last_quota",
                  "position",
                  "eta",
                  "eta_reason"
                ],
                "properties": {
                  "create_page": {
                    "type": "boolean",
                    "description": "The URL is not a page of the site yet and would be added."
                  },
                  "needs_force": {
                    "type": "boolean",
                    "description": "The page is indexed: without force nothing would be queued."
                  },
                  "uses_last_quota": {
                    "type": "boolean",
                    "description": "It would take the site's last request of the day."
                  },
                  "position": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "eta": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time",
                    "description": "When the extension would click Request indexing."
                  },
                  "eta_reason": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/EtaReason"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "quota": {
            "type": "object",
            "required": [
              "site_used_today",
              "site_limit",
              "resets_at"
            ],
            "properties": {
              "site_used_today": {
                "type": "integer",
                "description": "Requests since midnight Pacific."
              },
              "site_limit": {
                "type": "integer",
                "description": "About 10 a day."
              },
              "resets_at": {
                "type": "string",
                "format": "date-time",
                "description": "Midnight Pacific."
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Warning"
            }
          },
          "hint": {
            "type": [
              "string",
              "null"
            ],
            "description": "What would change the outcome, such as force for an indexed page."
          }
        }
      },
      "IndexNowSubmission": {
        "type": "object",
        "required": [
          "urls"
        ],
        "additionalProperties": false,
        "properties": {
          "urls": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "URLs of this site."
          }
        }
      },
      "IndexNowResult": {
        "type": "object",
        "required": [
          "submitted",
          "skipped"
        ],
        "properties": {
          "submitted": {
            "type": "integer",
            "description": "URLs sent to IndexNow."
          },
          "skipped": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "url",
                "reason"
              ],
              "properties": {
                "url": {
                  "type": "string"
                },
                "reason": {
                  "type": "string",
                  "description": "not_on_site, invalid_url, excluded or duplicate; new values can be added."
                }
              }
            }
          }
        }
      }
    }
  }
}
