/excel/generate, /word/generate, /slides/generate, /slides/outline, and the /text/* endpoints — supports two execution modes. Sync blocks until the document is ready; async returns a task_id immediately and lets you poll or receive a webhook when the job finishes. Choose based on the expected job size and where your code runs.
Sync (default)
The HTTP connection stays open until the document is ready, up to a 300-second (5-minute) ceiling. Most single-sheet spreadsheets, short memos, and small decks land well inside that window.- You’re prototyping and want to keep the integration simple.
- The prompt is small enough to land under 300s — a single-sheet workbook, a short memo, or a 3–5 slide deck.
- Your caller (a browser, Zapier, a webhook handler) can hold the connection open.
Auto-promotion to async
If a sync job is still running at the 300-second ceiling, Overten automatically promotes it to async and returns202 Accepted with a task_id:
/tasks/{task_id} exactly as you would for an explicit async call. This happens most often with complex multi-sheet financial models, long decks, and long-form reports.
Async
Set"async": true in the request body. The endpoint returns immediately with a task_id; the agent runs in the background.
- The job is large — a full deck, a multi-sheet financial model, a long-form report.
- Your caller is a background worker or cron job.
- You want to receive results via webhook instead of holding a connection open.
Task states
Every task moves through this state machine:| Status | Terminal? | Meaning |
|---|---|---|
queued | No | Accepted, waiting for a worker |
running | No | Agent is actively executing |
completed | Yes | Success — result is populated |
failed | Yes | Unrecoverable error — error is populated |
cancelled | Yes | Client cancelled or server shutdown mid-run |
expired | Yes | Queued for more than 24 hours without being picked up |
running, the phase field gives you a finer-grained sub-state. Common values include preflight, agent_turn, and uploading_result. The exact set of phase values may expand over time — use them for display purposes only and don’t branch critical logic off them.
The progress field (integer 0–100) is an approximate completion percentage. Use it to drive progress bars; don’t branch logic off it.
Polling
Check the status of any task with:Polling strategy
- Initial wait: 2–5 seconds. Most tasks move from
queuedtorunningwithin a second, but the actual agent work is what takes time. - Backoff: Linear or exponential, capped at 10 seconds between polls. More frequent polling doesn’t make the agent finish faster — it only burns your rate-limit budget.
- Overall timeout: Plan for up to 30 minutes for heavy jobs. Financial models, long-form reports, and decks with many generated charts regularly run 10–25 minutes end-to-end.
Webhooks as an alternative to polling
Passwebhook_url alongside async: true and Overten will POST the result to your endpoint when the task finishes, skipping polling entirely:
Choosing a mode
End-user triggers a generation from a button click
End-user triggers a generation from a button click
Batch job generating hundreds of reports overnight
Batch job generating hundreds of reports overnight
Async + webhooks. Submit all jobs with
async: true; a webhook fires your queue when each finishes. Your worker downloads and files them without holding any HTTP connections open.Support team issuing quick drafts on demand
Support team issuing quick drafts on demand
Sync. A short memo or single-sheet summary typically lands in 90 seconds to 3 minutes — fast enough for a human to wait with a spinner.
Multi-step workflow (draft → review → revise)
Multi-step workflow (draft → review → revise)
Sync each step, reuse
run_id. Subsequent calls resume from saved state, so they’re cheaper — but each step is still a real agent turn (often 60 seconds or more), so don’t expect instant responses.Full financial model or 20+ slide investor deck
Full financial model or 20+ slide investor deck
Async + webhooks. These jobs commonly take 10–25 minutes. Blocking from a browser doesn’t work at that scale, and polling for 20 minutes from a client is wasteful. Submit with
async: true and webhook_url, then let Overten call you when it’s done.
