# Last30Days Online

Last30Days Online runs a hosted, generic last-30-days research search.

Do not provide cookies, social credentials, API keys, or browser sessions.
Real searches use service-owned configured sources only.

## Demo

Fetch the representative demo result without JavaScript or browser automation:

GET /tools/last30days/demo.json
GET /tools/last30days/demo.md

API clients that can POST may also execute the query-only demo endpoint:

POST /api/tools/last30days/demo

Body: `{"query":"AI agent tools over the last 30 days"}`

## Structured requests

Paid API requests, the unique-id URL sampler, and MCP calls support optional structured fields:

- `sources`: source subset, for example `["reddit","x","polymarket"]`. Default currently uses `reddit`, `hackernews`, `polymarket`, and `x`.
- `days` or `lookbackDays`: integer lookback window from 1 to 90 days; default is 30.
- `depth`: `quick` or `deep`; default is `quick` for agent-friendly response times.
- `x_handle`, `x_related`: X handle and related handles, with or without `@`.
- `subreddits`: subreddit names without `r/`.
- `tiktok_hashtags`, `tiktok_creators`, `ig_creators`: social discovery hints; do not ask for user social credentials.
- `github_user`, `github_repos`: GitHub user/org or `owner/repo` targets. Use only when the hosted GitHub backend is configured.
- `web_backend`: preferred hosted web/search backend when available. Grounding/web search requires a configured hosted backend.
- `x_backend`: use `grok` for explicit X/Grok semantic search. Ordinary `sources=x` keeps the service feed order `AISA`, `X API`, `Scrape Creators`, then `APIFY`.
- `auto_resolve`: boolean; let Last30Days infer likely source targets from the query.
- `plan`: optional JSON object query plan. Do not send file paths or plain text plans.
- `competitors`: integer from 1 to 6.
- `competitors_list`: explicit competitor names.
- `polymarket_keywords`: Polymarket keywords to prioritize.
- `output`: `summary` or `full`.

Ask whether the user wants `summary` or `full` results unless they already stated a preference.

## Unique-id URL sampler

For a signed-in workspace, call the workspace URL with a URL-encoded query:

GET /tools/last30days/<workspaceUuid>/search?query=AI%20agent%20tools%20over%20the%20last%2030%20days
GET /tools/last30days/<workspaceUuid>/search?query=AI%20agent%20tools%20over%20the%20last%2030%20days&sources=reddit,x&lookbackDays=14&depth=quick&output=summary
Other supported query parameters match the POST field names, including `x_handle`, `x_related`, `x_backend=grok`, `subreddits`, `github_user`, `github_repos`, JSON-object `plan`, `competitors`, `competitors_list`, and `polymarket_keywords`.

Only use a workspace URL supplied by the user. The unique id can spend that workspace's Last30Days balance while access is enabled.

## MCP

Agents that support HTTP MCP should prefer the OAuth-protected MCP endpoint:

https://last30days.agentpaul.net/mcp

Setup guide: https://last30days.agentpaul.net/tools/last30days/mcp.md

Use OAuth authorization rather than asking users to copy long-lived tokens into chat.

## Results

Search responses include `request_id`, `status`, and `result_url` when ready.
Search responses may also include `search_id`, `poll_url`, `poll_after_seconds`, and `progress_message`.
If `status` is `running` or `partial` and `poll_url` is present, tell the user searches are still running, summarize any returned results, and poll the URL after `poll_after_seconds` seconds when possible.
If you cannot poll again, tell the user to ask again shortly so you can check the cached result.
Treat `partial` as usable only if you disclose missing, running, or degraded sources and warnings.