{"data":{"schema_version":"v1","service":"replynodes-fetcher","version":"dev","documentVersion":"v1","documentHash":"sha256:f8c3e68a45dfe6a26b433a91cec4ac06eb142e9dfb56fb2d208ea0fe5182dfd7","document":{"openapi":"3.0.3","info":{"title":"ReplyNodes Fetcher API","version":"v1","description":"Read-only data APIs for AI agents. Bearer auth. Prepaid credits / free tier.\n\nClick **Authorize** and paste ONLY the API key (no \"Bearer\" prefix) \u2014 Swagger adds it automatically."},"servers":[{"url":"https://api.replynodes.com"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"rn_test_<64hex> or rn_live_<64hex>","description":"API key. Paste the raw key only (e.g. rn_test_...) \u2014 the \"Bearer \" prefix is added automatically."}},"schemas":{"RedditResponse":{"type":"object","additionalProperties":true}}},"security":[{"bearerAuth":[]}],"paths":{"/v1/youtube/search":{"get":{"operationId":"youtube_search","tags":["youtube"],"parameters":[{"name":"term","in":"query","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/video/{id}":{"get":{"operationId":"youtube_video","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/channel/{id}":{"get":{"operationId":"youtube_channel","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/comments/{id}":{"get":{"operationId":"youtube_comments","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/playlist/{id}":{"get":{"operationId":"youtube_playlist","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/related/{id}":{"get":{"operationId":"youtube_related","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/transcript/{id}":{"get":{"operationId":"youtube_transcript","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/fetcher/healthz":{"get":{"summary":"Health check","security":[],"responses":{"200":{"description":"ok"}}}},"/fetcher/readyz":{"get":{"summary":"Readiness (auth/db status)","security":[],"responses":{"200":{"description":"ok"}}}},"/v1/hackernews/capabilities":{"get":{"summary":"List available operations","security":[],"responses":{"200":{"description":"ok"}}}},"/v1/hackernews/stories_top":{"get":{"operationId":"hackernews_stories_top","summary":"Fetch current Hacker News top stories","description":"Fetch current Hacker News top stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_new":{"get":{"operationId":"hackernews_stories_new","summary":"Fetch current Hacker News new stories","description":"Fetch current Hacker News new stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_best":{"get":{"operationId":"hackernews_stories_best","summary":"Fetch current Hacker News best stories","description":"Fetch current Hacker News best stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_ask":{"get":{"operationId":"hackernews_stories_ask","summary":"Fetch current Ask HN stories","description":"Fetch current Ask HN stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_show":{"get":{"operationId":"hackernews_stories_show","summary":"Fetch current Show HN stories","description":"Fetch current Show HN stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_job":{"get":{"operationId":"hackernews_stories_job","summary":"Fetch current Hacker News job postings","description":"Fetch current Hacker News job postings. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/search":{"get":{"operationId":"hackernews_search","summary":"Search Hacker News via Algolia","description":"Search Hacker News via Algolia. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search query.","schema":{"type":"string"}},{"name":"tags","in":"query","required":false,"description":"Algolia HN Search tag filter (e.g. story, comment, ask_hn).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":0}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/item/{id}":{"get":{"operationId":"hackernews_item","summary":"Fetch a single Hacker News item and its comment tree","description":"Fetch a single Hacker News item and its comment tree. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"id","in":"path","required":true,"description":"Hacker News item id.","schema":{"type":"integer"}},{"name":"depth","in":"query","required":false,"description":"Maximum comment-tree depth to resolve; values outside 1..10 are rejected.","schema":{"type":"integer","minimum":1,"maximum":10}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/user/{handle}":{"get":{"operationId":"hackernews_user","summary":"Fetch a public Hacker News user profile","description":"Fetch a public Hacker News user profile. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"handle","in":"path","required":true,"description":"Hacker News username.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/app":{"get":{"operationId":"app","summary":"Look up one public App Store application","description":"Look up one public App Store application. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"Numeric track id; provide this or appId.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"ratings","in":"query","required":false,"description":"Include ratings information.","schema":{"type":"boolean"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/list":{"get":{"operationId":"list","summary":"List applications from an iTunes collection","description":"List applications from an iTunes collection. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"collection","in":"query","required":false,"description":"Provider collection constant.","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Provider category constant.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"num","in":"query","required":false,"description":"Number of applications; values outside 1..200 are rejected.","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"fullDetail","in":"query","required":false,"description":"Request detail enrichment.","schema":{"type":"boolean"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/search":{"get":{"operationId":"search","summary":"Search public App Store applications by term","description":"Search public App Store applications by term. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}},{"name":"num","in":"query","required":false,"description":"Number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"idsOnly","in":"query","required":false,"description":"Return ids without detail lookups.","schema":{"type":"boolean"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/developer":{"get":{"operationId":"developer","summary":"List applications by developer","description":"List applications by developer. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"devId","in":"query","required":true,"description":"public developer identifier.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/privacy":{"get":{"operationId":"privacy","summary":"Read public App Store privacy details","description":"Read public App Store privacy details. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":true,"description":"public application identifier.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/suggest":{"get":{"operationId":"suggest","summary":"Suggest public App Store search terms","description":"Suggest public App Store search terms. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/similar":{"get":{"operationId":"similar","summary":"List apps related to an application","description":"List apps related to an application. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"public application identifier; provide this or appId.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/reviews":{"get":{"operationId":"reviews","summary":"Read a page of public app reviews","description":"Read a page of public app reviews. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"public application identifier; provide this or appId.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Review page; values outside 1..10 are rejected.","schema":{"type":"integer","minimum":1,"maximum":10}},{"name":"sort","in":"query","required":false,"description":"Provider review sort constant.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/ratings":{"get":{"operationId":"ratings","summary":"Read public app ratings","description":"Read public app ratings. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"public application identifier; provide this or appId.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/app_details/{id}":{"get":{"operationId":"googleplay_app_details","summary":"Fetch a single Google Play app's public detail record","description":"Fetch a single Google Play app's public detail record. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/search":{"get":{"operationId":"googleplay_search","summary":"Search public Google Play applications by term","description":"Search public Google Play applications by term. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/similar_apps/{id}":{"get":{"operationId":"googleplay_similar_apps","summary":"Fetch apps similar to a given Google Play package","description":"Fetch apps similar to a given Google Play package. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/permissions/{id}":{"get":{"operationId":"googleplay_permissions","summary":"Fetch a Google Play app's declared permissions","description":"Fetch a Google Play app's declared permissions. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/reviews/{id}":{"get":{"operationId":"googleplay_reviews","summary":"Fetch public reviews for a Google Play app","description":"Fetch public reviews for a Google Play app. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"sort","in":"query","required":false,"description":"Upstream review sort order.","schema":{"type":"integer"}},{"name":"score","in":"query","required":false,"description":"Filter reviews to this star rating (1..5).","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"next_token","in":"query","required":false,"description":"Pagination token from a previous reviews response.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/developer":{"get":{"operationId":"googleplay_developer","summary":"Fetch public apps published by a Google Play developer","description":"Fetch public apps published by a Google Play developer. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"dev_id","in":"query","required":true,"description":"Google Play developer id.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/categories":{"get":{"operationId":"googleplay_categories","summary":"List available Google Play category identifiers","description":"List available Google Play category identifiers. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/category_apps/{category}":{"get":{"operationId":"googleplay_category_apps","summary":"Fetch top public apps in a Google Play category","description":"Fetch top public apps in a Google Play category. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"category","in":"path","required":true,"description":"Google Play category identifier (e.g. GAME, SHOPPING).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/suggest":{"get":{"operationId":"googleplay_suggest","summary":"Fetch Google Play search-term suggestions","description":"Fetch Google Play search-term suggestions. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/availability/{id}":{"get":{"operationId":"googleplay_availability","summary":"Fetch a Google Play app's per-storefront availability","description":"Fetch a Google Play app's per-storefront availability. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"countries","in":"query","required":false,"description":"Comma-separated storefront codes.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/data_safety/{id}":{"get":{"operationId":"googleplay_data_safety","summary":"Fetch a Google Play app's declared data-safety disclosure","description":"Fetch a Google Play app's declared data-safety disclosure. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/web/search":{"get":{"operationId":"web_search","summary":"Search the public web","description":"Search the public web through the normalized Web Search provider contract.","tags":["web_search"],"parameters":[{"name":"text","in":"query","required":true,"description":"Search query text.","schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"description":"Comma-separated search engines.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"region","in":"query","required":false,"description":"Search region.","schema":{"type":"string"}},{"name":"date","in":"query","required":false,"description":"Provider date filter.","schema":{"type":"string"}},{"name":"site","in":"query","required":false,"description":"Restrict results to a site or domain.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"start","in":"query","required":false,"description":"Zero-based result offset.","schema":{"type":"integer","minimum":0}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/scrape":{"get":{"operationId":"webcontext_scrape","summary":"Fetch one URL as clean Markdown","description":"Fetch one URL and return clean, main-content Markdown plus normalized metadata, links, and images. Backed by a privately deployed webclaw-server instance; upstream implementation details are never exposed.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}},{"name":"include_selectors","in":"query","required":false,"description":"Comma-separated CSS selectors to include (e.g. \"article,.content\").","schema":{"type":"string"}},{"name":"exclude_selectors","in":"query","required":false,"description":"Comma-separated CSS selectors to exclude (e.g. \"nav,.sidebar,footer\").","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextScrapeResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/crawl":{"get":{"operationId":"webcontext_crawl","summary":"Crawl same-origin links from a URL","description":"Crawl same-origin links starting from a URL and return normalized page results. max_pages/max_depth are clamped server-side regardless of the requested value.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}},{"name":"max_pages","in":"query","required":false,"description":"Maximum pages to crawl; clamped to 1..50.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"max_depth","in":"query","required":false,"description":"Maximum link depth; clamped to 1..3.","schema":{"type":"integer","minimum":1,"maximum":3}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextCrawlResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/map":{"get":{"operationId":"webcontext_map","summary":"Discover URLs belonging to a site","description":"Discover URLs belonging to a site without extracting page content. Results are deduplicated.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextMapResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/brand":{"get":{"operationId":"webcontext_brand","summary":"Extract public brand identity for a site","description":"Extract logos, colors, fonts, and basic public metadata for a site's brand identity.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextBrandResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/retrieve":{"get":{"operationId":"brand_retrieve","summary":"Retrieve Brand","description":"Resolve a full brand profile by company domain, or extract details from one specific page URL.","tags":["brand"],"parameters":[{"name":"domain","in":"query","required":false,"description":"Company domain to resolve, e.g. apple.com. One of domain or url is required.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"One specific page URL to extract brand details from instead of the whole domain.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandRetrieveResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/search":{"get":{"operationId":"brand_search","summary":"Search Brand","description":"Search brands by name or domain and get up to 10 lightweight matches with domain, name, and logo.","tags":["brand"],"parameters":[{"name":"query","in":"query","required":true,"description":"Brand name or domain to search for.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of matches to return (default and maximum 10).","schema":{"type":"integer","minimum":1,"maximum":10}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSearchResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/styleguide":{"get":{"operationId":"brand_styleguide","summary":"Get Styleguide","description":"Extract a complete design system from a website, including colors, typography, spacing, and more.","tags":["brand"],"parameters":[{"name":"domain","in":"query","required":false,"description":"Website domain to extract a styleguide from, e.g. replynodes.com. One of domain or url is required.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"One specific page URL to extract a styleguide from instead of the whole domain.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandStyleguideResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/fonts":{"get":{"operationId":"brand_fonts","summary":"Get Fonts","description":"Extract typography and font information from any website.","tags":["brand"],"parameters":[{"name":"domain","in":"query","required":false,"description":"Website domain to extract font information from, e.g. replynodes.com. One of domain or url is required.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"One specific page URL to extract font information from instead of the whole domain.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandFontsResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/reddit/search_posts":{"get":{"operationId":"search_posts","tags":["reddit"],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/subreddit_posts/{subreddit}":{"get":{"operationId":"subreddit_posts","tags":["reddit"],"parameters":[{"name":"subreddit","in":"path","required":true,"schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"time_filter","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/post_by_id/{id}":{"get":{"operationId":"post_by_id","tags":["reddit"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/post_by_permalink":{"get":{"operationId":"post_by_permalink","tags":["reddit"],"parameters":[{"name":"permalink","in":"query","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/user_activity/{username}":{"get":{"operationId":"user_activity","tags":["reddit"],"parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/user_posts/{username}":{"get":{"operationId":"user_posts","tags":["reddit"],"parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"time_filter","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}}}},"providers":[{"slug":"appstore","name":"appstore","description":"Runtime-registered read provider.","status":"available","routes":[{"provider":"appstore","operation_id":"app","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/app","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"developer","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/developer","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"list","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/list","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"privacy","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/privacy","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"ratings","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/ratings","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"reviews","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/reviews","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"search","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"similar","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/similar","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"suggest","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/suggest","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}}]},{"slug":"brand","name":"brand","description":"Runtime-registered read provider.","status":"available","routes":[{"provider":"brand","operation_id":"brand_fonts","tag":"brand","schema_ref":"#/components/schemas/BrandFontsResponse","route":"/v1/brand/fonts","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":5}},{"provider":"brand","operation_id":"brand_retrieve","tag":"brand","schema_ref":"#/components/schemas/BrandRetrieveResponse","route":"/v1/brand/retrieve","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":5}},{"provider":"brand","operation_id":"brand_search","tag":"brand","schema_ref":"#/components/schemas/BrandSearchResponse","route":"/v1/brand/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"brand","operation_id":"brand_styleguide","tag":"brand","schema_ref":"#/components/schemas/BrandStyleguideResponse","route":"/v1/brand/styleguide","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":8}}]},{"slug":"googleplay","name":"googleplay","description":"Runtime-registered read provider.","status":"available","routes":[{"provider":"googleplay","operation_id":"googleplay_app_details","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/app_details/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_availability","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/availability/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_categories","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/categories","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_category_apps","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/category_apps/{category}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_data_safety","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/data_safety/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_developer","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/developer","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_permissions","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/permissions/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_reviews","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/reviews/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_search","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_similar_apps","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/similar_apps/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_suggest","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/suggest","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}}]},{"slug":"hackernews","name":"hackernews","description":"Runtime-registered read provider.","status":"available","routes":[{"provider":"hackernews","operation_id":"hackernews_item","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/item/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_search","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_ask","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_ask","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_best","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_best","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_job","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_job","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_new","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_new","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_show","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_show","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_top","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_top","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_user","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/user/{handle}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}}]},{"slug":"reddit","name":"reddit","description":"Runtime-registered read provider.","status":"available","routes":[{"provider":"reddit","operation_id":"post_by_id","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/post_by_id/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"reddit","operation_id":"post_by_permalink","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/post_by_permalink","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"reddit","operation_id":"search_posts","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/search_posts","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"reddit","operation_id":"subreddit_posts","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/subreddit_posts/{subreddit}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"reddit","operation_id":"user_activity","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/user_activity/{username}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"reddit","operation_id":"user_posts","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/user_posts/{username}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}}]},{"slug":"web_search","name":"web_search","description":"Runtime-registered read provider.","status":"available","routes":[{"provider":"web_search","operation_id":"web_search","tag":"web_search","schema_ref":"#/components/schemas/AppResponse","route":"/v1/web/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":1}}]},{"slug":"webcontext","name":"webcontext","description":"Runtime-registered read provider.","status":"available","routes":[{"provider":"webcontext","operation_id":"webcontext_brand","tag":"webcontext","schema_ref":"#/components/schemas/WebContextBrandResponse","route":"/v1/webcontext/brand","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":5}},{"provider":"webcontext","operation_id":"webcontext_crawl","tag":"webcontext","schema_ref":"#/components/schemas/WebContextCrawlResponse","route":"/v1/webcontext/crawl","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":15}},{"provider":"webcontext","operation_id":"webcontext_map","tag":"webcontext","schema_ref":"#/components/schemas/WebContextMapResponse","route":"/v1/webcontext/map","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":5}},{"provider":"webcontext","operation_id":"webcontext_scrape","tag":"webcontext","schema_ref":"#/components/schemas/WebContextScrapeResponse","route":"/v1/webcontext/scrape","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}}]},{"slug":"youtube","name":"youtube","description":"Runtime-registered read provider.","status":"available","routes":[{"provider":"youtube","operation_id":"youtube_channel","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/channel/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_comments","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/comments/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_playlist","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/playlist/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_related","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/related/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_search","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_transcript","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/transcript/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_video","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/video/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}}]}],"callable_routes":[{"provider":"appstore","operation_id":"app","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/app","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"developer","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/developer","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"list","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/list","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"privacy","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/privacy","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"ratings","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/ratings","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"reviews","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/reviews","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"search","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"similar","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/similar","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"appstore","operation_id":"suggest","tag":"appstore","schema_ref":"#/components/schemas/AppResponse","route":"/v1/appstore/suggest","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"brand","operation_id":"brand_fonts","tag":"brand","schema_ref":"#/components/schemas/BrandFontsResponse","route":"/v1/brand/fonts","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":5}},{"provider":"brand","operation_id":"brand_retrieve","tag":"brand","schema_ref":"#/components/schemas/BrandRetrieveResponse","route":"/v1/brand/retrieve","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":5}},{"provider":"brand","operation_id":"brand_search","tag":"brand","schema_ref":"#/components/schemas/BrandSearchResponse","route":"/v1/brand/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"brand","operation_id":"brand_styleguide","tag":"brand","schema_ref":"#/components/schemas/BrandStyleguideResponse","route":"/v1/brand/styleguide","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":8}},{"provider":"googleplay","operation_id":"googleplay_app_details","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/app_details/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_availability","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/availability/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_categories","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/categories","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_category_apps","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/category_apps/{category}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_data_safety","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/data_safety/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_developer","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/developer","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_permissions","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/permissions/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_reviews","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/reviews/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_search","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_similar_apps","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/similar_apps/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"googleplay","operation_id":"googleplay_suggest","tag":"googleplay","schema_ref":"#/components/schemas/AppResponse","route":"/v1/googleplay/suggest","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_item","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/item/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_search","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_ask","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_ask","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_best","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_best","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_job","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_job","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_new","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_new","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_show","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_show","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_stories_top","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/stories_top","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"hackernews","operation_id":"hackernews_user","tag":"hackernews","schema_ref":"#/components/schemas/AppResponse","route":"/v1/hackernews/user/{handle}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"reddit","operation_id":"post_by_id","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/post_by_id/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"reddit","operation_id":"post_by_permalink","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/post_by_permalink","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"reddit","operation_id":"search_posts","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/search_posts","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"reddit","operation_id":"subreddit_posts","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/subreddit_posts/{subreddit}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"reddit","operation_id":"user_activity","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/user_activity/{username}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"reddit","operation_id":"user_posts","tag":"reddit","schema_ref":"#/components/schemas/RedditResponse","route":"/v1/reddit/user_posts/{username}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":2}},{"provider":"web_search","operation_id":"web_search","tag":"web_search","schema_ref":"#/components/schemas/AppResponse","route":"/v1/web/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":1}},{"provider":"webcontext","operation_id":"webcontext_brand","tag":"webcontext","schema_ref":"#/components/schemas/WebContextBrandResponse","route":"/v1/webcontext/brand","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":5}},{"provider":"webcontext","operation_id":"webcontext_crawl","tag":"webcontext","schema_ref":"#/components/schemas/WebContextCrawlResponse","route":"/v1/webcontext/crawl","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":15}},{"provider":"webcontext","operation_id":"webcontext_map","tag":"webcontext","schema_ref":"#/components/schemas/WebContextMapResponse","route":"/v1/webcontext/map","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":5}},{"provider":"webcontext","operation_id":"webcontext_scrape","tag":"webcontext","schema_ref":"#/components/schemas/WebContextScrapeResponse","route":"/v1/webcontext/scrape","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_channel","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/channel/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_comments","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/comments/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_playlist","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/playlist/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_related","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/related/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_search","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/search","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_transcript","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/transcript/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}},{"provider":"youtube","operation_id":"youtube_video","tag":"youtube","schema_ref":"#/components/schemas/AppResponse","route":"/v1/youtube/video/{id}","method":"GET","status":"available","callable":true,"auth_required":true,"read_only":true,"billing":{"metered":true,"credit_cost":3}}],"openapi":{"version":"v1","document_hash":"sha256:f8c3e68a45dfe6a26b433a91cec4ac06eb142e9dfb56fb2d208ea0fe5182dfd7","document":{"openapi":"3.0.3","info":{"title":"ReplyNodes Fetcher API","version":"v1","description":"Read-only data APIs for AI agents. Bearer auth. Prepaid credits / free tier.\n\nClick **Authorize** and paste ONLY the API key (no \"Bearer\" prefix) \u2014 Swagger adds it automatically."},"servers":[{"url":"https://api.replynodes.com"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"rn_test_<64hex> or rn_live_<64hex>","description":"API key. Paste the raw key only (e.g. rn_test_...) \u2014 the \"Bearer \" prefix is added automatically."}},"schemas":{"RedditResponse":{"type":"object","additionalProperties":true}}},"security":[{"bearerAuth":[]}],"paths":{"/v1/youtube/search":{"get":{"operationId":"youtube_search","tags":["youtube"],"parameters":[{"name":"term","in":"query","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/video/{id}":{"get":{"operationId":"youtube_video","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/channel/{id}":{"get":{"operationId":"youtube_channel","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/comments/{id}":{"get":{"operationId":"youtube_comments","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/playlist/{id}":{"get":{"operationId":"youtube_playlist","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/related/{id}":{"get":{"operationId":"youtube_related","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/v1/youtube/transcript/{id}":{"get":{"operationId":"youtube_transcript","tags":["youtube"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized YouTube response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}}}}},"/fetcher/healthz":{"get":{"summary":"Health check","security":[],"responses":{"200":{"description":"ok"}}}},"/fetcher/readyz":{"get":{"summary":"Readiness (auth/db status)","security":[],"responses":{"200":{"description":"ok"}}}},"/v1/hackernews/capabilities":{"get":{"summary":"List available operations","security":[],"responses":{"200":{"description":"ok"}}}},"/v1/hackernews/stories_top":{"get":{"operationId":"hackernews_stories_top","summary":"Fetch current Hacker News top stories","description":"Fetch current Hacker News top stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_new":{"get":{"operationId":"hackernews_stories_new","summary":"Fetch current Hacker News new stories","description":"Fetch current Hacker News new stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_best":{"get":{"operationId":"hackernews_stories_best","summary":"Fetch current Hacker News best stories","description":"Fetch current Hacker News best stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_ask":{"get":{"operationId":"hackernews_stories_ask","summary":"Fetch current Ask HN stories","description":"Fetch current Ask HN stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_show":{"get":{"operationId":"hackernews_stories_show","summary":"Fetch current Show HN stories","description":"Fetch current Show HN stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/stories_job":{"get":{"operationId":"hackernews_stories_job","summary":"Fetch current Hacker News job postings","description":"Fetch current Hacker News job postings. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/search":{"get":{"operationId":"hackernews_search","summary":"Search Hacker News via Algolia","description":"Search Hacker News via Algolia. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search query.","schema":{"type":"string"}},{"name":"tags","in":"query","required":false,"description":"Algolia HN Search tag filter (e.g. story, comment, ask_hn).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":0}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/item/{id}":{"get":{"operationId":"hackernews_item","summary":"Fetch a single Hacker News item and its comment tree","description":"Fetch a single Hacker News item and its comment tree. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"id","in":"path","required":true,"description":"Hacker News item id.","schema":{"type":"integer"}},{"name":"depth","in":"query","required":false,"description":"Maximum comment-tree depth to resolve; values outside 1..10 are rejected.","schema":{"type":"integer","minimum":1,"maximum":10}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/hackernews/user/{handle}":{"get":{"operationId":"hackernews_user","summary":"Fetch a public Hacker News user profile","description":"Fetch a public Hacker News user profile. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["hackernews"],"parameters":[{"name":"handle","in":"path","required":true,"description":"Hacker News username.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/app":{"get":{"operationId":"app","summary":"Look up one public App Store application","description":"Look up one public App Store application. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"Numeric track id; provide this or appId.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"ratings","in":"query","required":false,"description":"Include ratings information.","schema":{"type":"boolean"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/list":{"get":{"operationId":"list","summary":"List applications from an iTunes collection","description":"List applications from an iTunes collection. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"collection","in":"query","required":false,"description":"Provider collection constant.","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Provider category constant.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"num","in":"query","required":false,"description":"Number of applications; values outside 1..200 are rejected.","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"fullDetail","in":"query","required":false,"description":"Request detail enrichment.","schema":{"type":"boolean"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/search":{"get":{"operationId":"search","summary":"Search public App Store applications by term","description":"Search public App Store applications by term. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}},{"name":"num","in":"query","required":false,"description":"Number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"page","in":"query","required":false,"description":"Result page.","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"idsOnly","in":"query","required":false,"description":"Return ids without detail lookups.","schema":{"type":"boolean"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/developer":{"get":{"operationId":"developer","summary":"List applications by developer","description":"List applications by developer. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"devId","in":"query","required":true,"description":"public developer identifier.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/privacy":{"get":{"operationId":"privacy","summary":"Read public App Store privacy details","description":"Read public App Store privacy details. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":true,"description":"public application identifier.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/suggest":{"get":{"operationId":"suggest","summary":"Suggest public App Store search terms","description":"Suggest public App Store search terms. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/similar":{"get":{"operationId":"similar","summary":"List apps related to an application","description":"List apps related to an application. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"public application identifier; provide this or appId.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/reviews":{"get":{"operationId":"reviews","summary":"Read a page of public app reviews","description":"Read a page of public app reviews. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"public application identifier; provide this or appId.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Review page; values outside 1..10 are rejected.","schema":{"type":"integer","minimum":1,"maximum":10}},{"name":"sort","in":"query","required":false,"description":"Provider review sort constant.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/appstore/ratings":{"get":{"operationId":"ratings","summary":"Read public app ratings","description":"Read public app ratings. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["appstore"],"parameters":[{"name":"id","in":"query","required":false,"description":"public application identifier; provide this or appId.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"appId","in":"query","required":false,"description":"Bundle id; provide this or id.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/app_details/{id}":{"get":{"operationId":"googleplay_app_details","summary":"Fetch a single Google Play app's public detail record","description":"Fetch a single Google Play app's public detail record. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/search":{"get":{"operationId":"googleplay_search","summary":"Search public Google Play applications by term","description":"Search public Google Play applications by term. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/similar_apps/{id}":{"get":{"operationId":"googleplay_similar_apps","summary":"Fetch apps similar to a given Google Play package","description":"Fetch apps similar to a given Google Play package. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/permissions/{id}":{"get":{"operationId":"googleplay_permissions","summary":"Fetch a Google Play app's declared permissions","description":"Fetch a Google Play app's declared permissions. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/reviews/{id}":{"get":{"operationId":"googleplay_reviews","summary":"Fetch public reviews for a Google Play app","description":"Fetch public reviews for a Google Play app. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"sort","in":"query","required":false,"description":"Upstream review sort order.","schema":{"type":"integer"}},{"name":"score","in":"query","required":false,"description":"Filter reviews to this star rating (1..5).","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"next_token","in":"query","required":false,"description":"Pagination token from a previous reviews response.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/developer":{"get":{"operationId":"googleplay_developer","summary":"Fetch public apps published by a Google Play developer","description":"Fetch public apps published by a Google Play developer. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"dev_id","in":"query","required":true,"description":"Google Play developer id.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/categories":{"get":{"operationId":"googleplay_categories","summary":"List available Google Play category identifiers","description":"List available Google Play category identifiers. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/category_apps/{category}":{"get":{"operationId":"googleplay_category_apps","summary":"Fetch top public apps in a Google Play category","description":"Fetch top public apps in a Google Play category. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"category","in":"path","required":true,"description":"Google Play category identifier (e.g. GAME, SHOPPING).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/suggest":{"get":{"operationId":"googleplay_suggest","summary":"Fetch Google Play search-term suggestions","description":"Fetch Google Play search-term suggestions. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"term","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..50 are rejected.","schema":{"type":"integer","minimum":1,"maximum":50}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/availability/{id}":{"get":{"operationId":"googleplay_availability","summary":"Fetch a Google Play app's per-storefront availability","description":"Fetch a Google Play app's per-storefront availability. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"countries","in":"query","required":false,"description":"Comma-separated storefront codes.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/googleplay/data_safety/{id}":{"get":{"operationId":"googleplay_data_safety","summary":"Fetch a Google Play app's declared data-safety disclosure","description":"Fetch a Google Play app's declared data-safety disclosure. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway.","tags":["googleplay"],"parameters":[{"name":"id","in":"path","required":true,"description":"Google Play package id (e.g. com.nike.snkrs).","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"Two-letter storefront code.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response. Single lookups carry exactly one element in data; searches and similar listings carry zero or more.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Normalized error with code not_found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/web/search":{"get":{"operationId":"web_search","summary":"Search the public web","description":"Search the public web through the normalized Web Search provider contract.","tags":["web_search"],"parameters":[{"name":"text","in":"query","required":true,"description":"Search query text.","schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"description":"Comma-separated search engines.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Language code.","schema":{"type":"string"}},{"name":"region","in":"query","required":false,"description":"Search region.","schema":{"type":"string"}},{"name":"date","in":"query","required":false,"description":"Provider date filter.","schema":{"type":"string"}},{"name":"site","in":"query","required":false,"description":"Restrict results to a site or domain.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of results; values outside 1..100 are rejected.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"start","in":"query","required":false,"description":"Zero-based result offset.","schema":{"type":"integer","minimum":0}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/scrape":{"get":{"operationId":"webcontext_scrape","summary":"Fetch one URL as clean Markdown","description":"Fetch one URL and return clean, main-content Markdown plus normalized metadata, links, and images. Backed by a privately deployed webclaw-server instance; upstream implementation details are never exposed.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}},{"name":"include_selectors","in":"query","required":false,"description":"Comma-separated CSS selectors to include (e.g. \"article,.content\").","schema":{"type":"string"}},{"name":"exclude_selectors","in":"query","required":false,"description":"Comma-separated CSS selectors to exclude (e.g. \"nav,.sidebar,footer\").","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextScrapeResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/crawl":{"get":{"operationId":"webcontext_crawl","summary":"Crawl same-origin links from a URL","description":"Crawl same-origin links starting from a URL and return normalized page results. max_pages/max_depth are clamped server-side regardless of the requested value.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}},{"name":"max_pages","in":"query","required":false,"description":"Maximum pages to crawl; clamped to 1..50.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"max_depth","in":"query","required":false,"description":"Maximum link depth; clamped to 1..3.","schema":{"type":"integer","minimum":1,"maximum":3}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextCrawlResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/map":{"get":{"operationId":"webcontext_map","summary":"Discover URLs belonging to a site","description":"Discover URLs belonging to a site without extracting page content. Results are deduplicated.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextMapResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/webcontext/brand":{"get":{"operationId":"webcontext_brand","summary":"Extract public brand identity for a site","description":"Extract logos, colors, fonts, and basic public metadata for a site's brand identity.","tags":["webcontext"],"parameters":[{"name":"url","in":"query","required":true,"description":"Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebContextBrandResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/retrieve":{"get":{"operationId":"brand_retrieve","summary":"Retrieve Brand","description":"Resolve a full brand profile by company domain, or extract details from one specific page URL.","tags":["brand"],"parameters":[{"name":"domain","in":"query","required":false,"description":"Company domain to resolve, e.g. apple.com. One of domain or url is required.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"One specific page URL to extract brand details from instead of the whole domain.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandRetrieveResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/search":{"get":{"operationId":"brand_search","summary":"Search Brand","description":"Search brands by name or domain and get up to 10 lightweight matches with domain, name, and logo.","tags":["brand"],"parameters":[{"name":"query","in":"query","required":true,"description":"Brand name or domain to search for.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of matches to return (default and maximum 10).","schema":{"type":"integer","minimum":1,"maximum":10}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandSearchResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/styleguide":{"get":{"operationId":"brand_styleguide","summary":"Get Styleguide","description":"Extract a complete design system from a website, including colors, typography, spacing, and more.","tags":["brand"],"parameters":[{"name":"domain","in":"query","required":false,"description":"Website domain to extract a styleguide from, e.g. replynodes.com. One of domain or url is required.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"One specific page URL to extract a styleguide from instead of the whole domain.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandStyleguideResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/brand/fonts":{"get":{"operationId":"brand_fonts","summary":"Get Fonts","description":"Extract typography and font information from any website.","tags":["brand"],"parameters":[{"name":"domain","in":"query","required":false,"description":"Website domain to extract font information from, e.g. replynodes.com. One of domain or url is required.","schema":{"type":"string"}},{"name":"url","in":"query","required":false,"description":"One specific page URL to extract font information from instead of the whole domain.","schema":{"type":"string","format":"uri"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success response.","headers":{"X-Request-Id":{"description":"Correlation identifier echoed as meta.request_id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandFontsResponse"}}}},"400":{"description":"Normalized error with code invalid_request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Normalized error with code rate_limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"description":"Seconds until the quota window resets.","schema":{"type":"integer"}}}},"502":{"description":"Normalized error with code upstream_unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Normalized error with code degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/reddit/search_posts":{"get":{"operationId":"search_posts","tags":["reddit"],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/subreddit_posts/{subreddit}":{"get":{"operationId":"subreddit_posts","tags":["reddit"],"parameters":[{"name":"subreddit","in":"path","required":true,"schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"time_filter","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/post_by_id/{id}":{"get":{"operationId":"post_by_id","tags":["reddit"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/post_by_permalink":{"get":{"operationId":"post_by_permalink","tags":["reddit"],"parameters":[{"name":"permalink","in":"query","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/user_activity/{username}":{"get":{"operationId":"user_activity","tags":["reddit"],"parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}},"/v1/reddit/user_posts/{username}":{"get":{"operationId":"user_posts","tags":["reddit"],"parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"time_filter","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Normalized read-only provider response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResponse"}}}}}}}}}}},"meta":{"request_id":"94bca9ef-de32-477c-9235-4b1a225e7a2c"}}
