Ask a question β the agent plans, searches over a few turns, and curates the results: what it keeps is the deliverable.
Fewer turns is quicker; more turns digs deeper. Powered by /v1/agent/runs.
You ask a question; the agent plans, runs a few searches, and trims what does not belong β the kept results are the deliverable. Expect a few minutes per turn; progress shows live as it works.
7d); blank = all time. Absolute dates are refused β retrieval is a one-sided lookback, so from/to/start_date/end_date all return a 400 rather than being silently ignored.max | 443s mean Β· 42 articles Β· = blank on the current server |
| blank | 436s mean Β· 34 articles Β· the server default |
high | 457s mean Β· 24 articles |
xhigh | 382s mean Β· 18 articles |
The variance matters more than the tier. Probed twice with identical settings, this model produced 6,262 tokens in 52s once and 65,536 tokens in 330s the next β ten-fold, same input. A minority of turns cost ten times the median at any tier, and the higher tiers appear to run away more often. A run that takes far longer than these averages is usually that, not your settings.
Lower tiers exist in the underlying model API (medium, low, minimal, none) and are deliberately not offered: given a small budget a reasoning model spends it thinking and returns nothing. Anything outside the three is a 400, not a silent fallback β a typo cannot quietly cost you a run.
POST returns {"run_id":"β¦","status":"queued"} immediately β the run continues on the server whether or not you keep watching.GET /v1/agent/runs/<run_id>. While running it carries status, turns_used, activity (a plain sentence: writing a research planβ¦ / waiting for resultsβ¦ / reviewing resultsβ¦ / final review) and articles_held.status is done or failed, the SAME poll carries results β the kept articles. There is no second endpoint.done means finished. A run that spends its whole turn budget is also done: the deliverable is the results it kept, and spending the budget is the normal ending, not a failure.curl https://api.getsynthesis.ai/v1/agent/runs \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"question":"β¦","max_turns":4,"period":"7d","effort":"high"}'
# β {"run_id":"β¦","status":"queued"} β the ONLY id there is
#
# fields: question (required) Β· task Β· context Β· requirements free text
# period "1d".."365d" max_results 1-50 web_fetch true|false
# max_turns 2-10 effort "high"|"xhigh"|"max" β agent runs only
# from/to/start_date/end_date β 400, use period
#
# poll: GET /v1/agent/runs/<run_id> progress while it works
# the SAME poll carries {results:[β¦]} once status is done
# cancel: POST /v1/agent/runs/<run_id>/cancel stops the run, keeps its work