{
  "openapi": "3.1.0",
  "info": {
    "title": "IndexerPal API",
    "version": "1.0.0",
    "summary": "Website and backlink indexing on credits.",
    "description": "Submit web pages and backlinks for indexing in Google, Bing and Yandex, check whether URLs are indexed, follow every URL's status, and buy credits.\n\nAuthenticate with an API key (dashboard, after a first purchase) or an OAuth access token: `Authorization: Bearer <token>`. Limits: 120 requests a minute per credential, 20,000 a day per account, 500 projects or checks a day.\n\nThe same operations are available as MCP tools at https://indexerpal.com/mcp.\n\nPayment discovery follows the Machine Payments Protocol (MPP): operations that cost money carry `x-payment-info` with their offers.",
    "termsOfService": "https://indexerpal.com/terms",
    "contact": {
      "name": "IndexerPal support",
      "email": "support@indexerpal.com",
      "url": "https://indexerpal.com/developers"
    }
  },
  "externalDocs": {
    "description": "Developer documentation",
    "url": "https://indexerpal.com/developers/api"
  },
  "servers": [
    {
      "url": "https://indexerpal.com/api/v1",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Account",
      "description": "Balance, credential and usage."
    },
    {
      "name": "Pricing",
      "description": "Packs, costs and estimates. No credential needed."
    },
    {
      "name": "Projects",
      "description": "Indexing projects and index checks."
    },
    {
      "name": "Sitemaps",
      "description": "Read sitemaps."
    },
    {
      "name": "Billing",
      "description": "Buy credits and follow orders."
    }
  ],
  "paths": {
    "/credits/x402": {
      "get": {
        "operationId": "quote_credits_x402",
        "summary": "Read the x402 price",
        "x-payment-info": {
          "intent": "charge",
          "method": "evm",
          "amount": "9990000",
          "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "description": "basic pack: 150 credits, paid in USDC on Base (x402). A call with no pack prices this pack. Other packs: basic, pro, premium, agency."
        },
        "description": "Returns 402 with the price of one pack (the basic pack when `pack` is omitted). Nothing is charged by reading it.",
        "tags": [
          "Billing"
        ],
        "parameters": [
          {
            "name": "pack",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "basic",
                "pro",
                "premium",
                "agency"
              ]
            },
            "description": "Which pack to price. Omitted means the basic pack."
          }
        ],
        "responses": {
          "400": {
            "description": "Unknown pack.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "402": {
            "description": "The price: PAYMENT-REQUIRED and WWW-Authenticate: Payment."
          },
          "404": {
            "description": "x402 is not enabled on this deployment.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "buy_credits_x402",
        "summary": "Buy credits with x402 (USDC)",
        "x-payment-info": {
          "offers": [
            {
              "intent": "charge",
              "method": "evm",
              "amount": "9990000",
              "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
              "description": "basic pack: 150 credits, paid in USDC on Base (x402)"
            },
            {
              "intent": "charge",
              "method": "evm",
              "amount": "29990000",
              "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
              "description": "pro pack: 500 credits, paid in USDC on Base (x402)"
            },
            {
              "intent": "charge",
              "method": "evm",
              "amount": "59990000",
              "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
              "description": "premium pack: 1100 credits, paid in USDC on Base (x402)"
            },
            {
              "intent": "charge",
              "method": "evm",
              "amount": "149990000",
              "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
              "description": "agency pack: 3000 credits, paid in USDC on Base (x402)"
            }
          ]
        },
        "description": "Pays for a credit pack directly over HTTP 402 with USDC. A call with no credential still returns 402 (PAYMENT-REQUIRED and WWW-Authenticate: Payment) so the price can be read first. A call with no pack prices the basic pack. Sign the payment and repeat the call with PAYMENT-SIGNATURE and Authorization: Bearer. A signature sent without the credential is not submitted. Credits are added to that account.\n\nScope: `purchase`.",
        "tags": [
          "Billing"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "pack": {
                    "type": "string",
                    "enum": [
                      "basic",
                      "pro",
                      "premium",
                      "agency"
                    ]
                  }
                },
                "required": [
                  "pack"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Paid: the order, with the settlement transaction."
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "402": {
            "description": "Payment required (x402). See the PAYMENT-REQUIRED header."
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "purchase"
            ]
          }
        ]
      }
    },
    "/account": {
      "get": {
        "operationId": "get_account",
        "summary": "Get account",
        "description": "The account behind this credential: credit balance, whether it can index yet (it needs one paid order), this credential's scopes, today's usage and the limits.",
        "tags": [
          "Account"
        ],
        "responses": {
          "200": {
            "description": "Get account",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "object": {
                      "type": "string",
                      "const": "account"
                    },
                    "id": {
                      "type": "string"
                    },
                    "email": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "credits": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "paid": {
                      "type": "boolean",
                      "description": "At least one paid order. Indexing needs it; reading and buying don't."
                    },
                    "credential": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "enum": [
                            "api_key",
                            "oauth",
                            "agent"
                          ]
                        },
                        "name": {
                          "type": "string"
                        },
                        "scopes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "type",
                        "name",
                        "scopes"
                      ],
                      "additionalProperties": false
                    },
                    "usage_today": {
                      "type": "object",
                      "properties": {
                        "requests": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "submissions": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "requests",
                        "submissions"
                      ],
                      "additionalProperties": false
                    },
                    "limits": {
                      "type": "object",
                      "properties": {
                        "requests_per_minute": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "requests_per_day": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "submissions_per_day": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "urls_per_submission": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "requests_per_minute",
                        "requests_per_day",
                        "submissions_per_day",
                        "urls_per_submission"
                      ],
                      "additionalProperties": false
                    },
                    "dashboard_url": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "object",
                    "id",
                    "email",
                    "name",
                    "credits",
                    "paid",
                    "credential",
                    "usage_today",
                    "limits",
                    "dashboard_url"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": []
          }
        ],
        "x-mcp-tool": "get_account"
      }
    },
    "/pricing": {
      "get": {
        "operationId": "get_pricing",
        "summary": "Get pricing",
        "description": "Credit packs and prices (one-time payments in US dollars, credits never expire), what each action costs in credits, and when URLs are checked in Google.",
        "tags": [
          "Pricing"
        ],
        "responses": {
          "200": {
            "description": "Get pricing",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "object": {
                      "type": "string",
                      "const": "pricing"
                    },
                    "currency": {
                      "type": "string"
                    },
                    "packs": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "price": {
                            "type": "string"
                          },
                          "amount_cents": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "credits": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "per_link": {
                            "type": "string"
                          },
                          "popular": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "id",
                          "name",
                          "price",
                          "amount_cents",
                          "credits",
                          "per_link",
                          "popular"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "costs": {
                      "type": "object",
                      "properties": {
                        "standard_url": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991,
                          "description": "Credits per URL, standard indexing."
                        },
                        "instant_url": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991,
                          "description": "Credits per URL, instant indexing (Google first in line)."
                        },
                        "urls_checked_per_credit": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991,
                          "description": "URLs the index checker checks for one credit."
                        }
                      },
                      "required": [
                        "standard_url",
                        "instant_url",
                        "urls_checked_per_credit"
                      ],
                      "additionalProperties": false
                    },
                    "check_days": {
                      "type": "object",
                      "properties": {
                        "first": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "final": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "first",
                        "final"
                      ],
                      "additionalProperties": false
                    },
                    "credits_back_after_days": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "URLs still not indexed at the final check get their credits back automatically."
                    },
                    "credits_expire": {
                      "type": "boolean"
                    },
                    "max_urls_per_submission": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "buy_url": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "object",
                    "currency",
                    "packs",
                    "costs",
                    "check_days",
                    "credits_back_after_days",
                    "credits_expire",
                    "max_urls_per_submission",
                    "buy_url"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "bearer": []
          },
          {
            "apiKey": []
          }
        ],
        "x-mcp-tool": "get_pricing"
      }
    },
    "/estimate": {
      "post": {
        "operationId": "estimate_cost",
        "summary": "Estimate cost",
        "description": "How many credits a submission would cost, before spending anything. Send the URLs to also learn how many are valid, duplicated or not indexable. With a credential, says whether the balance covers it.",
        "tags": [
          "Pricing"
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "default": "standard",
                    "description": "standard or instant indexing, or check (index checker).",
                    "type": "string",
                    "enum": [
                      "standard",
                      "instant",
                      "check"
                    ]
                  },
                  "urls": {
                    "description": "The URLs you plan to send.",
                    "maxItems": 20000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 4096
                    }
                  },
                  "count": {
                    "description": "Or just a number of URLs.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10000
                  }
                },
                "required": []
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Estimate cost",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "enum": [
                        "standard",
                        "instant",
                        "check"
                      ]
                    },
                    "urls": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "Valid, unique URLs counted."
                    },
                    "invalid": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "duplicates": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "invalid_examples": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "credits": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "balance": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "enough": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "kind",
                    "urls",
                    "invalid",
                    "duplicates",
                    "invalid_examples",
                    "credits",
                    "balance",
                    "enough"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "bearer": []
          },
          {
            "apiKey": []
          }
        ],
        "x-mcp-tool": "estimate_cost"
      }
    },
    "/projects": {
      "post": {
        "operationId": "submit_urls",
        "summary": "Index URLs",
        "x-payment-info": {
          "offers": [
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "999",
              "currency": "usd",
              "description": "basic pack: 150 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "2999",
              "currency": "usd",
              "description": "pro pack: 500 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "5999",
              "currency": "usd",
              "description": "premium pack: 1100 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "14999",
              "currency": "usd",
              "description": "agency pack: 3000 credits, spent by this call (buy with buy_credits when the balance is short)"
            }
          ]
        },
        "description": "Creates an indexing project: IndexerPal's own indexing system gets the pages or backlinks indexed in Google (and Bing and Yandex unless turned off), then verifies each URL in Google (instant: within the hour; all: day 4 and day 14). Spends credits at once (1 per URL standard, 3 instant). Returns the project; follow it with get_project.\n\nScope: `index`.\n\nNeeds an account with at least one paid order.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "description": "Retry-safe key: a retry with the same key returns the first response and spends nothing twice. Kept 24 hours."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "urls": {
                    "minItems": 1,
                    "maxItems": 20000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 4096
                    },
                    "description": "Absolute http(s) URLs, up to 10,000 after duplicates and invalid entries are removed."
                  },
                  "mode": {
                    "default": "standard",
                    "description": "standard: 1 credit per URL, usually hours to a few days. instant: 3 credits per URL, Google first in line, in as little as a few minutes.",
                    "type": "string",
                    "enum": [
                      "standard",
                      "instant"
                    ]
                  },
                  "name": {
                    "description": "Project name. Defaults to the first URL's domain.",
                    "type": "string",
                    "maxLength": 120
                  },
                  "bing": {
                    "default": true,
                    "description": "Also send to Bing. Same price.",
                    "type": "boolean"
                  },
                  "yandex": {
                    "default": true,
                    "description": "Also send to Yandex. Same price.",
                    "type": "boolean"
                  },
                  "drip_days": {
                    "default": 0,
                    "description": "Spread sending over this many days (0 = as fast as possible).",
                    "type": "number",
                    "enum": [
                      0,
                      3,
                      7,
                      14,
                      30
                    ]
                  }
                },
                "required": [
                  "urls"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Index URLs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "project": {
                      "type": "object",
                      "properties": {
                        "object": {
                          "type": "string",
                          "const": "project"
                        },
                        "id": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "index",
                            "check"
                          ],
                          "description": "index: an indexing project. check: URLs only looked up in Google (index checker)."
                        },
                        "name": {
                          "type": "string"
                        },
                        "mode": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "standard",
                                "instant"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Indexing mode; null for checks."
                        },
                        "engines": {
                          "type": "object",
                          "properties": {
                            "google": {
                              "type": "boolean"
                            },
                            "bing": {
                              "type": "boolean"
                            },
                            "yandex": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "google",
                            "bing",
                            "yandex"
                          ],
                          "additionalProperties": false
                        },
                        "drip_days": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "completed"
                          ]
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "total": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "waiting": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Scheduled (drip feed) or queued, not sent yet."
                            },
                            "checking": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Sent, waiting for a Google check."
                            },
                            "indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "not_indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Not indexed at the final check: their credits went back."
                            },
                            "failed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Rejected or cancelled before sending: their credits went back."
                            }
                          },
                          "required": [
                            "total",
                            "waiting",
                            "checking",
                            "indexed",
                            "not_indexed",
                            "failed"
                          ],
                          "additionalProperties": false
                        },
                        "index_rate": {
                          "description": "Percent of decided URLs that are indexed; null until one is decided.",
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "credits_spent": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "credits_returned": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "created_at": {
                          "type": "string",
                          "description": "ISO 8601, UTC"
                        },
                        "completed_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "description": "ISO 8601, UTC"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "dashboard_url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "object",
                        "id",
                        "kind",
                        "name",
                        "mode",
                        "engines",
                        "drip_days",
                        "status",
                        "counts",
                        "index_rate",
                        "credits_spent",
                        "credits_returned",
                        "created_at",
                        "completed_at",
                        "dashboard_url"
                      ],
                      "additionalProperties": false
                    },
                    "urls_accepted": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "invalid": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "duplicates": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "invalid_examples": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Up to 10 entries that aren't indexable URLs."
                    },
                    "credits_spent": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "balance": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "project",
                    "urls_accepted",
                    "invalid",
                    "duplicates",
                    "invalid_examples",
                    "credits_spent",
                    "balance"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: buy credits first (payment_required) or top up (insufficient_credits).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "index"
            ]
          }
        ],
        "x-mcp-tool": "submit_urls"
      },
      "get": {
        "operationId": "list_projects",
        "summary": "List projects",
        "description": "Indexing projects and index checks on this account, newest first, with their counts and index rate.\n\nScope: `read`.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "default": "all",
              "type": "string",
              "enum": [
                "all",
                "index",
                "check"
              ]
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "default": "any",
              "type": "string",
              "enum": [
                "any",
                "active",
                "completed"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List projects",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "projects": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "object": {
                            "type": "string",
                            "const": "project"
                          },
                          "id": {
                            "type": "string"
                          },
                          "kind": {
                            "type": "string",
                            "enum": [
                              "index",
                              "check"
                            ],
                            "description": "index: an indexing project. check: URLs only looked up in Google (index checker)."
                          },
                          "name": {
                            "type": "string"
                          },
                          "mode": {
                            "anyOf": [
                              {
                                "type": "string",
                                "enum": [
                                  "standard",
                                  "instant"
                                ]
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Indexing mode; null for checks."
                          },
                          "engines": {
                            "type": "object",
                            "properties": {
                              "google": {
                                "type": "boolean"
                              },
                              "bing": {
                                "type": "boolean"
                              },
                              "yandex": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "google",
                              "bing",
                              "yandex"
                            ],
                            "additionalProperties": false
                          },
                          "drip_days": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "active",
                              "completed"
                            ]
                          },
                          "counts": {
                            "type": "object",
                            "properties": {
                              "total": {
                                "type": "integer",
                                "minimum": -9007199254740991,
                                "maximum": 9007199254740991
                              },
                              "waiting": {
                                "type": "integer",
                                "minimum": -9007199254740991,
                                "maximum": 9007199254740991,
                                "description": "Scheduled (drip feed) or queued, not sent yet."
                              },
                              "checking": {
                                "type": "integer",
                                "minimum": -9007199254740991,
                                "maximum": 9007199254740991,
                                "description": "Sent, waiting for a Google check."
                              },
                              "indexed": {
                                "type": "integer",
                                "minimum": -9007199254740991,
                                "maximum": 9007199254740991
                              },
                              "not_indexed": {
                                "type": "integer",
                                "minimum": -9007199254740991,
                                "maximum": 9007199254740991,
                                "description": "Not indexed at the final check: their credits went back."
                              },
                              "failed": {
                                "type": "integer",
                                "minimum": -9007199254740991,
                                "maximum": 9007199254740991,
                                "description": "Rejected or cancelled before sending: their credits went back."
                              }
                            },
                            "required": [
                              "total",
                              "waiting",
                              "checking",
                              "indexed",
                              "not_indexed",
                              "failed"
                            ],
                            "additionalProperties": false
                          },
                          "index_rate": {
                            "description": "Percent of decided URLs that are indexed; null until one is decided.",
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "credits_spent": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "credits_returned": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "created_at": {
                            "type": "string",
                            "description": "ISO 8601, UTC"
                          },
                          "completed_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "description": "ISO 8601, UTC"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "dashboard_url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "object",
                          "id",
                          "kind",
                          "name",
                          "mode",
                          "engines",
                          "drip_days",
                          "status",
                          "counts",
                          "index_rate",
                          "credits_spent",
                          "credits_returned",
                          "created_at",
                          "completed_at",
                          "dashboard_url"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "has_more": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "projects",
                    "has_more"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "read"
            ]
          }
        ],
        "x-mcp-tool": "list_projects"
      }
    },
    "/projects/from-sitemap": {
      "post": {
        "operationId": "submit_sitemap",
        "summary": "Index a sitemap",
        "x-payment-info": {
          "offers": [
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "999",
              "currency": "usd",
              "description": "basic pack: 150 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "2999",
              "currency": "usd",
              "description": "pro pack: 500 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "5999",
              "currency": "usd",
              "description": "premium pack: 1100 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "14999",
              "currency": "usd",
              "description": "agency pack: 3000 credits, spent by this call (buy with buy_credits when the balance is short)"
            }
          ]
        },
        "description": "Reads an XML sitemap (or sitemap index, one level deep; .xml.gz works) and creates an indexing project with its page URLs in one step. Set skip_already_submitted to send only URLs this account never submitted before, which suits recurring runs.\n\nScope: `index`.\n\nNeeds an account with at least one paid order.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "description": "Retry-safe key: a retry with the same key returns the first response and spends nothing twice. Kept 24 hours."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sitemap_url": {
                    "type": "string",
                    "maxLength": 2048,
                    "description": "Absolute URL of the sitemap."
                  },
                  "skip_already_submitted": {
                    "default": false,
                    "description": "Leave out URLs already sent in an earlier project of this account.",
                    "type": "boolean"
                  },
                  "mode": {
                    "default": "standard",
                    "description": "standard: 1 credit per URL, usually hours to a few days. instant: 3 credits per URL, Google first in line, in as little as a few minutes.",
                    "type": "string",
                    "enum": [
                      "standard",
                      "instant"
                    ]
                  },
                  "name": {
                    "description": "Project name. Defaults to the first URL's domain.",
                    "type": "string",
                    "maxLength": 120
                  },
                  "bing": {
                    "default": true,
                    "description": "Also send to Bing. Same price.",
                    "type": "boolean"
                  },
                  "yandex": {
                    "default": true,
                    "description": "Also send to Yandex. Same price.",
                    "type": "boolean"
                  },
                  "drip_days": {
                    "default": 0,
                    "description": "Spread sending over this many days (0 = as fast as possible).",
                    "type": "number",
                    "enum": [
                      0,
                      3,
                      7,
                      14,
                      30
                    ]
                  }
                },
                "required": [
                  "sitemap_url"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Index a sitemap",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "project": {
                      "type": "object",
                      "properties": {
                        "object": {
                          "type": "string",
                          "const": "project"
                        },
                        "id": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "index",
                            "check"
                          ],
                          "description": "index: an indexing project. check: URLs only looked up in Google (index checker)."
                        },
                        "name": {
                          "type": "string"
                        },
                        "mode": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "standard",
                                "instant"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Indexing mode; null for checks."
                        },
                        "engines": {
                          "type": "object",
                          "properties": {
                            "google": {
                              "type": "boolean"
                            },
                            "bing": {
                              "type": "boolean"
                            },
                            "yandex": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "google",
                            "bing",
                            "yandex"
                          ],
                          "additionalProperties": false
                        },
                        "drip_days": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "completed"
                          ]
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "total": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "waiting": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Scheduled (drip feed) or queued, not sent yet."
                            },
                            "checking": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Sent, waiting for a Google check."
                            },
                            "indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "not_indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Not indexed at the final check: their credits went back."
                            },
                            "failed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Rejected or cancelled before sending: their credits went back."
                            }
                          },
                          "required": [
                            "total",
                            "waiting",
                            "checking",
                            "indexed",
                            "not_indexed",
                            "failed"
                          ],
                          "additionalProperties": false
                        },
                        "index_rate": {
                          "description": "Percent of decided URLs that are indexed; null until one is decided.",
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "credits_spent": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "credits_returned": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "created_at": {
                          "type": "string",
                          "description": "ISO 8601, UTC"
                        },
                        "completed_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "description": "ISO 8601, UTC"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "dashboard_url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "object",
                        "id",
                        "kind",
                        "name",
                        "mode",
                        "engines",
                        "drip_days",
                        "status",
                        "counts",
                        "index_rate",
                        "credits_spent",
                        "credits_returned",
                        "created_at",
                        "completed_at",
                        "dashboard_url"
                      ],
                      "additionalProperties": false
                    },
                    "urls_accepted": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "invalid": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "duplicates": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "invalid_examples": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Up to 10 entries that aren't indexable URLs."
                    },
                    "credits_spent": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "balance": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "skipped_already_submitted": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "sitemap_truncated": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "project",
                    "urls_accepted",
                    "invalid",
                    "duplicates",
                    "invalid_examples",
                    "credits_spent",
                    "balance",
                    "skipped_already_submitted",
                    "sitemap_truncated"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: buy credits first (payment_required) or top up (insufficient_credits).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "index"
            ]
          }
        ],
        "x-mcp-tool": "submit_sitemap"
      }
    },
    "/projects/{project_id}/urls": {
      "post": {
        "operationId": "add_urls",
        "summary": "Add URLs to a project",
        "x-payment-info": {
          "offers": [
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "999",
              "currency": "usd",
              "description": "basic pack: 150 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "2999",
              "currency": "usd",
              "description": "pro pack: 500 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "5999",
              "currency": "usd",
              "description": "premium pack: 1100 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "14999",
              "currency": "usd",
              "description": "agency pack: 3000 credits, spent by this call (buy with buy_credits when the balance is short)"
            }
          ]
        },
        "description": "Adds URLs to an existing indexing project. They are sent with the project's settings (mode, search engines, drip feed from now) and spend credits at once. URLs already in the project are skipped and cost nothing. A finished project becomes active again. Up to 10,000 URLs per call, 50,000 per project.\n\nScope: `index`.\n\nNeeds an account with at least one paid order.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "description": "A project id, as returned by submit_urls, check_urls or list_projects."
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "description": "Retry-safe key: a retry with the same key returns the first response and spends nothing twice. Kept 24 hours."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "urls": {
                    "minItems": 1,
                    "maxItems": 20000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 4096
                    },
                    "description": "Absolute http(s) URLs, up to 10,000 after duplicates and invalid entries are removed."
                  }
                },
                "required": [
                  "urls"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Add URLs to a project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "project": {
                      "type": "object",
                      "properties": {
                        "object": {
                          "type": "string",
                          "const": "project"
                        },
                        "id": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "index",
                            "check"
                          ],
                          "description": "index: an indexing project. check: URLs only looked up in Google (index checker)."
                        },
                        "name": {
                          "type": "string"
                        },
                        "mode": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "standard",
                                "instant"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Indexing mode; null for checks."
                        },
                        "engines": {
                          "type": "object",
                          "properties": {
                            "google": {
                              "type": "boolean"
                            },
                            "bing": {
                              "type": "boolean"
                            },
                            "yandex": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "google",
                            "bing",
                            "yandex"
                          ],
                          "additionalProperties": false
                        },
                        "drip_days": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "completed"
                          ]
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "total": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "waiting": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Scheduled (drip feed) or queued, not sent yet."
                            },
                            "checking": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Sent, waiting for a Google check."
                            },
                            "indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "not_indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Not indexed at the final check: their credits went back."
                            },
                            "failed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Rejected or cancelled before sending: their credits went back."
                            }
                          },
                          "required": [
                            "total",
                            "waiting",
                            "checking",
                            "indexed",
                            "not_indexed",
                            "failed"
                          ],
                          "additionalProperties": false
                        },
                        "index_rate": {
                          "description": "Percent of decided URLs that are indexed; null until one is decided.",
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "credits_spent": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "credits_returned": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "created_at": {
                          "type": "string",
                          "description": "ISO 8601, UTC"
                        },
                        "completed_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "description": "ISO 8601, UTC"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "dashboard_url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "object",
                        "id",
                        "kind",
                        "name",
                        "mode",
                        "engines",
                        "drip_days",
                        "status",
                        "counts",
                        "index_rate",
                        "credits_spent",
                        "credits_returned",
                        "created_at",
                        "completed_at",
                        "dashboard_url"
                      ],
                      "additionalProperties": false
                    },
                    "urls_added": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "already_in_project": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "URLs skipped because the project already has them. Nothing is spent on them."
                    },
                    "invalid": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "duplicates": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "invalid_examples": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Up to 10 entries that aren't indexable URLs."
                    },
                    "credits_spent": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "balance": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "project",
                    "urls_added",
                    "already_in_project",
                    "invalid",
                    "duplicates",
                    "invalid_examples",
                    "credits_spent",
                    "balance"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: buy credits first (payment_required) or top up (insufficient_credits).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found on this account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "index"
            ]
          }
        ],
        "x-mcp-tool": "add_urls"
      }
    },
    "/checks": {
      "post": {
        "operationId": "check_urls",
        "summary": "Check if URLs are indexed",
        "x-payment-info": {
          "offers": [
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "999",
              "currency": "usd",
              "description": "basic pack: 150 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "2999",
              "currency": "usd",
              "description": "pro pack: 500 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "5999",
              "currency": "usd",
              "description": "premium pack: 1100 credits, spent by this call (buy with buy_credits when the balance is short)"
            },
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "14999",
              "currency": "usd",
              "description": "agency pack: 3000 credits, spent by this call (buy with buy_credits when the balance is short)"
            }
          ]
        },
        "description": "The index checker: looks each URL up in Google without sending anything. 10 URLs per credit (rounded up). Results usually arrive within the hour; read them with get_project and list_links.\n\nScope: `index`.\n\nNeeds an account with at least one paid order.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "description": "Retry-safe key: a retry with the same key returns the first response and spends nothing twice. Kept 24 hours."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "urls": {
                    "minItems": 1,
                    "maxItems": 20000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 4096
                    },
                    "description": "Absolute http(s) URLs, up to 10,000 after duplicates and invalid entries are removed."
                  },
                  "name": {
                    "description": "Name for this check.",
                    "type": "string",
                    "maxLength": 120
                  }
                },
                "required": [
                  "urls"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Check if URLs are indexed",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "project": {
                      "type": "object",
                      "properties": {
                        "object": {
                          "type": "string",
                          "const": "project"
                        },
                        "id": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "index",
                            "check"
                          ],
                          "description": "index: an indexing project. check: URLs only looked up in Google (index checker)."
                        },
                        "name": {
                          "type": "string"
                        },
                        "mode": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "standard",
                                "instant"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Indexing mode; null for checks."
                        },
                        "engines": {
                          "type": "object",
                          "properties": {
                            "google": {
                              "type": "boolean"
                            },
                            "bing": {
                              "type": "boolean"
                            },
                            "yandex": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "google",
                            "bing",
                            "yandex"
                          ],
                          "additionalProperties": false
                        },
                        "drip_days": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "completed"
                          ]
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "total": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "waiting": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Scheduled (drip feed) or queued, not sent yet."
                            },
                            "checking": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Sent, waiting for a Google check."
                            },
                            "indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "not_indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Not indexed at the final check: their credits went back."
                            },
                            "failed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Rejected or cancelled before sending: their credits went back."
                            }
                          },
                          "required": [
                            "total",
                            "waiting",
                            "checking",
                            "indexed",
                            "not_indexed",
                            "failed"
                          ],
                          "additionalProperties": false
                        },
                        "index_rate": {
                          "description": "Percent of decided URLs that are indexed; null until one is decided.",
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "credits_spent": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "credits_returned": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "created_at": {
                          "type": "string",
                          "description": "ISO 8601, UTC"
                        },
                        "completed_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "description": "ISO 8601, UTC"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "dashboard_url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "object",
                        "id",
                        "kind",
                        "name",
                        "mode",
                        "engines",
                        "drip_days",
                        "status",
                        "counts",
                        "index_rate",
                        "credits_spent",
                        "credits_returned",
                        "created_at",
                        "completed_at",
                        "dashboard_url"
                      ],
                      "additionalProperties": false
                    },
                    "urls_accepted": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "invalid": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "duplicates": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "invalid_examples": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Up to 10 entries that aren't indexable URLs."
                    },
                    "credits_spent": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "balance": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "project",
                    "urls_accepted",
                    "invalid",
                    "duplicates",
                    "invalid_examples",
                    "credits_spent",
                    "balance"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: buy credits first (payment_required) or top up (insufficient_credits).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "index"
            ]
          }
        ],
        "x-mcp-tool": "check_urls"
      }
    },
    "/projects/{project_id}": {
      "get": {
        "operationId": "get_project",
        "summary": "Get project",
        "description": "One project or check: live counts per status, index rate, credits spent and returned.\n\nScope: `read`.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "description": "A project id, as returned by submit_urls, check_urls or list_projects."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "project": {
                      "type": "object",
                      "properties": {
                        "object": {
                          "type": "string",
                          "const": "project"
                        },
                        "id": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "index",
                            "check"
                          ],
                          "description": "index: an indexing project. check: URLs only looked up in Google (index checker)."
                        },
                        "name": {
                          "type": "string"
                        },
                        "mode": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "standard",
                                "instant"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Indexing mode; null for checks."
                        },
                        "engines": {
                          "type": "object",
                          "properties": {
                            "google": {
                              "type": "boolean"
                            },
                            "bing": {
                              "type": "boolean"
                            },
                            "yandex": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "google",
                            "bing",
                            "yandex"
                          ],
                          "additionalProperties": false
                        },
                        "drip_days": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "completed"
                          ]
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "total": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "waiting": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Scheduled (drip feed) or queued, not sent yet."
                            },
                            "checking": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Sent, waiting for a Google check."
                            },
                            "indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "not_indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Not indexed at the final check: their credits went back."
                            },
                            "failed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Rejected or cancelled before sending: their credits went back."
                            }
                          },
                          "required": [
                            "total",
                            "waiting",
                            "checking",
                            "indexed",
                            "not_indexed",
                            "failed"
                          ],
                          "additionalProperties": false
                        },
                        "index_rate": {
                          "description": "Percent of decided URLs that are indexed; null until one is decided.",
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "credits_spent": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "credits_returned": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "created_at": {
                          "type": "string",
                          "description": "ISO 8601, UTC"
                        },
                        "completed_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "description": "ISO 8601, UTC"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "dashboard_url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "object",
                        "id",
                        "kind",
                        "name",
                        "mode",
                        "engines",
                        "drip_days",
                        "status",
                        "counts",
                        "index_rate",
                        "credits_spent",
                        "credits_returned",
                        "created_at",
                        "completed_at",
                        "dashboard_url"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "project"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found on this account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "read"
            ]
          }
        ],
        "x-mcp-tool": "get_project"
      },
      "patch": {
        "operationId": "rename_project",
        "summary": "Rename project",
        "description": "Changes a project's or check's name.\n\nScope: `index`.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "description": "A project id, as returned by submit_urls, check_urls or list_projects."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rename project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "project": {
                      "type": "object",
                      "properties": {
                        "object": {
                          "type": "string",
                          "const": "project"
                        },
                        "id": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "index",
                            "check"
                          ],
                          "description": "index: an indexing project. check: URLs only looked up in Google (index checker)."
                        },
                        "name": {
                          "type": "string"
                        },
                        "mode": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "standard",
                                "instant"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Indexing mode; null for checks."
                        },
                        "engines": {
                          "type": "object",
                          "properties": {
                            "google": {
                              "type": "boolean"
                            },
                            "bing": {
                              "type": "boolean"
                            },
                            "yandex": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "google",
                            "bing",
                            "yandex"
                          ],
                          "additionalProperties": false
                        },
                        "drip_days": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "completed"
                          ]
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "total": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "waiting": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Scheduled (drip feed) or queued, not sent yet."
                            },
                            "checking": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Sent, waiting for a Google check."
                            },
                            "indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "not_indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Not indexed at the final check: their credits went back."
                            },
                            "failed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Rejected or cancelled before sending: their credits went back."
                            }
                          },
                          "required": [
                            "total",
                            "waiting",
                            "checking",
                            "indexed",
                            "not_indexed",
                            "failed"
                          ],
                          "additionalProperties": false
                        },
                        "index_rate": {
                          "description": "Percent of decided URLs that are indexed; null until one is decided.",
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "credits_spent": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "credits_returned": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "created_at": {
                          "type": "string",
                          "description": "ISO 8601, UTC"
                        },
                        "completed_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "description": "ISO 8601, UTC"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "dashboard_url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "object",
                        "id",
                        "kind",
                        "name",
                        "mode",
                        "engines",
                        "drip_days",
                        "status",
                        "counts",
                        "index_rate",
                        "credits_spent",
                        "credits_returned",
                        "created_at",
                        "completed_at",
                        "dashboard_url"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "project"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found on this account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "index"
            ]
          }
        ],
        "x-mcp-tool": "rename_project"
      }
    },
    "/projects/{project_id}/links": {
      "get": {
        "operationId": "list_links",
        "summary": "List a project's URLs",
        "description": "The URLs of a project with their status (scheduled, queued, pushed, sent, indexed, not_indexed, failed), dates and next check. Filter by group and search by text; paginated.\n\nScope: `read`.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "description": "A project id, as returned by submit_urls, check_urls or list_projects."
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "default": "all",
              "description": "all, indexed, checking (sent, not checked yet), waiting (not sent yet), not_indexed, failed.",
              "type": "string",
              "enum": [
                "all",
                "indexed",
                "checking",
                "waiting",
                "not_indexed",
                "failed"
              ]
            },
            "description": "all, indexed, checking (sent, not checked yet), waiting (not sent yet), not_indexed, failed."
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "description": "Only URLs containing this text.",
              "type": "string",
              "maxLength": 200
            },
            "description": "Only URLs containing this text."
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "default": 1,
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "default": 100,
              "type": "integer",
              "minimum": 1,
              "maximum": 500
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List a project's URLs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "scheduled",
                              "queued",
                              "pushed",
                              "sent",
                              "indexed",
                              "not_indexed",
                              "failed"
                            ]
                          },
                          "credits": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "release_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "description": "ISO 8601, UTC"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Drip feed: when the URL is due to be sent."
                          },
                          "sent_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "description": "ISO 8601, UTC"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "When Google got the URL."
                          },
                          "bing_sent_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "description": "ISO 8601, UTC"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "When Bing got the URL. Null while queued, or when Bing was not requested."
                          },
                          "yandex_sent_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "description": "ISO 8601, UTC"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "When Yandex got the URL. Null while queued, or when Yandex was not requested."
                          },
                          "last_checked_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "description": "ISO 8601, UTC"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "next_check_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "description": "ISO 8601, UTC"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "indexed_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "description": "ISO 8601, UTC"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "credits_returned": {
                            "type": "boolean"
                          },
                          "error": {
                            "anyOf": [
                              {
                                "type": "string",
                                "enum": [
                                  "rejected",
                                  "cancelled",
                                  "no_answer",
                                  "error"
                                ]
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "url",
                          "status",
                          "credits",
                          "release_at",
                          "sent_at",
                          "bing_sent_at",
                          "yandex_sent_at",
                          "last_checked_at",
                          "next_check_at",
                          "indexed_at",
                          "credits_returned",
                          "error"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "page": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "pages": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "total": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "per_page": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "links",
                    "page",
                    "pages",
                    "total",
                    "per_page"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found on this account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "read"
            ]
          }
        ],
        "x-mcp-tool": "list_links"
      }
    },
    "/projects/{project_id}/cancel": {
      "post": {
        "operationId": "cancel_pending_links",
        "summary": "Cancel unsent URLs",
        "description": "Takes the URLs of a project that haven't been sent yet (drip feed or queue) out, and returns their credits. URLs already sent are not affected.\n\nScope: `index`.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36,
              "description": "A project id, as returned by submit_urls, check_urls or list_projects."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Cancel unsent URLs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "removed": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "credits_returned": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "balance": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "project": {
                      "type": "object",
                      "properties": {
                        "object": {
                          "type": "string",
                          "const": "project"
                        },
                        "id": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "index",
                            "check"
                          ],
                          "description": "index: an indexing project. check: URLs only looked up in Google (index checker)."
                        },
                        "name": {
                          "type": "string"
                        },
                        "mode": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "standard",
                                "instant"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Indexing mode; null for checks."
                        },
                        "engines": {
                          "type": "object",
                          "properties": {
                            "google": {
                              "type": "boolean"
                            },
                            "bing": {
                              "type": "boolean"
                            },
                            "yandex": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "google",
                            "bing",
                            "yandex"
                          ],
                          "additionalProperties": false
                        },
                        "drip_days": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "completed"
                          ]
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "total": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "waiting": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Scheduled (drip feed) or queued, not sent yet."
                            },
                            "checking": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Sent, waiting for a Google check."
                            },
                            "indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "not_indexed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Not indexed at the final check: their credits went back."
                            },
                            "failed": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "Rejected or cancelled before sending: their credits went back."
                            }
                          },
                          "required": [
                            "total",
                            "waiting",
                            "checking",
                            "indexed",
                            "not_indexed",
                            "failed"
                          ],
                          "additionalProperties": false
                        },
                        "index_rate": {
                          "description": "Percent of decided URLs that are indexed; null until one is decided.",
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "credits_spent": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "credits_returned": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "created_at": {
                          "type": "string",
                          "description": "ISO 8601, UTC"
                        },
                        "completed_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "description": "ISO 8601, UTC"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "dashboard_url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "object",
                        "id",
                        "kind",
                        "name",
                        "mode",
                        "engines",
                        "drip_days",
                        "status",
                        "counts",
                        "index_rate",
                        "credits_spent",
                        "credits_returned",
                        "created_at",
                        "completed_at",
                        "dashboard_url"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "removed",
                    "credits_returned",
                    "balance",
                    "project"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found on this account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "index"
            ]
          }
        ],
        "x-mcp-tool": "cancel_pending_links"
      }
    },
    "/sitemaps/read": {
      "post": {
        "operationId": "read_sitemap",
        "summary": "Read a sitemap",
        "description": "Lists the page URLs in an XML sitemap (or sitemap index) without submitting anything. To index a whole sitemap in one step, use submit_sitemap.\n\nScope: `index`.",
        "tags": [
          "Sitemaps"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "maxLength": 2048,
                    "description": "Absolute URL of the sitemap."
                  },
                  "limit": {
                    "default": 1000,
                    "description": "Most URLs to return.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10000
                  }
                },
                "required": [
                  "url"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Read a sitemap",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "urls": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "count": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "returned": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "sitemaps": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "truncated": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "urls",
                    "count",
                    "returned",
                    "sitemaps",
                    "truncated"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "index"
            ]
          }
        ],
        "x-mcp-tool": "read_sitemap"
      }
    },
    "/checkout": {
      "post": {
        "operationId": "buy_credits",
        "summary": "Buy credits",
        "description": "Creates a secure Stripe checkout link for a credit pack. Give checkout_url to the account owner to pay by card; credits arrive the moment they pay. Poll get_order to know when. Prices are final: nothing is added at checkout.\n\nScope: `purchase`.",
        "tags": [
          "Billing"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "description": "Retry-safe key: a retry with the same key returns the first response and spends nothing twice. Kept 24 hours."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "pack": {
                    "type": "string",
                    "enum": [
                      "basic",
                      "pro",
                      "premium",
                      "agency"
                    ],
                    "description": "Credit pack: basic ($9.99, 150 credits), pro ($29.99, 500 credits), premium ($59.99, 1,100 credits), agency ($149.99, 3,000 credits)."
                  },
                  "locale": {
                    "description": "Language of the checkout page. Defaults to the account's language.",
                    "type": "string",
                    "enum": [
                      "en",
                      "fr",
                      "it",
                      "de",
                      "es"
                    ]
                  }
                },
                "required": [
                  "pack"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Buy credits",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "order": {
                      "type": "object",
                      "properties": {
                        "object": {
                          "type": "string",
                          "const": "order"
                        },
                        "id": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "pending",
                            "paid",
                            "failed",
                            "expired",
                            "refunded"
                          ]
                        },
                        "pack": {
                          "type": "string"
                        },
                        "credits": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "amount_cents": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "amount": {
                          "type": "string"
                        },
                        "currency": {
                          "type": "string"
                        },
                        "provider": {
                          "type": "string",
                          "enum": [
                            "stripe",
                            "x402"
                          ]
                        },
                        "created_at": {
                          "type": "string",
                          "description": "ISO 8601, UTC"
                        },
                        "paid_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "description": "ISO 8601, UTC"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "object",
                        "id",
                        "status",
                        "pack",
                        "credits",
                        "amount_cents",
                        "amount",
                        "currency",
                        "provider",
                        "created_at",
                        "paid_at"
                      ],
                      "additionalProperties": false
                    },
                    "checkout_url": {
                      "type": "string",
                      "description": "Stripe-hosted payment page. Only a person can complete it."
                    },
                    "expires_at": {
                      "type": "string",
                      "description": "ISO 8601, UTC"
                    },
                    "order_url": {
                      "type": "string",
                      "description": "API URL to poll the order's status."
                    }
                  },
                  "required": [
                    "order",
                    "checkout_url",
                    "expires_at",
                    "order_url"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "purchase"
            ]
          }
        ],
        "x-mcp-tool": "buy_credits"
      }
    },
    "/orders/{order_id}": {
      "get": {
        "operationId": "get_order",
        "summary": "Get order",
        "description": "A credit purchase: pending until the person pays, then paid (credits added). Use it to wait for a checkout link to be paid.\n\nScope: `read`.",
        "tags": [
          "Billing"
        ],
        "parameters": [
          {
            "name": "order_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 36
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "order": {
                      "type": "object",
                      "properties": {
                        "object": {
                          "type": "string",
                          "const": "order"
                        },
                        "id": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "pending",
                            "paid",
                            "failed",
                            "expired",
                            "refunded"
                          ]
                        },
                        "pack": {
                          "type": "string"
                        },
                        "credits": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "amount_cents": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "amount": {
                          "type": "string"
                        },
                        "currency": {
                          "type": "string"
                        },
                        "provider": {
                          "type": "string",
                          "enum": [
                            "stripe",
                            "x402"
                          ]
                        },
                        "created_at": {
                          "type": "string",
                          "description": "ISO 8601, UTC"
                        },
                        "paid_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "description": "ISO 8601, UTC"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "object",
                        "id",
                        "status",
                        "pack",
                        "credits",
                        "amount_cents",
                        "amount",
                        "currency",
                        "provider",
                        "created_at",
                        "paid_at"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "order"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not found on this account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "read"
            ]
          }
        ],
        "x-mcp-tool": "get_order"
      }
    },
    "/orders": {
      "get": {
        "operationId": "list_orders",
        "summary": "List orders",
        "description": "Credit purchases on this account, newest first (paid, refunded, and checkouts still open).\n\nScope: `read`.",
        "tags": [
          "Billing"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List orders",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "orders": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "object": {
                            "type": "string",
                            "const": "order"
                          },
                          "id": {
                            "type": "string"
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "pending",
                              "paid",
                              "failed",
                              "expired",
                              "refunded"
                            ]
                          },
                          "pack": {
                            "type": "string"
                          },
                          "credits": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "amount_cents": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "amount": {
                            "type": "string"
                          },
                          "currency": {
                            "type": "string"
                          },
                          "provider": {
                            "type": "string",
                            "enum": [
                              "stripe",
                              "x402"
                            ]
                          },
                          "created_at": {
                            "type": "string",
                            "description": "ISO 8601, UTC"
                          },
                          "paid_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "description": "ISO 8601, UTC"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "object",
                          "id",
                          "status",
                          "pack",
                          "credits",
                          "amount_cents",
                          "amount",
                          "currency",
                          "provider",
                          "created_at",
                          "paid_at"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "orders"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "read"
            ]
          }
        ],
        "x-mcp-tool": "list_orders"
      }
    },
    "/credits/history": {
      "get": {
        "operationId": "get_credit_history",
        "summary": "Credit history",
        "description": "Every change to the balance, newest first: purchases, credits spent on projects, credits back for URLs not indexed, refunds.\n\nScope: `read`.",
        "tags": [
          "Billing"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Credit history",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "entries": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "delta": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "balance": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "reason": {
                            "type": "string",
                            "enum": [
                              "purchase",
                              "spend",
                              "credit_back",
                              "failed",
                              "refund",
                              "adjustment",
                              "bonus"
                            ]
                          },
                          "project_id": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "order_id": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "created_at": {
                            "type": "string",
                            "description": "ISO 8601, UTC"
                          }
                        },
                        "required": [
                          "delta",
                          "balance",
                          "reason",
                          "project_id",
                          "order_id",
                          "created_at"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "entries"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "The credential lacks the scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or daily quota reached. See Retry-After.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer": []
          },
          {
            "apiKey": []
          },
          {
            "oauth2": [
              "read"
            ]
          }
        ],
        "x-mcp-tool": "get_credit_history"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearer": {
        "type": "http",
        "scheme": "bearer",
        "description": "An API key (ipk_...) or an OAuth access token."
      },
      "apiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "The same API key, in its own header."
      },
      "oauth2": {
        "type": "oauth2",
        "description": "Authorization code with PKCE (S256). Clients register themselves at the registration endpoint (RFC 7591).",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://indexerpal.com/oauth/authorize",
            "tokenUrl": "https://indexerpal.com/oauth/token",
            "refreshUrl": "https://indexerpal.com/oauth/token",
            "scopes": {
              "read": "See your balance, projects, link statuses, orders and usage.",
              "index": "Create indexing projects and index checks (spends credits), cancel unsent links, read sitemaps.",
              "purchase": "Start credit purchases: checkout links for a person to pay, or direct payments where enabled."
            }
          }
        }
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "Stable machine-readable code, e.g. insufficient_credits."
              },
              "message": {
                "type": "string",
                "description": "What happened and what to do, for a person or an agent."
              },
              "docs": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        }
      }
    }
  },
  "x-service-info": {
    "name": "IndexerPal",
    "categories": [
      "seo",
      "indexing",
      "web-crawling",
      "developer-tools"
    ],
    "docs": {
      "homepage": "https://indexerpal.com",
      "apiReference": "https://indexerpal.com/developers/api",
      "llms": "https://indexerpal.com/llms.txt"
    },
    "mcp": "https://indexerpal.com/mcp"
  }
}