Researcher Docs
Create paid research runs, watch progress, retrieve the final report, and keep iterating against the same source corpus.
Popular
Start with the paths most agents and customers need first.
Create a durable run with a budget, watch URL, viewer URL, stream URL, and receipt.
Analyze video, website, or feedGet transcripts and structured analysis for source-first work.
Ask a completed runChat against the curated corpus instead of the open web.
Continue, fork, or reportExtend the research, create review versions, or regenerate from the current corpus.
Quick start
Bearer auth is required for authenticated /v1/* routes.
Base URL: https://researcher.now. Use
Authorization: Bearer $RESEARCHER_TOKEN or a customer
rk_... key. If a customer has no key yet, send them to
https://researcher.now/account/?setup=agent.
export RESEARCHER_BASE_URL="https://researcher.now"
export RESEARCHER_TOKEN="${RESEARCHER_TOKEN:-$RESEARCHER_API_KEY}"
curl -sS -X POST "$RESEARCHER_BASE_URL/v1/runs" \
-H "Authorization: Bearer $RESEARCHER_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: quickstart-123" \
-d '{
"source": {"type": "topic", "topic": "recent advances in battery recycling"},
"instructions": "Return the main technical bottlenecks, best sources, and open questions.",
"limits": {"maxCostUsd": 10}
}'
MCP
Hosted Model Context Protocol access for customer agents.
Endpoint: https://researcher.now/mcp. The MCP server
uses Streamable HTTP JSON-RPC and accepts customer bearer keys only.
Admin/operator tokens are rejected.
export RESEARCHER_TOKEN="rk_..."
codex mcp add researcher-now --url https://researcher.now/mcp --bearer-token-env-var RESEARCHER_TOKEN
Current tools:
analyze_article, analyze_video,
deep_research, research_status, and
recall_research. analyze_article and
analyze_video return formatted markdown or a full
transcript plus the finished structured analysis and a
viewerUrl agents must share with the user;
deep_research returns a cited, synthesized research
report plus watchUrl/viewerUrl agents
must share with the user, and takes a topic argument
only in this production version.
Always surface the viewerUrl from analyze and the
watchUrl/viewerUrl from deep research back
to the end user in your reply. These are durable, shareable research
artifacts the user expects to open, share, and revisit. Do not
swallow these links.
Run Analyst chat, direct URL/feed/video run ingestion, source mutation, destructive controls, account-key creation, webhooks, entities, and admin/operator paths are intentionally left on REST or deferred until their billing and URL-safety invariants are complete.
Guides
Use these patterns to pick the right endpoint and avoid duplicate work.
Auth and billing
Customer agents should use an environment token when present, or
direct the customer to account setup. A run budget is a maximum
session deposit; the billed amount is metered usage. If funding is
missing, Researcher returns 402 Payment Required with
a funding URL when available.
curl -sS "$RESEARCHER_BASE_URL/v1/me" \
-H "Authorization: Bearer $RESEARCHER_TOKEN"
Create a research run
Use POST /v1/runs for every new run. Set
source.type to topic, url,
feed, or video, and include an
Idempotency-Key.
curl -sS -X POST "$RESEARCHER_BASE_URL/v1/runs" \
-H "Authorization: Bearer $RESEARCHER_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: run-123" \
-d '{
"requestedBy": "customer-agent",
"source": {"type": "topic", "topic": "GLP-1 impact on food markets"},
"mode": "collection",
"depth": "standard",
"limits": {"maxCostUsd": 10}
}'
YouTube, website, and feed analysis
Use the same run endpoint for direct source analysis. Video sources fetch transcripts and create a media report; URL sources ingest one URL or a same-domain corpus without broad web search; feed sources ingest current RSS, Atom, or JSON Feed items.
curl -sS -X POST "$RESEARCHER_BASE_URL/v1/runs" \
-H "Authorization: Bearer $RESEARCHER_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: video-123" \
-d '{"source": {"type": "video", "url": "https://www.youtube.com/watch?v=VIDEO_ID"}, "limits": {"maxCostUsd": 3}}'
curl -sS -X POST "$RESEARCHER_BASE_URL/v1/runs" \
-H "Authorization: Bearer $RESEARCHER_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: url-123" \
-d '{"source": {"type": "url", "url": "https://example.com", "scope": "domain"}, "limits": {"maxCostUsd": 5}}'
curl -sS -X POST "$RESEARCHER_BASE_URL/v1/runs" \
-H "Authorization: Bearer $RESEARCHER_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: feed-123" \
-d '{"source": {"type": "feed", "url": "https://example.com/feed.xml", "limit": 50}, "limits": {"maxCostUsd": 10}}'
Watch progress
Run creation returns a watchUrl for humans and a
viewerUrl for durable sharing plus a
streamUrl for agents. Share the watch URL and viewer
URL immediately.
Use SSE snapshots or /job for concise status updates.
curl -N "$STREAM_URL"
curl -sS "$RESEARCHER_BASE_URL/v1/runs/$RUN_ID/job" \
-H "Authorization: Bearer $RESEARCHER_TOKEN"
Read the results
Fetch markdown for a simple report, /results for an
agent-friendly bundle, and ?include=all when you need
sources, artifacts, usage, events, media, and extraction records.
curl -sS "$RESEARCHER_BASE_URL/v1/runs/$RUN_ID/markdown" \
-H "Authorization: Bearer $RESEARCHER_TOKEN"
curl -sS "$RESEARCHER_BASE_URL/v1/runs/$RUN_ID/results" \
-H "Authorization: Bearer $RESEARCHER_TOKEN"
Ask the run
/chat and chat sessions are scoped to one completed
run. They answer from the curated corpus, preserve source citations,
and return a sessionId for follow-up turns.
curl -sS -X POST "$RESEARCHER_BASE_URL/v1/runs/$RUN_ID/chat" \
-H "Authorization: Bearer $RESEARCHER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"message": "What are the strongest claims and weakest evidence?"}'
Iterate without losing context
Use /iterate with action to continue the same run,
deepen evidence, focus on gaps, fork a review version, evaluate output, or
regenerate a report after source edits.
| Continue | Use when the same run should keep working with inherited context. |
|---|---|
| Deepen | Use when the answer is directionally right but needs broader evidence. |
| Focus | Use when specific gaps, subtopics, or counterarguments need attention. |
| Steer | Use when an operator wants to add constraints or priorities before more work. |
| Fork | Use when a separate version should exist for customer feedback or review. |
curl -sS -X POST "$RESEARCHER_BASE_URL/v1/runs/$RUN_ID/iterate" \
-H "Authorization: Bearer $RESEARCHER_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: fork-123" \
-d '{"action": "fork", "requestedBy": "customer-agent"}'
curl -sS -X POST "$RESEARCHER_BASE_URL/v1/runs/$RUN_ID/iterate" \
-H "Authorization: Bearer $RESEARCHER_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: focus-123" \
-d '{"action": "focus", "focus": ["contrarian evidence", "company-level winners and losers"]}'
API reference
Grouped by workflow surface, not implementation order.
Setup and auth
/healthService liveness.
/auth/deviceStart the customer API-key device flow.
/auth/device/confirmConfirm a device code with a Privy bearer token.
/auth/device/tokenPoll for the one-time raw customer key.
/v1/meReturn token role, account, and scopes.
Public viewer
/public/research-runs/by-slug/:codeRead-only status payload for short customer URLs.
/public/research-runs/by-slug/:code/streamPublic SSE stream for viewer-safe snapshots.
/public/research-runs/by-slug/:code/sources/:sourceIdStored source copy. Add ?format=md for markdown.
Run creation
/v1/runsCanonical creation for topic, URL, feed, and video sources. Add preflightPlan:true to preview before spending.
Run reads
/v1/runs/:idRun state. Add ?include=all or field-specific includes.
/v1/runs/:id/jobDurable job status and current lifecycle fields.
/v1/runs/:id/resultsAgent-optimized report, findings, sources, and next actions.
/v1/runs/:id/markdownFinal report markdown.
/v1/runs/:id/usageProvider usage, raw cost, billable totals, and stage breakdown.
/v1/runs/:id/streamAuthenticated SSE stream with live snapshots.
/v1/runs/:id/transcriptTyped transcript segments for video runs.
/v1/runs/:id/eventsPlanning, acquisition, extraction, merge, synthesis, and completion events.
/v1/runs/:id/artifactsStructured artifacts and markdown outputs.
Sources and extraction records
/v1/runs/:id/sourcesStored source rows and captured markdown.
/v1/runs/:id/sources/:sourceIdOne stored source as HTML or markdown with ?format=md.
/v1/runs/:id/sourcesAdd one or more sources to a run.
/v1/runs/:id/sources/:sourceIdAdd, update, or clear a source comment.
/v1/runs/:id/sourcesRemove multiple sources from the corpus.
/v1/runs/:id/sources/:sourceIdRemove one source from the corpus.
/v1/runs/:id/extractionsSource-level extractions and synthesis-facing source-grounded records.
/v1/runs/:id/extractions/:sourceIdOne processed source record.
/v1/runs/:id/sources/:sourceId/redoRe-analyze a weak source with optional instructions.
Run controls
/v1/runs/:id/iterateCanonical wrapper for start, pause, continue, deepen, focus, steer, report, fork, evaluate, cancel, and stop.
/v1/runs/:idDelete a run after access is verified.
Run Analyst and chat
/v1/runs/:id/chatRun-scoped chat turn grounded in one corpus.
/v1/runs/:id/chat/sessionsList run chat sessions.
/v1/runs/:id/chat/sessionsCreate a run chat session.
/v1/runs/:id/chat/sessions/:sessionIdRead one run chat session.
/v1/runs/:id/chat/sessions/:sessionIdRename one run chat session.
/v1/runs/:id/chat/sessions/:sessionIdDelete one run chat session.
/v1/runs/:id/chat/sessions/:sessionId/messagesAdd a chat message.
/v1/runs/:id/chat/turns/:turnId/streamStream an analyst turn.
/v1/runs/:id/chat/turns/:turnIdCancel an analyst turn.
/v1/runs/:id/chat/indexRead retrieval-index status.
/v1/runs/:id/chat/index/rebuildRebuild the run retrieval index.
Entity chat
/v1/entities/:id/chatEntity-scoped chat turn grounded in the active entity index.
/v1/entities/:id/chat/sessionsList durable entity chat sessions.
/v1/entities/:id/chat/sessionsCreate an entity chat session.
/v1/entities/:id/chat/sessions/:sessionIdRead one entity chat session.
/v1/entities/:id/chat/sessions/:sessionIdRename one entity chat session.
/v1/entities/:id/chat/sessions/:sessionIdDelete one entity chat session.
/v1/entities/:id/chat/sessions/:sessionId/messagesAdd an entity chat message.
/v1/entities/:id/chat/turns/:turnId/eventsRead persisted entity chat turn events.
Library, organization, and exports
/v1/libraryArchived completed runs with search and filters.
/v1/library/sourcesReusable source rows across completed runs.
/v1/library/evidenceExtracted evidence across completed runs.
/v1/library/searchSemantic claim/library search.
/v1/library/recallRelated runs, sources, and evidence for a topic.
/v1/runs/:id/diffCompare parent and child run outputs.
/v1/runs/:id/tagsList run tags.
/v1/runs/:id/tagsAdd tags to a run.
/v1/runs/:id/tagsRemove multiple tags or clear all tags.
/v1/runs/:id/exportBuild a one-off export payload.
/v1/collectionsList run collections.
/v1/collectionsCreate a collection.
/v1/collections/:id/runsAdd a run to a collection.
/v1/collections/:id/runs/:runIdRemove a run from a collection.
/v1/webhooksList terminal-run webhook subscriptions.
/v1/webhooksCreate an account-scoped terminal webhook. Use event:"run.complete" for succeeded, failed, and cancelled runs.
/v1/webhooks/:idDisable a webhook subscription.
Account and billing
/v1/account/balanceAuthenticated account, customer, and wallet status.
/v1/runsRecent customer runs with budget, billed, cost, and watch URL.
/v1/account/chatsGlobal run/start chat session listing.
/v1/account/keysList active customer API keys.
/v1/account/keysCreate a raw rk_... key once.
/v1/account/keys/:idRename a customer API key.
/v1/account/keys/:idRevoke a customer API key.
/v1/account/deposit-addressesList wallet deposit addresses.
/v1/account/deposit-addressesCreate a deposit address.
Run lifecycle
What to show customers while work is active.
- Formulating plan. The worker turns the prompt into a structured plan and contract.
- Acquiring sources. Search, direct URLs, YouTube transcripts, and library recall populate candidates.
- Extracting evidence. Source-level LLM records capture claims, caveats, metrics, and diagnostics.
- Analyzing corpus. Records are merged into claims, comparisons, gaps, and source coverage.
- Writing report. The report follows the customer output contract and stores artifacts.
- Completing or continuing. If budget is reached after usable evidence exists, Researcher writes the best budget-limited report and leaves continuation as the next paid action.
Outputs and artifacts
Fetch markdown for reading; fetch artifacts when agents need structure.
research_report_markdown_v1Customer-facing report.
agent_brief_markdown_v1Agent reasoning handoff.
corpus_analysis_v1Claims, clusters, comparisons, gaps, and best sources.
research_quality_review_v1Coverage gate and remaining issues.
source_extraction_v1Per-source claims, facts, caveats, and diagnostics.
source_analysis_record_v1Durable synthesis-facing evidence records.
claim_evidence_map_v1Grounded claims with confidence and source IDs.
record_index_v1Compact source-to-claim pointers.
For downstream saving, fetch the report, sources, and extraction records.
Strip raw YouTube transcript blobs before sending data into another LLM;
use /transcript for typed transcript segments instead.