Skip to content

cURL and Raw HTTP ​

The base URL is https://webagent.qoni.ai; user-facing routes use the /api/v1 prefix.

bash
export BASE_URL=https://webagent.qoni.ai
export PROJECT_ID=proj_xxxxxxxxxxxxxxxxxxxxxxxx
export API_KEY=wa_xxxxxxxxxxxxxxxxxxxxxxxx
export AUTH="Authorization: Bearer ${API_KEY}"

DoAnything ​

bash
curl -X POST "$BASE_URL/api/v1/projects/$PROJECT_ID/do_anything/runs" \
  -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"instructions":"Open Hacker News and list the first five stories."}'

curl "$BASE_URL/api/v1/projects/$PROJECT_ID/do_anything/runs/$RUN_ID" -H "$AUTH"
curl -N "$BASE_URL/api/v1/projects/$PROJECT_ID/do_anything/runs/$RUN_ID/events" -H "$AUTH"
curl -X POST "$BASE_URL/api/v1/projects/$PROJECT_ID/do_anything/runs/$RUN_ID/cancel" \
  -H "$AUTH" -H "Content-Type: application/json" -d '{"reason":"user_cancelled"}'

The run-id surface also has intervene, messages, screenshots, pause, resume, and continue endpoints. Use OpenAPI for their exact request bodies.

DeepResearch ​

bash
curl -X POST "$BASE_URL/api/v1/projects/$PROJECT_ID/deep_research/runs" \
  -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"topic":"Browser automation trends in 2026","depth":"standard"}'
curl -N "$BASE_URL/api/v1/projects/$PROJECT_ID/deep_research/runs/$RUN_ID/events" -H "$AUTH"
curl "$BASE_URL/api/v1/projects/$PROJECT_ID/deep_research/runs/$RUN_ID/artifacts" -H "$AUTH"

DeepResearch also has cancel, feedback, and terminal-run messages follow-up. There is no current /intervene endpoint.

WebSearch ​

bash
curl -X POST "$BASE_URL/api/v1/projects/$PROJECT_ID/web_search/runs" \
  -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"queries":["browser automation 2026"],"max_results_per_query":5,"summarize":true}'
curl "$BASE_URL/api/v1/projects/$PROJECT_ID/web_search/runs/$RUN_ID" -H "$AUTH"
curl -N "$BASE_URL/api/v1/projects/$PROJECT_ID/web_search/runs/$RUN_ID/events" -H "$AUTH"

WebSearch has no messages, refine, or follow-up route.

Track ​

bash
curl -X POST "$BASE_URL/api/v1/projects/$PROJECT_ID/track/tracks" \
  -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"instructions":"Check https://example.com/ for title changes","schedule":{"daily_at":"09:00","tz":"Asia/Singapore"}}'
# Use the returned id as TRACK_ID.
curl "$BASE_URL/api/v1/projects/$PROJECT_ID/track/tracks/$TRACK_ID/checks" -H "$AUTH"

Daily schedules start 0–30 minutes early; integer every_seconds (600–2592000) is also supported. run_now returns 202 and track_id/session_id/run_id, not completion; checks returns only the recent 50. Creation starts first_look immediately; successful checks use done. A first or current check still in flight causes manual run_now to return 409 task_in_progress; read the terminal state before an explicit user request, without automatic retries. pause/delete do not cancel an in-flight check. Track has no SSE, legacy DSL, or notification fields; see Track.

SSE reconnect ​

bash
curl -N "$BASE_URL/api/v1/projects/$PROJECT_ID/do_anything/runs/$RUN_ID/events" \
  -H "$AUTH" -H "Last-Event-ID: $LAST_EVENT_ID"