{"openapi":"3.1.0","info":{"title":"Last30Days Online","version":"0.1.0"},"servers":[{"url":"https://last30days.agentpaul.net"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"paths":{"/tools/last30days/demo.json":{"get":{"summary":"Inspect the representative demo result without POST or browser automation","responses":{"200":{"description":"Demo result payload"}}}},"/tools/last30days/demo.md":{"get":{"summary":"Inspect the representative demo result as Markdown","responses":{"200":{"description":"Demo result Markdown"}}}},"/api/tools/last30days/demo":{"post":{"summary":"Run a free representative demo","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"additionalProperties":false,"properties":{"query":{"type":"string","description":"Plain-language topic for the representative demo."}}}}}},"responses":{"200":{"description":"Demo result payload"}}}},"/api/tools/last30days/requests":{"post":{"summary":"Submit a paid Last30Days request","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"additionalProperties":false,"properties":{"query":{"type":"string","description":"Plain-language topic or question to research."},"sources":{"type":"array","items":{"type":"string","enum":["reddit","hackernews","polymarket","x","github","grounding"]},"description":"Optional source subset. Defaults to reddit, hackernews, polymarket, x in this deployment."},"days":{"type":"integer","minimum":1,"maximum":90,"description":"Alias for lookbackDays."},"lookbackDays":{"type":"integer","minimum":1,"maximum":90,"default":30,"description":"How many recent days to search."},"depth":{"type":"string","enum":["quick","deep"],"description":"Use quick for a lighter pass or deep for broader collection."},"x_handle":{"type":"string","description":"X account handle to include, with or without @."},"x_related":{"type":"array","items":{"type":"string"},"description":"Related X handles to include, with or without @."},"subreddits":{"type":"array","items":{"type":"string"},"description":"Subreddits to prioritize, without r/."},"tiktok_hashtags":{"type":"array","items":{"type":"string"},"description":"TikTok hashtags to include, with or without #."},"tiktok_creators":{"type":"array","items":{"type":"string"},"description":"TikTok creators to include."},"ig_creators":{"type":"array","items":{"type":"string"},"description":"Instagram creators to include."},"github_user":{"type":"string","description":"GitHub user or organization to inspect."},"github_repos":{"type":"array","items":{"type":"string"},"description":"GitHub repositories to include, for example owner/repo."},"web_backend":{"type":"string","description":"Preferred hosted web/search backend when available."},"x_backend":{"type":"string","enum":["grok","xai"],"description":"Use grok/xai for explicit X/Grok semantic search. Omit for ordinary X feed search."},"auto_resolve":{"type":"boolean","description":"Let the service resolve likely source targets from the query."},"plan":{"type":"object","additionalProperties":true,"description":"Optional JSON query plan object. File paths and plain text plans are not accepted."},"competitors":{"type":"integer","minimum":1,"maximum":6,"description":"Number of competitor entities to include."},"competitors_list":{"type":"array","items":{"type":"string"},"description":"Explicit competitor names to include."},"polymarket_keywords":{"type":"array","items":{"type":"string"},"description":"Polymarket keywords to prioritize."},"output":{"type":"string","enum":["summary","full"],"description":"Prefer concise summary or full returned results."}}}}}},"responses":{"200":{"description":"Queued request"},"401":{"description":"Invalid bearer token"},"402":{"description":"Insufficient balance"}}}},"/api/tools/last30days/requests/{requestId}":{"get":{"summary":"Poll request status and result","responses":{"200":{"description":"Request status or result"}}}}}}