Base URL (local): http://localhost:8000
Start a new research session.
Request body:
query(string, required)language(string, optional, defaulten)sources(array, optional):semantic_scholar | arxiv | pubmedmodel_id(string, optional): Model to use (e.g.,openai:gpt-4o)
Response:
thread_idcandidate_papers(initial search results)logs
Stream workflow logs via SSE.
Event payloads include:
{ "node": "planner_agent", "log": "..." }{ "event": "cost_update", "node": "extraction", "total_cost_usd": 0.045 }{ "event": "draft_token", "token": "..." }{ "event": "done" }{ "event": "error", "detail": "..." }
Approve selected papers and resume from interrupt point.
Request body:
thread_id(string)paper_ids(string[])
Response:
thread_idfinal_draft(nullable)approved_countlogs
Continue an existing session with follow-up instructions.
Request body:
thread_id(string)message(string)model_id(string, optional): Model to use (e.g.,openai:gpt-4o)
Response:
thread_idmessage(assistant summary message)final_draft(nullable)candidate_paperslogs
Get current workflow state.
Response fields:
next_nodeslogshas_draftcandidate_countapproved_count
Export review draft to Markdown or DOCX.
Query params:
format:markdown | docxcitation_style:apa | mla | ieee | gb-t7714
Request body:
draftpapers
Generate chart assets from selected papers.
Request body:
papers
Response:
year_trendsource_distributionauthor_frequency
List sessions from checkpoint storage.
Query params:
limit(default 50, max 100)
Get full session detail, including:
- candidate/approved papers
- final draft
- logs
- conversation messages
List all enabled model configurations.
Response: array of ModelConfig objects with id, provider, display_name, cost_tier, is_local, etc.
Run evaluation for a completed draft.
Submit a human rating.
Get ratings for a specific session.
404: unknownthread_id/ session not found400: invalid workflow state (e.g., approving when not at interrupt point)504: workflow timeout500: internal execution errors