{
  "openapi": "3.1.0",
  "x-zeroclick-navigation": {
    "fullSpec": "https://zeroclick.keenable.ai/openapi.json",
    "services": "https://zeroclick.keenable.ai/services",
    "serviceSpecTemplate": "https://zeroclick.keenable.ai/services/{slug}/openapi.json",
    "searchTemplate": "https://zeroclick.keenable.ai/openapi.json?q={text}",
    "operationTemplate": "https://zeroclick.keenable.ai/openapi.json?path={path}&method={method}",
    "firstPage": "https://zeroclick.keenable.ai/openapi.json?page=1",
    "instructions": [
      "Use this spec if it contains the operation and details you need. Otherwise, search or open a relevant service spec using the links below.",
      "Find service slugs in x-zeroclick-services or x-payment-info.rates[].service; use them in serviceSpecTemplate, never as request values.",
      "URL-encode template values. Search is ranked; service, path, and method filters are exact. Filters combine.",
      "Pages contain up to 10 operations; follow info.x-next or the Link header if you need more results. Shared operations retain all selector values."
    ]
  },
  "info": {
    "title": "Keenable",
    "version": "1.0.0",
    "description": "Keenable is independent web search for AI agents, built on its own crawler, index and ranking. Web Search returns ranked results with snippets and publish and index dates, with site and date filters and point-in-time search. Page Fetch returns a web page as clean markdown with its title, author and publish date, from the index or live from the source. Each call is one request. This server is a transparent proxy in front of Keenable's own API that sells access on plans (credit or subscription) rather than per call: it handles identity, payment, and proxying. Agents can purchase autonomously or with their human's approval. The complete verified paid surface is listed at /openapi.json, the source of truth for available operations. Each operation here carries its pricing in x-payment-info. Use the operations and details here when they meet your needs. Filtered specs contain only matching operations; if you cannot find what you need here, use search or the service catalog. The live catalog at /manifest.json is authoritative for prices and any free included units (prices[].includedUnits) - some meters include free usage per account before any charge, reserved for agents claimed by a human with a verified email.",
    "contact": {
      "email": "support@keenable.ai"
    },
    "x-guidance": "Start with the free seller advisor: POST https://zeroclick.keenable.ai/zeroclick/agent/quote with your goal and known budget or requirements. This operation costs $0 and requires only an x402 or MPP wallet proof; it returns a guide and never executes a purchase. Without a wallet, GET https://zeroclick.keenable.ai/zeroclick/agent/guide?goal=URL_ENCODED_TASK or POST to that guide. Other operations below are the direct API reference; their own prices and access requirements still apply. Call the operations listed in this document at https://zeroclick.keenable.ai. Each service's full price matrix, plans, and how to buy are at https://zeroclick.keenable.ai/services/{slug}; each operation's x-payment-info names the service it bills by slug (rates[].service). Slugs identify services in prices and usage reports and are never request values: when one operation serves several services, its request body schema lists the accepted values of the field that selects the service, so send one of those exactly as written. Calls here are sold on plans, not per call: an unidentified call returns 401 bearer_required with a registration recipe, never a per-call 402. Reuse your existing agent identity; register only if new (anonymous registration is one free API call; the recipe is at https://zeroclick.keenable.ai/auth.md), buy a plan at POST https://zeroclick.keenable.ai/plans/{planId}/purchase (its priced 402 settles with a supported payment method - x402 (Base USDC) or MPP (Tempo USDC) today - or by card), then retry with Authorization: Bearer <token>. No upstream API key is needed. Read GET https://zeroclick.keenable.ai/manifest.json for the live services, meters, plans, and prices, and https://zeroclick.keenable.ai/llms-full.txt for the full agent guide."
  },
  "x-service-info": {
    "categories": [
      "search",
      "web"
    ],
    "docs": {
      "homepage": "https://keenable.ai",
      "apiReference": "https://zeroclick.keenable.ai/openapi.json",
      "llms": "https://zeroclick.keenable.ai/llms.txt"
    }
  },
  "externalDocs": {
    "url": "https://zeroclick.keenable.ai/llms-full.txt",
    "description": "How to authenticate, pay, and call this API; links the upstream API reference."
  },
  "servers": [
    {
      "url": "https://zeroclick.keenable.ai",
      "description": "Plan-based access to Keenable's API"
    }
  ],
  "security": [
    {
      "planAccess": []
    }
  ],
  "components": {
    "securitySchemes": {
      "planAccess": {
        "type": "http",
        "scheme": "bearer",
        "description": "Plan access. Calls are sold on plans (credit or subscription), not per call: an unidentified call returns 401 bearer_required with a registration recipe, and an identified call with no covering plan returns 403 plan_required listing the plans that cover it. Reuse your existing agent identity; register only if new (anonymous registration is one free API call; the recipe is at https://zeroclick.keenable.ai/auth.md), buy a plan at POST https://zeroclick.keenable.ai/plans/{planId}/purchase (its priced 402 settles with a supported payment method - x402 or MPP today - or by card), then retry with the access token as Authorization: Bearer <token>. No upstream API key is needed."
      },
      "sellerAgentX402": {
        "type": "apiKey",
        "in": "header",
        "name": "Payment-Signature",
        "description": "Signed $0 x402 proof from the 402 challenge"
      },
      "sellerAgentMpp": {
        "type": "http",
        "scheme": "Payment",
        "description": "Signed $0 MPP proof from the 402 challenge"
      }
    },
    "schemas": {
      "sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref0": {
        "type": "object",
        "required": [
          "url",
          "content"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "Fetched URL (may differ from input after redirects)"
          },
          "title": {
            "type": "string",
            "description": "Page title"
          },
          "author": {
            "type": "string",
            "description": "Author name"
          },
          "content": {
            "type": "string",
            "description": "Extracted content in markdown"
          },
          "description": {
            "type": "string",
            "deprecated": true,
            "description": "Always empty. Deprecated."
          },
          "published_at": {
            "type": "string",
            "description": "Publish date (ISO 8601)"
          }
        }
      },
      "sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref1": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref2"
            }
          }
        },
        "description": "Invalid request parameters, or a request the organization's zero data retention policy does not allow (error zdr_wizards_unsupported, zdr_unsupported_profile or zdr_prompt_unsupported)"
      },
      "sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref2": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Error category (e.g. \"Bad request\", \"Not found\")"
          },
          "details": {
            "description": "Structured details (validation errors, etc.)"
          },
          "message": {
            "type": "string",
            "description": "Human-readable detail about what went wrong"
          }
        }
      },
      "sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref0": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "mode": {
            "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref1"
          },
          "site": {
            "type": "string",
            "description": "Restrict results to a specific domain"
          },
          "query": {
            "type": "string",
            "description": "Search query"
          },
          "query_time": {
            "type": "string",
            "description": "Leave empty for a normal search. An upper time bound for a point-in-time search: the web as it stood at this moment, with every page newer than it excluded. It sets no lower bound, so this is not a recency filter; for recent results use published_after. Accepts an ISO 8601 datetime (e.g. \"2026-09-20T00:00:00Z\"), a YYYY-MM-DD date, a Unix epoch, or an offset back from now (\"7d\" means as of 7 days ago, not the last 7 days). Units: min, h, d, w, mo, y."
          },
          "max_results": {
            "type": "integer",
            "maximum": 50,
            "minimum": 1,
            "description": "Maximum number of results to return. When omitted, a default count (10) is used."
          },
          "acquired_after": {
            "type": "string",
            "description": "Filter: pages acquired after this date (YYYY-MM-DD, ISO 8601, or relative like \"7d\")"
          },
          "enable_wizards": {
            "type": "boolean",
            "default": false,
            "description": "Experimental: use wizards (structured data outputs). Only valid in \"pro\" mode. Not available to an organization under a zero data retention policy: the request is refused with 400 zdr_wizards_unsupported."
          },
          "acquired_before": {
            "type": "string",
            "description": "Filter: pages acquired before this date"
          },
          "published_after": {
            "type": "string",
            "description": "Filter: pages published after this date, a lower bound on publish time. Use this, not query_time, to get recent results."
          },
          "published_before": {
            "type": "string",
            "description": "Filter: pages published before this date"
          },
          "snippet_max_length": {
            "type": "integer",
            "maximum": 10000,
            "minimum": 180,
            "description": "Maximum length, in characters, of the snippet returned per result. When omitted, a default snippet length is used."
          }
        }
      },
      "sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref1": {
        "enum": [
          "pro"
        ],
        "type": "string",
        "default": "pro",
        "description": "Retrieval mode; \"pro\" is the default"
      },
      "sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref2": {
        "type": "object",
        "required": [
          "query",
          "mode",
          "results"
        ],
        "properties": {
          "mode": {
            "type": "string",
            "description": "Search mode used"
          },
          "query": {
            "type": "string",
            "description": "Echo of the search query"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref3"
            }
          },
          "warning": {
            "type": "string",
            "description": "Present when the request was not answered as a plain search. Either the query was a URL, so the page was fetched directly, or the query carried only a site: operator with no search terms, so the site name was used as the search term. It also says when wizards that the organization's settings turn on were left out because its zero data retention policy does not allow them."
          },
          "wizards": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "wizard"
              ],
              "properties": {
                "wizard": {
                  "type": "string",
                  "description": "Wizard type, e.g. finance, sports, product_prices, prediction_markets, places, navigation"
                }
              },
              "additionalProperties": true
            },
            "description": "Experimental: structured data from wizards. Present only when enable_wizards is true and a wizard matched the query. The fields of each item depend on its wizard type."
          }
        }
      },
      "sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref3": {
        "type": "object",
        "required": [
          "title",
          "url",
          "description"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "Page URL"
          },
          "title": {
            "type": "string",
            "description": "Page title"
          },
          "snippet": {
            "type": "string",
            "description": "Search snippet with query-relevant highlights; falls back to the page description"
          },
          "acquired_at": {
            "type": "string",
            "description": "When the page was indexed (ISO 8601)"
          },
          "description": {
            "type": "string",
            "deprecated": true,
            "description": "Always empty. Deprecated — the page description now feeds the snippet fallback."
          },
          "published_at": {
            "type": "string",
            "description": "When the page was published (ISO 8601)"
          }
        }
      },
      "sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref4": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref5"
            }
          }
        },
        "description": "Invalid request parameters, or a request the organization's zero data retention policy does not allow (error zdr_wizards_unsupported, zdr_unsupported_profile or zdr_prompt_unsupported)"
      },
      "sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref5": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Error category (e.g. \"Bad request\", \"Not found\")"
          },
          "details": {
            "description": "Structured details (validation errors, etc.)"
          },
          "message": {
            "type": "string",
            "description": "Human-readable detail about what went wrong"
          }
        }
      },
      "sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref6": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref5"
            }
          }
        },
        "description": "Rate limit exceeded — slow down or upgrade your plan"
      },
      "sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref7": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref5"
            }
          }
        },
        "description": "Internal server error"
      }
    }
  },
  "paths": {
    "/v1/zeroclick/fetch": {
      "get": {
        "summary": "Fetch page content",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref0",
                  "type": "object",
                  "properties": {
                    "url": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "content": {
                      "type": "string"
                    }
                  }
                }
              }
            },
            "description": "Extracted page content"
          },
          "400": {
            "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref1"
          },
          "401": {
            "description": "Agent identity credential required: register once, then retry with Authorization: Bearer <token>."
          },
          "403": {
            "description": "No active plan covers this call; the body lists the plans that do. Buy one with your bearer, then retry."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref2"
                }
              }
            },
            "description": "The target page does not exist — the target server responded 404."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref2"
                }
              }
            },
            "description": "The page was reached but contains no extractable content."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref2"
                }
              }
            },
            "description": "Rate limited. Either your own quota, or the target server throttled the fetch — see `message`. Honour `Retry-After`."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref2"
                }
              }
            },
            "description": "Internal server error, including a failure inside our own fetcher infrastructure. Not caused by the requested URL; retrying the same URL later is reasonable."
          },
          "502": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref2"
                }
              }
            },
            "description": "The fetcher could not reach the target page (DNS/TLS/connection failure, unreachable host, or a target 5xx). Distinct from 422 — the page was never reached, and from 403 — the target never refused. Often transient; a retry is reasonable."
          },
          "503": {
            "description": "ZeroClick could not confirm the allowance for this call right now. Nothing was charged; retry after the delay in `Retry-After`."
          },
          "504": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_d2af408ccd32af94_ref2"
                }
              }
            },
            "description": "The upstream fetch to the target page timed out."
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "url",
            "schema": {
              "type": "string",
              "format": "uri"
            },
            "required": true,
            "description": "URL of the page to fetch"
          },
          {
            "in": "query",
            "name": "max_chars",
            "schema": {
              "type": "integer",
              "default": 50000,
              "minimum": 1
            },
            "required": false,
            "description": "Maximum number of characters of content to return. Content longer than this is truncated. Defaults to 50000 when omitted."
          },
          {
            "in": "query",
            "name": "live",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "required": false,
            "description": "Fetch live content. Defaults to false."
          },
          {
            "in": "query",
            "name": "prompt",
            "schema": {
              "type": "string",
              "maxLength": 2000
            },
            "required": false,
            "description": "Optional extraction instruction. When set, an LLM reads the fetched page and the returned content is only the output for this instruction instead of the full page. Example: \"List all pricing tiers with their monthly prices\"."
          }
        ],
        "description": "Same fetch as GET /v1/fetch, bought through the Keenable storefront on ZeroClick.",
        "operationId": "zeroclick_fetch",
        "x-zeroclick-document-sources": [
          {
            "gaps": [],
            "pages": [],
            "sourceId": "sds_2qYJNj_gtO_tOj0JLpIMj",
            "authority": "official",
            "conflicts": [],
            "revisionId": "sdrn_htaQoTP_kk0iqbX6rHlqY"
          },
          {
            "gaps": [
              "The documentation describes MCP tool interfaces; the provided path /v1/zeroclick/fetch is not explicitly documented as a REST endpoint in the provided text."
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_mAoZanrDvLkMKghqTPuJD",
            "authority": "supplemental",
            "conflicts": [
              "/responses/200/description",
              "/description",
              "/operationId"
            ],
            "revisionId": "sdrn_LowAMz-Il226uErdVXac9"
          }
        ],
        "x-zeroclick-services": [
          "fetch"
        ],
        "x-payment-info": {
          "access": "plan",
          "price": {
            "mode": "dynamic",
            "currency": "USD",
            "min": "4.000000"
          },
          "rates": [
            {
              "service": "fetch",
              "meter": "requests",
              "unit": "request",
              "unitSize": 1000,
              "priceUsd": "4.000000",
              "includedUnits": 0
            }
          ],
          "perCallUsage": [
            {
              "service": "fetch",
              "meter": "requests",
              "quantity": 1
            }
          ]
        },
        "security": [
          {
            "planAccess": []
          }
        ]
      }
    },
    "/v1/zeroclick/search": {
      "post": {
        "summary": "Search the web",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref2"
                }
              }
            },
            "description": "Search results"
          },
          "400": {
            "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref4"
          },
          "401": {
            "description": "Agent identity credential required: register once, then retry with Authorization: Bearer <token>."
          },
          "403": {
            "description": "No active plan covers this call; the body lists the plans that do. Buy one with your bearer, then retry."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref5"
                }
              }
            },
            "description": "Search failed with an unretryable upstream error — see `message`."
          },
          "429": {
            "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref6"
          },
          "500": {
            "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref7"
          },
          "503": {
            "description": "ZeroClick could not confirm the allowance for this call right now. Nothing was charged; retry after the delay in `Retry-After`."
          },
          "529": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref5"
                }
              }
            },
            "description": "Search is temporarily overloaded. Retry after the delay in `Retry-After`."
          }
        },
        "description": "Same search as POST /v1/search, bought through the Keenable storefront on ZeroClick. Also available as GET with the parameters in the query string.",
        "operationId": "zeroclick_search_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/sds_2qYJNj_gtO_tOj0JLpIMj_51eef038dc4257db_ref0",
                "type": "object",
                "properties": {
                  "site": {
                    "type": "string",
                    "description": "Restrict results to a specific site."
                  },
                  "query": {
                    "type": "string",
                    "description": "The search query."
                  },
                  "query_time": {
                    "type": "string",
                    "description": "Search the index as it stood at this point in time."
                  },
                  "max_results": {
                    "type": "integer",
                    "description": "Maximum number of results (1-50)."
                  },
                  "acquired_after": {
                    "type": "string",
                    "description": "Filter to pages acquired/indexed at or after this point in time."
                  },
                  "acquired_before": {
                    "type": "string",
                    "description": "Filter to pages acquired/indexed at or before this point in time."
                  },
                  "published_after": {
                    "type": "string",
                    "description": "Filter to pages published at or after this point in time."
                  },
                  "published_before": {
                    "type": "string",
                    "description": "Filter to pages published at or before this point in time."
                  },
                  "snippet_max_length": {
                    "type": "integer",
                    "description": "Maximum length of the snippet (180-10000)."
                  }
                }
              }
            }
          },
          "required": true
        },
        "x-zeroclick-document-sources": [
          {
            "gaps": [],
            "pages": [],
            "sourceId": "sds_2qYJNj_gtO_tOj0JLpIMj",
            "authority": "official",
            "conflicts": [],
            "revisionId": "sdrn_htaQoTP_kk0iqbX6rHlqY"
          },
          {
            "gaps": [],
            "pages": [
              1
            ],
            "sourceId": "sds_mAoZanrDvLkMKghqTPuJD",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/200/description",
              "/description",
              "/operationId",
              "/requestBody/content/application/json/schema/required"
            ],
            "revisionId": "sdrn_LowAMz-Il226uErdVXac9"
          }
        ],
        "x-zeroclick-services": [
          "search"
        ],
        "x-payment-info": {
          "access": "plan",
          "price": {
            "mode": "dynamic",
            "currency": "USD",
            "min": "4.000000"
          },
          "rates": [
            {
              "service": "search",
              "meter": "requests",
              "unit": "request",
              "unitSize": 1000,
              "priceUsd": "4.000000",
              "includedUnits": 0
            }
          ],
          "perCallUsage": [
            {
              "service": "search",
              "meter": "requests",
              "quantity": 1
            }
          ]
        },
        "security": [
          {
            "planAccess": []
          }
        ]
      }
    },
    "/zeroclick/agent/quote": {
      "post": {
        "operationId": "sellerAgentQuote",
        "summary": "Get a free seller API quote and purchase guide",
        "description": "Describe your task to get the matching API contract, prices, prerequisites and next steps. This is a $0 wallet-proof lookup, not the seller's paid service. No purchase is executed. Without a wallet, use /zeroclick/agent/guide.",
        "servers": [
          {
            "url": "https://zeroclick.keenable.ai"
          }
        ],
        "security": [
          {
            "sellerAgentX402": []
          },
          {
            "sellerAgentMpp": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "goal": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 2000,
                    "description": "Describe the task and known inputs. Do not include credentials."
                  },
                  "quantity": {
                    "description": "Number of API calls, not returned items. Omit when unknown; describe desired output in goal.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 1000000
                  },
                  "budgetUsd": {
                    "description": "Total cash budget in USD. A quote does not authorize spending.",
                    "type": "string",
                    "pattern": "^(0|[1-9]\\d{0,8})(\\.\\d{1,6})?$"
                  },
                  "budgetExclusive": {
                    "type": "boolean"
                  },
                  "reviewAfterCalls": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 1000000
                  },
                  "requirements": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 300
                  },
                  "humanAvailable": {
                    "description": "Whether a human is in the loop. False recommends anonymous auth for a new autonomous identity; omit when unknown. Executing a human's request without further interruptions does not by itself mean false.",
                    "type": "boolean"
                  },
                  "payment": {
                    "description": "Known payment method for the eventual purchase, independent of this free lookup's wallet proof.",
                    "type": "string",
                    "enum": [
                      "x402",
                      "mpp",
                      "card"
                    ]
                  }
                },
                "required": [
                  "goal"
                ],
                "additionalProperties": false
              },
              "example": {
                "goal": "Find the available services, prices and purchase steps"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Task guidance; inspect status before executing anything",
            "content": {
              "application/json": {
                "schema": {
                  "$schema": "https://json-schema.org/draft/2020-12/schema",
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "enum": [
                        "quoted",
                        "ready",
                        "needs_input",
                        "blocked",
                        "unknown",
                        "unsupported",
                        "unavailable"
                      ]
                    },
                    "priceUsd": {
                      "type": "string",
                      "const": "0"
                    },
                    "guide": {
                      "type": "string",
                      "description": "Markdown guidance containing the task result, exact contract, pricing and next steps when available. No purchase is executed."
                    },
                    "guideUrl": {
                      "type": "string",
                      "format": "uri",
                      "description": "Wallet-free advisor endpoint for further planning or recovery."
                    }
                  },
                  "required": [
                    "status",
                    "priceUsd",
                    "guide",
                    "guideUrl"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "402": {
            "description": "$0 x402 or MPP wallet proof required; sign and retry the same request. No funds are transferred."
          },
          "503": {
            "description": "Advisor unavailable; use the wallet-free guide or direct storefront references"
          }
        },
        "x-payment-info": {
          "access": "payg",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0"
          },
          "protocols": [
            {
              "x402": {
                "network": "eip155:8453",
                "scheme": "exact",
                "currency": "USDC"
              }
            },
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "USD"
              }
            }
          ],
          "offers": [
            {
              "amount": "0",
              "currency": "0x20C000000000000000000000b9537d11c60E8b50",
              "method": "tempo",
              "intent": "charge",
              "description": "Free seller advisor lookup"
            }
          ]
        }
      }
    }
  },
  "x-zeroclick-navigation-footer": {
    "instructions": [
      "Use this spec if it contains the operation and details you need. Otherwise, search or open a relevant service spec using the links below.",
      "Find service slugs in x-zeroclick-services or x-payment-info.rates[].service; use them in serviceSpecTemplate, never as request values.",
      "URL-encode template values. Search is ranked; service, path, and method filters are exact. Filters combine.",
      "Pages contain up to 10 operations; follow info.x-next or the Link header if you need more results. Shared operations retain all selector values."
    ],
    "fullSpec": "https://zeroclick.keenable.ai/openapi.json",
    "services": "https://zeroclick.keenable.ai/services",
    "serviceSpecTemplate": "https://zeroclick.keenable.ai/services/{slug}/openapi.json",
    "searchTemplate": "https://zeroclick.keenable.ai/openapi.json?q={text}",
    "operationTemplate": "https://zeroclick.keenable.ai/openapi.json?path={path}&method={method}",
    "firstPage": "https://zeroclick.keenable.ai/openapi.json?page=1"
  }
}
