edit_url alongside the download_url. Drop it into an <iframe> and your users see the generated document rendered as a full, interactive spreadsheet, document, or presentation surface inside your app — no file download, no third-party viewer, no infrastructure to manage on your side.
edit_url is the same one the Overten web app uses. Users can scroll, zoom, switch sheets or slides, edit cell values, rewrite text, and move slides. Changes auto-save back to the run’s artifact — the next download_url fetch serves the updated file.
download_url vs edit_url — when to use which
download_url | edit_url | |
|---|---|---|
| What you get | A URL to the raw file bytes | An iframe-ready URL to a live document viewer |
| Primary use | Save to disk, email, feed another pipeline | Show the AI’s output in your app for users to inspect |
| Interactive? | No — one-way pull | Yes — scroll, zoom, switch sheets/slides, edit cells |
| User can edit? | N/A | Yes — edits persist to the run’s artifact |
| Lifetime | 24 hours (signed storage URL) | 15 minutes, sliding on activity |
| Safe to share cross-app? | No — grants file access | No — grants view access to one run |
edit_url inside a dashboard so users see results immediately, and a “Download” button backed by download_url so users can take the file elsewhere.
How it works end-to-end
Generate a document
Call
POST /excel/generate (or /word/generate or /slides/generate) with your prompt. The response includes both download_url and edit_url.Embed the edit_url in your UI
Set the
edit_url as the src of an <iframe> in your app. No extra backend work needed.Overten validates and renders
When the iframe loads, Overten validates the token, retrieves the run’s file from storage, and streams a rendering of the document into the frame.
Basic embed
Token semantics
Thetoken query parameter in the edit_url is what ties a particular iframe session to a specific run. Key properties:
- Opaque — a random string, not a JWT. Generated and validated entirely by Overten. Don’t try to parse it client-side.
- Scoped to one run and your org — if someone copy-pastes the URL, the token only unlocks this document for your org. It can’t be used to access other runs.
- Short-lived with sliding expiry — expires 15 minutes after the last user activity. Active viewer sessions refresh the TTL automatically; idle sessions (user closed the tab) expire on their own.
- No explicit revoke endpoint today — the short sliding TTL is the primary mitigation. If you suspect a leak before a token has naturally expired, contact support with the
run_idand we can invalidate it on our side.
How edits work
Two edit paths compose cleanly: In-iframe edits: The user types in a cell, rewrites a paragraph, or moves a slide. Edits auto-save to the run’s artifact (the same storage locationdownload_url points at). The next fetch serves the updated bytes.
Agent-driven edits via API: Call the generation endpoint with the original run_id and a new prompt. The agent picks up the current state — including any in-iframe edits the user made — and applies the change on top:
run_id are cheap because the agent resumes from saved state rather than rebuilding. Every generate response includes a fresh edit_url and download_url.
Refreshing an expired URL
If theedit_url has expired (for example, a user returns to your dashboard the next day to reopen a document), call the generation endpoint again with the original run_id and a minimal prompt:
edit_url with a new token. The call is cheap because the agent resumes from existing state rather than starting from scratch.
What edit_url is not
Not a shareable public link
Not a shareable public link
Not a download
Not a download
The iframe renders the document live; the raw file bytes never land on the user’s disk via this route. Use
download_url for file downloads.Not a programmatic write API
Not a programmatic write API
In-iframe edits are designed for human users. For server-side code that applies structured changes, use the generation endpoint with
run_id — that path is auditable, has a ledger row, and doesn’t require a browser.Not a hosted Office install
Not a hosted Office install
Your users don’t need Excel, Word, or PowerPoint installed locally. The viewer runs entirely in the browser.
Security considerations
- Mint per viewer session. Don’t store a single
edit_urlserver-side and serve it to multiple users. Each user should get a freshly-minted URL from the latest generation response. - Strip tokens from logs and analytics. Drop the
tokenquery parameter before recording page URLs in your observability tools. - Restrict frame ancestors. Set a
Content-Security-Policyon your parent page limiting which origins can frame your dashboard, so an attacker can’t frame your app and read the iframe state via JavaScript. - Prefer your own domain as the parent page. The token is only meaningful in-browser; capturing the URL during a session and opening it from another host still requires getting past the sliding TTL.
White-label and custom branding
By default, the editor shows standard Overten chrome (header and logo). Enterprise customers can configure a white-label version with custom branding. Contact support@overten.ai for details. If you prefer not to use the Overten viewer at all, usedownload_url and render the file with your own tooling (Google Drive viewer, OnlyOffice, SheetJS, or native Office apps). The API returns both URLs on every run, so you can switch approaches per-user or per-route without changing your generation code.
