AgentDBDocs

App session API

The AgentDB app in your browser uses these endpoints with its sign-in session. They are listed for completeness.

Agents and scripts should use the operations in the reference with an API key or OAuth instead. These endpoints follow the app and may change with it.

EndpointOperation idSummary
GET /app/dashboard-accessapp.dashboard_sites.accessThe owner, an admin or the creator opens a custom dashboard or a preview (?preview=<version>) with a single-use code
POST /v1/app/account-link/confirmapp.account_link.confirmUse an emailed link: verify the address, set the password or change the address
GET /v1/app/account-link/peekapp.account_link.peekWhat an emailed account link does and the masked address (does not use the link)
POST /v1/app/account/emailapp.account.emailChange the email address; the new address confirms and the old address approves, both by link (x-csrf-token)
GET /v1/app/account/key-reviewapp.account.key_reviewKeys and connected apps created before the address was proven, waiting for keep or revoke
POST /v1/app/account/key-reviewapp.account.key_review.decideKeep or revoke keys and connected apps from before the address was proven (decisions, or revoke_all) (x-csrf-token)
POST /v1/app/account/keys/{key}/revokeapp.account.keys.revokeRevoke one account API key of the signed-in account (Origin + x-csrf-token + recent sign-in; second factor when 2FA is on)
GET /v1/app/account/keysapp.account.keys.listLive account API keys of the signed-in account: label, prefix (never the secret), created, last used, created via, reach (browser session only)
POST /v1/app/account/keysapp.account.keys.createCreate an account API key, shown once (label required; second factor when 2FA is on)
POST /v1/app/account/passkeys/optionsapp.account.passkeys.optionsWebAuthn registration options for a new passkey (single-use challenge; needs the same proof as authenticator setup)
POST /v1/app/account/passkeys/{passkey}/removeapp.account.passkeys.removeRemove a passkey (needs a current second factor)
POST /v1/app/account/passkeys/{passkey}/renameapp.account.passkeys.renameRename a passkey (needs a current second factor)
POST /v1/app/account/passkeysapp.account.passkeys.addAdd a passkey; the first factor returns 10 recovery codes once
POST /v1/app/account/passwordapp.account.passwordChange the password (needs the current one) or set a first password (confirmed by email) (x-csrf-token)
POST /v1/app/account/recovery-codesapp.account.recovery_codesReplace the recovery codes; the new 10 are shown once (needs a current second factor)
GET /v1/app/account/securityapp.account.securitySecond-factor status, passkeys and recovery codes left (no secrets)
POST /v1/app/account/totp/disableapp.account.totp.disableRemove the authenticator app (needs a current second factor)
POST /v1/app/account/totp/enableapp.account.totp.enableTurn the authenticator app on with one valid code; the first factor returns 10 recovery codes once
POST /v1/app/account/totp/setupapp.account.totp.setupStart authenticator-app setup: secret, otpauth URI and QR code (x-csrf-token, recent sign-in; a second factor, or the current password before the first one)
POST /v1/app/account/two-step/email-confirmapp.account.two_step.email_confirmAccount without a password: email the link that confirms adding the first second factor
POST /v1/app/account/verify-emailapp.account.verify_emailEmail the verification link again (x-csrf-token)
POST /v1/app/connections/{client_id}/disconnectapp.connections.disconnectRevoke every access token and refresh token of one OAuth client for this account; idempotent (Origin + x-csrf-token; browser session only)
GET /v1/app/connectionsapp.connections.listOAuth connections (MCP connectors) of the signed-in account, per client: name, redirect host, connected since, last used, reach, live tokens (browser session only)
GET /v1/app/dashboards/{dashboard}/previewapp.dashboards.previewA dashboard's data for its owner, for the hosted page opened without a token (owners and admins; browser session only)
GET /v1/app/hub/channelsapp.hub.channelsChannels you belong to in every workspace
GET /v1/app/hub/inboxapp.hub.inboxYour open inbox items in every workspace (mentions, assignments, approvals, reminders, reviews, failures)
GET /v1/app/hub/reportsapp.hub.reportsSaved views of type report in every workspace (render with views/:view/render)
GET /v1/app/hubapp.hubAgentHub: pending approvals, recent activity, schedules and failures, notifications across the account's workspaces
POST /v1/app/loginapp.loginSign in with email and password; sets the browser session cookie (one generic error; throttled)
GET /v1/app/meapp.meSigned-in account, its workspaces and the CSRF token
POST /v1/app/passkey/loginapp.passkey.loginPasswordless sign-in with a passkey (user verification required); sets the session cookie
POST /v1/app/passkey/optionsapp.passkey.optionsWebAuthn options for passwordless sign-in with a passkey
POST /v1/app/password/forgotapp.password.forgotEmail a 30-minute single-use password reset link (same answer for any address)
POST /v1/app/password/resetapp.password.resetSet a new password with the emailed reset link; ends every session of the account
POST /v1/app/sign-in/completeapp.sign_in.completeTrade the emailed token for a browser session cookie (ends this browser's previous session)
GET /v1/app/sign-in/peekapp.sign_in.peekMasked address a sign-in token is for (does not use the token)
POST /v1/app/sign-in/second-factorapp.sign_in.second_factorSecond step of a sign-in: TOTP code, recovery code or passkey; sets the session cookie
POST /v1/app/sign-inapp.sign_inEmail a 15-minute sign-in link for the explorer (same answer for any address)
POST /v1/app/sign-out-allapp.sign_out_allEnd every browser session of the account (x-csrf-token)
POST /v1/app/sign-outapp.sign_outEnd this browser session (x-csrf-token)
POST /v1/app/sign-upapp.sign_upCreate an account with email and password (same answer for any address; a verification link is emailed)
GET /v1/app/workspaces/{ws}/accessapp.accessYour role and per-object / per-field access (as access_inspect)
POST /v1/app/workspaces/{ws}/approvals/{approval}/decideapp.approvals.decideApprove, reject or request changes (Origin + x-csrf-token, session younger than 12 h, approver role, action_hash of the reviewed action). The only way to decide a human-only proposal
GET /v1/app/workspaces/{ws}/approvals/{approval}app.approvals.getOne proposal with decisions and result
GET /v1/app/workspaces/{ws}/approvalsapp.approvals.listProposals (as approvals_list)
DELETE /v1/app/workspaces/{ws}/attachments/{attachment}app.files.detachDetach a file from a record (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
POST /v1/app/workspaces/{ws}/attachmentsapp.files.attachAttach a file to a record (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/channels/{channel}/messagesapp.messages.listMessages of a channel or thread (as messages_list)
POST /v1/app/workspaces/{ws}/channels/{channel}/messagesapp.messages.postPost a message or a thread reply as yourself (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/deleteapp.dashboard_sites.deleteDelete a custom dashboard and its files (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/inviteapp.dashboard_sites.inviteInvite viewers by email (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/keepapp.dashboard_sites.keepKeep a dashboard as it is after its creator lost access (understand: true) (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/pauseapp.dashboard_sites.pausePause a custom dashboard (neutral page, no data, sessions end) (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/resumeapp.dashboard_sites.resumeResume a paused custom dashboard (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/revokeapp.dashboard_sites.revokeRevoke a custom dashboard at once (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
GET /v1/app/workspaces/{ws}/dashboard-sites/{site}/shareapp.dashboard_sites.share_getSharing of a custom dashboard: mode, URL, password set, viewers (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/shareapp.dashboard_sites.share_setChange sharing: mode (link needs confirm_link), password, expiry (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/transfer/acceptapp.dashboard_sites.transfer_acceptThe receiving account accepts an offered ownership transfer; audited (D-099) (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/transferapp.dashboard_sites.transferThe owner offers the dashboard to another account of the workspace ({email}; null withdraws); audited (D-099) (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/unpublishapp.dashboard_sites.unpublishTake a custom dashboard offline (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboard-sites/{site}/viewers/{viewer}/revokeapp.dashboard_sites.revoke_viewerRemove one viewer (Origin + x-csrf-token + second factor) (owners and admins; browser session only)
GET /v1/app/workspaces/{ws}/dashboard-sitesapp.dashboard_sites.listCustom dashboards of the workspace: sharing mode, URL, status (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboards/{dashboard}/revokeapp.dashboards.revokeRevoke a dashboard link at once (Origin + x-csrf-token) (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/dashboards/{dashboard}/rotateapp.dashboards.rotateNew link for the same dashboard; the old link stops (Origin + x-csrf-token) (owners and admins; browser session only)
GET /v1/app/workspaces/{ws}/dashboardsapp.dashboards.listDashboards of the workspace with creator, expiry and access counts (owners and admins; browser session only)
POST /v1/app/workspaces/{ws}/deleteapp.workspace.deleteSchedule deletion from the explorer (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, owner)
GET /v1/app/workspaces/{ws}/files/searchapp.files.searchSearch file names and extracted text (as files_search)
GET /v1/app/workspaces/{ws}/files/{file}/contentapp.files.contentFile bytes (attachment; ?inline=1 for png/jpeg/gif/webp images and the audio/video types of signed links; Range supported)
PATCH /v1/app/workspaces/{ws}/files/{file}/contentapp.files.contentUpload one part of a file (Upload-Offset; resumable) (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/files/{file}/thumbnailapp.files.thumbnailThumbnail JPEG made by the media worker (404 until one exists; worker off by default)
GET /v1/app/workspaces/{ws}/files/{file}/uploadapp.files.upload_statusBytes received so far for a pending upload
PATCH /v1/app/workspaces/{ws}/files/{file}/versions/{version}/contentapp.files.version.contentUpload one part of a pending version (Upload-Offset; resumable) (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/files/{file}/versionsapp.files.versionsVersion history of a file, newest first
POST /v1/app/workspaces/{ws}/files/{file}/versionsapp.files.version.createStart a replacement version of a file (editors and up) (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/files/{file}app.files.getOne file with media metadata and text extraction status
GET /v1/app/workspaces/{ws}/filesapp.files.listFiles of the workspace (folder, recursive, tag, kind filters; as files_list)
POST /v1/app/workspaces/{ws}/filesapp.files.createStart a file upload (pending file) (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
PATCH /v1/app/workspaces/{ws}/inbox/{item}app.inbox.updateMark an inbox item unread, read or done (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/inboxapp.inbox.listYour inbox (as inbox_list)
GET /v1/app/workspaces/{ws}/indexesapp.indexes.listIndexes, limits and (?recommendations=1) index recommendations from recent queries (as indexes_list)
POST /v1/app/workspaces/{ws}/indexesapp.indexes.createCreate a recommended index (as indexes_create; owners and admins; x-csrf-token)
DELETE /v1/app/workspaces/{ws}/links/{link}app.links.deleteUnlink two records (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
POST /v1/app/workspaces/{ws}/linksapp.links.createLink two records (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/notification-settingsapp.notifications.settingsYour notification email choice in this workspace
PUT /v1/app/workspaces/{ws}/notification-settingsapp.notifications.settings.updateEmail: off | immediate | daily (Origin + x-csrf-token, session younger than 12 h)
GET /v1/app/workspaces/{ws}/objects/{object}/aggregateapp.records.aggregateCounts, sums, averages, minimums and maximums, grouped (as records_aggregate; JSON in the query string)
GET /v1/app/workspaces/{ws}/objects/{object}/recordsapp.records.queryRecords (as records_query; where/sort as JSON in the query string)
GET /v1/app/workspaces/{ws}/peopleapp.peopleDisplay names of this workspace's members and agents, keyed by actor id (user:…, agent:…)
DELETE /v1/app/workspaces/{ws}/published-views/{published}app.views.published.revokeRevoke a published view (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/published-viewsapp.views.published.listYour published views
GET /v1/app/workspaces/{ws}/query-capabilitiesapp.query.capabilitiesFilter operators per field type, aggregate metrics and date buckets (read from the query engine)
POST /v1/app/workspaces/{ws}/records/restoreapp.records.restoreRestore records from the recycle bin (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
POST /v1/app/workspaces/{ws}/records/{record}/archiveapp.records.archiveArchive a record (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/records/{record}/filesapp.records.filesFiles attached to a record
GET /v1/app/workspaces/{ws}/records/{record}/historyapp.records.historyActivity of one record, newest first
GET /v1/app/workspaces/{ws}/records/{record}/relatedapp.records.relatedLinked records (as relationships_list)
POST /v1/app/workspaces/{ws}/records/{record}/unarchiveapp.records.unarchiveUnarchive a record (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
DELETE /v1/app/workspaces/{ws}/records/{record}app.records.deleteMove a record to the recycle bin (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/records/{record}app.records.getOne record
PATCH /v1/app/workspaces/{ws}/records/{record}app.records.updateUpdate a record with its version; ?view= checks a Kanban view's WIP limits (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
POST /v1/app/workspaces/{ws}/recordsapp.records.createCreate a record (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/recycle-binapp.records.recycle_binRecycle bin (as records_recycle_bin)
POST /v1/app/workspaces/{ws}/restoreapp.workspace.restoreRestore from the explorer (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, owner)
GET /v1/app/workspaces/{ws}/schemaapp.schemaSchema (as schema_inspect)
GET /v1/app/workspaces/{ws}/searchapp.searchFull-text search in one object (?object=) or every object with search enabled (?q=)
GET /v1/app/workspaces/{ws}/usageapp.usageWorkspace details and quota usage
POST /v1/app/workspaces/{ws}/views/{view}/publishapp.views.publishPublish a view read-only through an expiring link (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/views/{view}/renderapp.views.renderA view rendered by its display config (docs/APP-VIEWS.md)
PATCH /v1/app/workspaces/{ws}/views/{view}app.views.updateChange a view (with its version) (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
GET /v1/app/workspaces/{ws}/viewsapp.views.listSaved views (as views_list)
POST /v1/app/workspaces/{ws}/viewsapp.views.createSave a view (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)
POST /v1/app/workspaces/{ws}/workspace-importsapp.workspace.importImport an uploaded data-export bundle into a NEW workspace of your account (dry_run first; D-090) (Origin + x-csrf-token + Idempotency-Key, session younger than 12 h, member role)