What it does
Register your own site or application to embed this workspace's live My Tasks, Inbox, or a specific list or task view — real data, not a static export, restricted to the origins and Space you allow.
Who needs it
A company embedding its workspace inside a client portal, an intranet, or a product they've already built, without giving every user a login inside IterDone itself.
Why use it
Users show up already matched to the right workspace member by email, identities are cryptographically signed by your own backend, and a workspace-scoped app can never reach any tenant but the one that registered it.
How it works
Admin > Embedded Apps lets you embed this workspace's My Tasks, Inbox, or a specific list or task view inside your own application or intranet. Click + Register app to create one.
- App name — a label for the registration.
- Allowed origins — a comma-separated list of the exact origins allowed to embed the modules. Nothing renders on a site that isn't listed here.
- Scope — leave it as "Entire workspace," or restrict the app to one Space. When a Space is picked, the My Tasks and Inbox modules only ever show that Space's items, and a list or task outside it can't be embedded with that app's key at all.
Registering an app gives you a public app key, an embed secret, and a snippet to drop into your page:
<script src="…/embed/task-embed.js" data-app-key="pkembed_…" data-identity='…' async></script> <div data-task-module="my-tasks"></div>
The data-identity value is a small JSON payload your own backend signs with the embed secret (HMAC-SHA256 over the tenant id, external user id, email and an expiry — never done in the browser), so your site vouches for who's logging in. Users are matched to workspace members by email; the external tenant id must exactly equal this workspace's slug, since a self-registered app is permanently pinned to the one workspace that created it — it can never provision or reach any other tenant. Rotate secret issues a new embed secret while keeping the old one valid for 24 hours, so you can roll it on your backend without an outage; Delete stops every embed using that app immediately without touching the workspace's own data.
