{"openapi":"3.1.0","info":{"title":"hacker-news-search API","version":"1.0.0","description":"Public, credential-free read API. Source: https://hn.algolia.com. Fair-use limit:60 requests/minute/client; upstream limits also apply. Successful reads may be reused for30seconds. Browser sessions are never shared."},"servers":[{"url":"https://hacker-news-search.api.whox.ai"}],"security":[],"paths":{"/v1/search":{"get":{"summary":"Search public Hacker News items by keyword.","security":[],"responses":{"200":{"description":"Successful public source response. Cache freshness is explicit in meta.","content":{"application/json":{"schema":{"type":"object","required":["ok","service","operation","data","meta"],"properties":{"ok":{"const":true},"service":{"type":"string"},"operation":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"title":{"type":["string","null"]},"url":{"type":["string","null"]}},"additionalProperties":true}},"meta":{"type":"object","required":["tier","source","durationMs","cached"],"properties":{"tier":{"const":1},"source":{"type":"string","format":"uri"},"durationMs":{"type":"number"},"cached":{"type":"boolean"},"ageMs":{"type":"number"},"definitionVersion":{"type":"string"}}}},"additionalProperties":false}}}},"400":{"description":"Invalid or missing arguments","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"404":{"description":"Unknown API or operation","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"405":{"description":"Unsupported HTTP method","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"414":{"description":"URL exceeds request limit","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"415":{"description":"POST requires application/json","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"429":{"description":"Client or upstream rate limit","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"500":{"description":"Unexpected service error","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"502":{"description":"Source failed or changed","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"503":{"description":"Service is busy","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"504":{"description":"Source request timed out","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}}},"tags":["hacker-news-search"],"operationId":"hacker-news-search_search","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string"}}]},"post":{"summary":"Search public Hacker News items by keyword.","security":[],"responses":{"200":{"description":"Successful public source response. Cache freshness is explicit in meta.","content":{"application/json":{"schema":{"type":"object","required":["ok","service","operation","data","meta"],"properties":{"ok":{"const":true},"service":{"type":"string"},"operation":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"title":{"type":["string","null"]},"url":{"type":["string","null"]}},"additionalProperties":true}},"meta":{"type":"object","required":["tier","source","durationMs","cached"],"properties":{"tier":{"const":1},"source":{"type":"string","format":"uri"},"durationMs":{"type":"number"},"cached":{"type":"boolean"},"ageMs":{"type":"number"},"definitionVersion":{"type":"string"}}}},"additionalProperties":false}}}},"400":{"description":"Invalid or missing arguments","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"404":{"description":"Unknown API or operation","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"405":{"description":"Unsupported HTTP method","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"414":{"description":"URL exceeds request limit","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"415":{"description":"POST requires application/json","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"429":{"description":"Client or upstream rate limit","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"500":{"description":"Unexpected service error","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"502":{"description":"Source failed or changed","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"503":{"description":"Service is busy","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}},"504":{"description":"Source request timed out","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfterMs":{"type":"number"}}}},"additionalProperties":false}}}}},"tags":["hacker-news-search"],"operationId":"hacker-news-search_search_json","description":"JSON invocation of the same read-only source operation; this does not perform an upstream write.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"],"additionalProperties":false}}}}}}}}