{"entries":[{"id":"cli:access","kind":"cli","section":"CLI","text":"Who you are in the workspace (key, agent or member), your role and per object/field access","title":"agentdb access","url":"reference/cli.html#cli-access"},{"id":"cli:agents","kind":"cli","section":"CLI","text":"Named agents with their own keys and a role no higher than yours","title":"agentdb agents","url":"reference/cli.html#cli-agents"},{"id":"cli:agents create","kind":"cli","section":"CLI","text":"Create an agent and print its key once","title":"agentdb agents create","url":"reference/cli.html#cli-agents-create"},{"id":"cli:agents key","kind":"cli","section":"CLI","text":"Issue another key for an agent (printed once)","title":"agentdb agents key","url":"reference/cli.html#cli-agents-key"},{"id":"cli:agents list","kind":"cli","section":"CLI","text":"Agents with role, status and who granted them","title":"agentdb agents list","url":"reference/cli.html#cli-agents-list"},{"id":"cli:agents revoke","kind":"cli","section":"CLI","text":"Revoke an agent, its keys and the agents it delegated to","title":"agentdb agents revoke","url":"reference/cli.html#cli-agents-revoke"},{"id":"cli:aggregate","kind":"cli","section":"CLI","text":"Server-side count/sum/avg/min/max with optional group_by, e.g. --json '{\"object\":\"invoice\",\"group_by\":[{\"field\":\"issued_on\",\"bucket\":\"month\"}],\"metrics\":[{\"op\":\"sum\",\"field\":\"amount\"}]}'","title":"agentdb aggregate","url":"reference/cli.html#cli-aggregate"},{"id":"cli:approvals","kind":"cli","section":"CLI","text":"Propose writes for human approval, decide, and manage approval policies (docs/APPROVALS-AND-HUB.md)","title":"agentdb approvals","url":"reference/cli.html#cli-approvals"},{"id":"cli:approvals approve","kind":"cli","section":"CLI","text":"","title":"agentdb approvals approve","url":"reference/cli.html#cli-approvals-approve"},{"id":"cli:approvals cancel","kind":"cli","section":"CLI","text":"Withdraw a pending proposal","title":"agentdb approvals cancel","url":"reference/cli.html#cli-approvals-cancel"},{"id":"cli:approvals get","kind":"cli","section":"CLI","text":"One proposal: input, preview, decisions, result","title":"agentdb approvals get","url":"reference/cli.html#cli-approvals-get"},{"id":"cli:approvals list","kind":"cli","section":"CLI","text":"Proposals, newest first","title":"agentdb approvals list","url":"reference/cli.html#cli-approvals-list"},{"id":"cli:approvals policies","kind":"cli","section":"CLI","text":"Which writes need approval and who decides (owners and admins)","title":"agentdb approvals policies","url":"reference/cli.html#cli-approvals-policies"},{"id":"cli:approvals policies create","kind":"cli","section":"CLI","text":"e.g. --json '{\"name\":\"Large amounts\",\"operations\":[\"records.update\"],\"objects\":[\"invoice\"],\"condition\":{\"field\":\"amount\",\"op\":\"gt\",\"value\":1000}}'","title":"agentdb approvals policies create","url":"reference/cli.html#cli-approvals-policies-create"},{"id":"cli:approvals policies delete","kind":"cli","section":"CLI","text":"","title":"agentdb approvals policies delete","url":"reference/cli.html#cli-approvals-policies-delete"},{"id":"cli:approvals policies list","kind":"cli","section":"CLI","text":"","title":"agentdb approvals policies list","url":"reference/cli.html#cli-approvals-policies-list"},{"id":"cli:approvals policies update","kind":"cli","section":"CLI","text":"Change a policy (include its current version)","title":"agentdb approvals policies update","url":"reference/cli.html#cli-approvals-policies-update"},{"id":"cli:approvals reject","kind":"cli","section":"CLI","text":"","title":"agentdb approvals reject","url":"reference/cli.html#cli-approvals-reject"},{"id":"cli:approvals request-changes","kind":"cli","section":"CLI","text":"","title":"agentdb approvals request-changes","url":"reference/cli.html#cli-approvals-request-changes"},{"id":"cli:approvals submit","kind":"cli","section":"CLI","text":"Propose a write, e.g. --json '{\"operation\":\"records.update\",\"params\":{\"record\":\"rec_…\"},\"input\":{\"version\":3,\"data\":{\"amount\":5000}},\"justification\":\"…\"}'","title":"agentdb approvals submit","url":"reference/cli.html#cli-approvals-submit"},{"id":"cli:calendar","kind":"cli","section":"CLI","text":"Calendars, events, free-busy, meeting slots and iCalendar (docs/CALENDAR.md)","title":"agentdb calendar","url":"reference/cli.html#cli-calendar"},{"id":"cli:calendar availability","kind":"cli","section":"CLI","text":"Free-busy for calendars and participants","title":"agentdb calendar availability","url":"reference/cli.html#cli-calendar-availability"},{"id":"cli:calendar create","kind":"cli","section":"CLI","text":"Create a calendar: {name, timezone, owner?, writers?}","title":"agentdb calendar create","url":"reference/cli.html#cli-calendar-create"},{"id":"cli:calendar delete","kind":"cli","section":"CLI","text":"Delete a calendar with its events","title":"agentdb calendar delete","url":"reference/cli.html#cli-calendar-delete"},{"id":"cli:calendar event-create","kind":"cli","section":"CLI","text":"Book an event (see docs/CALENDAR.md for start/end formats, recurrence, participants, reminders)","title":"agentdb calendar event-create","url":"reference/cli.html#cli-calendar-event-create"},{"id":"cli:calendar event-delete","kind":"cli","section":"CLI","text":"","title":"agentdb calendar event-delete","url":"reference/cli.html#cli-calendar-event-delete"},{"id":"cli:calendar event-get","kind":"cli","section":"CLI","text":"","title":"agentdb calendar event-get","url":"reference/cli.html#cli-calendar-event-get"},{"id":"cli:calendar event-update","kind":"cli","section":"CLI","text":"Change an event; add \"occurrence\" to change one occurrence","title":"agentdb calendar event-update","url":"reference/cli.html#cli-calendar-event-update"},{"id":"cli:calendar events","kind":"cli","section":"CLI","text":"Occurrences between --from and --to (RFC 3339)","title":"agentdb calendar events","url":"reference/cli.html#cli-calendar-events"},{"id":"cli:calendar expand","kind":"cli","section":"CLI","text":"Expand an RRULE into occurrences","title":"agentdb calendar expand","url":"reference/cli.html#cli-calendar-expand"},{"id":"cli:calendar export","kind":"cli","section":"CLI","text":"iCalendar (.ics) export (JSON with an ics field)","title":"agentdb calendar export","url":"reference/cli.html#cli-calendar-export"},{"id":"cli:calendar get","kind":"cli","section":"CLI","text":"","title":"agentdb calendar get","url":"reference/cli.html#cli-calendar-get"},{"id":"cli:calendar import","kind":"cli","section":"CLI","text":"Import an .ics file (max 1 MiB)","title":"agentdb calendar import","url":"reference/cli.html#cli-calendar-import"},{"id":"cli:calendar list","kind":"cli","section":"CLI","text":"","title":"agentdb calendar list","url":"reference/cli.html#cli-calendar-list"},{"id":"cli:calendar respond","kind":"cli","section":"CLI","text":"accepted, declined, tentative or needs_action (for yourself)","title":"agentdb calendar respond","url":"reference/cli.html#cli-calendar-respond"},{"id":"cli:calendar slots","kind":"cli","section":"CLI","text":"Find free meeting slots","title":"agentdb calendar slots","url":"reference/cli.html#cli-calendar-slots"},{"id":"cli:calendar update","kind":"cli","section":"CLI","text":"","title":"agentdb calendar update","url":"reference/cli.html#cli-calendar-update"},{"id":"cli:capabilities","kind":"cli","section":"CLI","text":"What the server offers (versions, MCP tools and when each was added, limits). No login needed. Find an operation: --search \"attach a file\", --category files, --operation files_attach, --index (all categories).","title":"agentdb capabilities","url":"reference/cli.html#cli-capabilities"},{"id":"cli:channels","kind":"cli","section":"CLI","text":"Durable work messages: channels, threads, mentions, receipts (docs/CHANNELS-AND-INBOX.md)","title":"agentdb channels","url":"reference/cli.html#cli-channels"},{"id":"cli:channels ack","kind":"cli","section":"CLI","text":"","title":"agentdb channels ack","url":"reference/cli.html#cli-channels-ack"},{"id":"cli:channels add-members","kind":"cli","section":"CLI","text":"","title":"agentdb channels add-members","url":"reference/cli.html#cli-channels-add-members"},{"id":"cli:channels create","kind":"cli","section":"CLI","text":"","title":"agentdb channels create","url":"reference/cli.html#cli-channels-create"},{"id":"cli:channels delete-message","kind":"cli","section":"CLI","text":"","title":"agentdb channels delete-message","url":"reference/cli.html#cli-channels-delete-message"},{"id":"cli:channels direct","kind":"cli","section":"CLI","text":"Open the direct channel with an agent or human","title":"agentdb channels direct","url":"reference/cli.html#cli-channels-direct"},{"id":"cli:channels edit","kind":"cli","section":"CLI","text":"","title":"agentdb channels edit","url":"reference/cli.html#cli-channels-edit"},{"id":"cli:channels get","kind":"cli","section":"CLI","text":"","title":"agentdb channels get","url":"reference/cli.html#cli-channels-get"},{"id":"cli:channels list","kind":"cli","section":"CLI","text":"","title":"agentdb channels list","url":"reference/cli.html#cli-channels-list"},{"id":"cli:channels members","kind":"cli","section":"CLI","text":"Members with read receipts and ack offsets","title":"agentdb channels members","url":"reference/cli.html#cli-channels-members"},{"id":"cli:channels message","kind":"cli","section":"CLI","text":"One message (with history for the author and moderators)","title":"agentdb channels message","url":"reference/cli.html#cli-channels-message"},{"id":"cli:channels messages","kind":"cli","section":"CLI","text":"","title":"agentdb channels messages","url":"reference/cli.html#cli-channels-messages"},{"id":"cli:channels pending","kind":"cli","section":"CLI","text":"Messages after your ack offset (they come back until acked)","title":"agentdb channels pending","url":"reference/cli.html#cli-channels-pending"},{"id":"cli:channels post","kind":"cli","section":"CLI","text":"","title":"agentdb channels post","url":"reference/cli.html#cli-channels-post"},{"id":"cli:channels purge","kind":"cli","section":"CLI","text":"Apply the retention now (moderators)","title":"agentdb channels purge","url":"reference/cli.html#cli-channels-purge"},{"id":"cli:channels remove-member","kind":"cli","section":"CLI","text":"Remove a member (your own identity = leave)","title":"agentdb channels remove-member","url":"reference/cli.html#cli-channels-remove-member"},{"id":"cli:channels search","kind":"cli","section":"CLI","text":"","title":"agentdb channels search","url":"reference/cli.html#cli-channels-search"},{"id":"cli:channels subscribe","kind":"cli","section":"CLI","text":"Join a public channel or change your notify level","title":"agentdb channels subscribe","url":"reference/cli.html#cli-channels-subscribe"},{"id":"cli:channels update","kind":"cli","section":"CLI","text":"e.g. --json '{\"topic\":\"…\",\"retention_days\":30,\"archived\":false}'","title":"agentdb channels update","url":"reference/cli.html#cli-channels-update"},{"id":"cli:cms","kind":"cli","section":"CLI","text":"AgentCMS: content types, publishing, revisions and delivery tokens (packages install --template cms first)","title":"agentdb cms","url":"reference/cli.html#cli-cms"},{"id":"cli:cms configure","kind":"cli","section":"CLI","text":"Make an object a content type, e.g. --json '{\"object\":\"cms_post\",\"public_fields\":[\"title\",\"slug\",\"body\"]}'","title":"agentdb cms configure","url":"reference/cli.html#cli-cms-configure"},{"id":"cli:cms diff","kind":"cli","section":"CLI","text":"","title":"agentdb cms diff","url":"reference/cli.html#cli-cms-diff"},{"id":"cli:cms publish","kind":"cli","section":"CLI","text":"Publish (or re-publish) an item that is in review","title":"agentdb cms publish","url":"reference/cli.html#cli-cms-publish"},{"id":"cli:cms restore","kind":"cli","section":"CLI","text":"","title":"agentdb cms restore","url":"reference/cli.html#cli-cms-restore"},{"id":"cli:cms revision","kind":"cli","section":"CLI","text":"","title":"agentdb cms revision","url":"reference/cli.html#cli-cms-revision"},{"id":"cli:cms revisions","kind":"cli","section":"CLI","text":"","title":"agentdb cms revisions","url":"reference/cli.html#cli-cms-revisions"},{"id":"cli:cms schedule","kind":"cli","section":"CLI","text":"Publish at an RFC 3339 time (a scheduler job)","title":"agentdb cms schedule","url":"reference/cli.html#cli-cms-schedule"},{"id":"cli:cms token-create","kind":"cli","section":"CLI","text":"A read-only delivery token for a website (shown once)","title":"agentdb cms token-create","url":"reference/cli.html#cli-cms-token-create"},{"id":"cli:cms token-revoke","kind":"cli","section":"CLI","text":"","title":"agentdb cms token-revoke","url":"reference/cli.html#cli-cms-token-revoke"},{"id":"cli:cms tokens","kind":"cli","section":"CLI","text":"","title":"agentdb cms tokens","url":"reference/cli.html#cli-cms-tokens"},{"id":"cli:cms types","kind":"cli","section":"CLI","text":"Content types and their delivery settings","title":"agentdb cms types","url":"reference/cli.html#cli-cms-types"},{"id":"cli:cms unconfigure","kind":"cli","section":"CLI","text":"Stop delivering an object (records and revisions stay)","title":"agentdb cms unconfigure","url":"reference/cli.html#cli-cms-unconfigure"},{"id":"cli:cms unpublish","kind":"cli","section":"CLI","text":"","title":"agentdb cms unpublish","url":"reference/cli.html#cli-cms-unpublish"},{"id":"cli:connectors","kind":"cli","section":"CLI","text":"Integration connectors: sealed credentials, sync, inbound and outbound (docs/INTEGRATIONS.md)","title":"agentdb connectors","url":"reference/cli.html#cli-connectors"},{"id":"cli:connectors create","kind":"cli","section":"CLI","text":"Configure a connector (credentials are shown never again)","title":"agentdb connectors create","url":"reference/cli.html#cli-connectors-create"},{"id":"cli:connectors delete","kind":"cli","section":"CLI","text":"","title":"agentdb connectors delete","url":"reference/cli.html#cli-connectors-delete"},{"id":"cli:connectors get","kind":"cli","section":"CLI","text":"","title":"agentdb connectors get","url":"reference/cli.html#cli-connectors-get"},{"id":"cli:connectors inbound-events","kind":"cli","section":"CLI","text":"","title":"agentdb connectors inbound-events","url":"reference/cli.html#cli-connectors-inbound-events"},{"id":"cli:connectors list","kind":"cli","section":"CLI","text":"","title":"agentdb connectors list","url":"reference/cli.html#cli-connectors-list"},{"id":"cli:connectors rotate-inbound-secret","kind":"cli","section":"CLI","text":"","title":"agentdb connectors rotate-inbound-secret","url":"reference/cli.html#cli-connectors-rotate-inbound-secret"},{"id":"cli:connectors runs","kind":"cli","section":"CLI","text":"Sync runs, newest first","title":"agentdb connectors runs","url":"reference/cli.html#cli-connectors-runs"},{"id":"cli:connectors send","kind":"cli","section":"CLI","text":"Perform an allowed action, e.g. --json '{\"action\":\"notify\",\"payload\":{...}}'","title":"agentdb connectors send","url":"reference/cli.html#cli-connectors-send"},{"id":"cli:connectors sync","kind":"cli","section":"CLI","text":"Run a sync now","title":"agentdb connectors sync","url":"reference/cli.html#cli-connectors-sync"},{"id":"cli:connectors types","kind":"cli","section":"CLI","text":"Connector types on this server","title":"agentdb connectors types","url":"reference/cli.html#cli-connectors-types"},{"id":"cli:connectors update","kind":"cli","section":"CLI","text":"Change config, rotate credentials, pause/resume","title":"agentdb connectors update","url":"reference/cli.html#cli-connectors-update"},{"id":"cli:content","kind":"cli","section":"CLI","text":"AgentContent: posts, campaigns and metrics are records (packages install --template content)","title":"agentdb content","url":"reference/cli.html#cli-content"},{"id":"cli:content dispatch","kind":"cli","section":"CLI","text":"Hand a post to the operator's outbound publisher (off by default)","title":"agentdb content dispatch","url":"reference/cli.html#cli-content-dispatch"},{"id":"cli:conversations","kind":"cli","section":"CLI","text":"Shared inbox with handoff: assign, claim, resolve (docs/CHANNELS-AND-INBOX.md)","title":"agentdb conversations","url":"reference/cli.html#cli-conversations"},{"id":"cli:conversations assign","kind":"cli","section":"CLI","text":"Hand over to an agent or human ('none' = back to the queue)","title":"agentdb conversations assign","url":"reference/cli.html#cli-conversations-assign"},{"id":"cli:conversations claim","kind":"cli","section":"CLI","text":"","title":"agentdb conversations claim","url":"reference/cli.html#cli-conversations-claim"},{"id":"cli:conversations create","kind":"cli","section":"CLI","text":"","title":"agentdb conversations create","url":"reference/cli.html#cli-conversations-create"},{"id":"cli:conversations get","kind":"cli","section":"CLI","text":"The conversation with every entry","title":"agentdb conversations get","url":"reference/cli.html#cli-conversations-get"},{"id":"cli:conversations list","kind":"cli","section":"CLI","text":"","title":"agentdb conversations list","url":"reference/cli.html#cli-conversations-list"},{"id":"cli:conversations reply","kind":"cli","section":"CLI","text":"","title":"agentdb conversations reply","url":"reference/cli.html#cli-conversations-reply"},{"id":"cli:conversations resolve","kind":"cli","section":"CLI","text":"","title":"agentdb conversations resolve","url":"reference/cli.html#cli-conversations-resolve"},{"id":"cli:dashboard-sites","kind":"cli","section":"CLI","text":"Custom dashboards: host your own dashboard website (HTML, CSS, JS) with live read-only data; share it with only you, a link, a link + password, or invited people","title":"agentdb dashboard-sites","url":"reference/cli.html#cli-dashboard-sites"},{"id":"cli:dashboard-sites create","kind":"cli","section":"CLI","text":"Create a custom dashboard (nothing is live until deploy --publish)","title":"agentdb dashboard-sites create","url":"reference/cli.html#cli-dashboard-sites-create"},{"id":"cli:dashboard-sites delete","kind":"cli","section":"CLI","text":"Delete it and its stored files","title":"agentdb dashboard-sites delete","url":"reference/cli.html#cli-dashboard-sites-delete"},{"id":"cli:dashboard-sites deploy","kind":"cli","section":"CLI","text":"Upload a folder as a new version (index.html required; manifest.json for data sources); --publish makes it live","title":"agentdb dashboard-sites deploy","url":"reference/cli.html#cli-dashboard-sites-deploy"},{"id":"cli:dashboard-sites get","kind":"cli","section":"CLI","text":"Versions, files, validation problems, sharing and recent events","title":"agentdb dashboard-sites get","url":"reference/cli.html#cli-dashboard-sites-get"},{"id":"cli:dashboard-sites invite","kind":"cli","section":"CLI","text":"Invite people by email (mode people); each gets a personal single-use link","title":"agentdb dashboard-sites invite","url":"reference/cli.html#cli-dashboard-sites-invite"},{"id":"cli:dashboard-sites list","kind":"cli","section":"CLI","text":"List custom dashboards with URL, mode and status","title":"agentdb dashboard-sites list","url":"reference/cli.html#cli-dashboard-sites-list"},{"id":"cli:dashboard-sites pause","kind":"cli","section":"CLI","text":"Pause it: a neutral paused page, no data, every session ends","title":"agentdb dashboard-sites pause","url":"reference/cli.html#cli-dashboard-sites-pause"},{"id":"cli:dashboard-sites publish","kind":"cli","section":"CLI","text":"Make a ready version live (an older version rolls back)","title":"agentdb dashboard-sites publish","url":"reference/cli.html#cli-dashboard-sites-publish"},{"id":"cli:dashboard-sites regenerate-link","kind":"cli","section":"CLI","text":"Link mode: a new link (?k= key); the old link stops at once","title":"agentdb dashboard-sites regenerate-link","url":"reference/cli.html#cli-dashboard-sites-regenerate-link"},{"id":"cli:dashboard-sites resume","kind":"cli","section":"CLI","text":"Resume a paused dashboard","title":"agentdb dashboard-sites resume","url":"reference/cli.html#cli-dashboard-sites-resume"},{"id":"cli:dashboard-sites revoke","kind":"cli","section":"CLI","text":"Stop it for good, at once (also open pages)","title":"agentdb dashboard-sites revoke","url":"reference/cli.html#cli-dashboard-sites-revoke"},{"id":"cli:dashboard-sites revoke-viewer","kind":"cli","section":"CLI","text":"Remove one invited viewer","title":"agentdb dashboard-sites revoke-viewer","url":"reference/cli.html#cli-dashboard-sites-revoke-viewer"},{"id":"cli:dashboard-sites share","kind":"cli","section":"CLI","text":"Show sharing, or change it with --mode/--password-stdin/--expires-in-days","title":"agentdb dashboard-sites share","url":"reference/cli.html#cli-dashboard-sites-share"},{"id":"cli:dashboard-sites unpublish","kind":"cli","section":"CLI","text":"Take it offline; versions are kept","title":"agentdb dashboard-sites unpublish","url":"reference/cli.html#cli-dashboard-sites-unpublish"},{"id":"cli:dashboards","kind":"cli","section":"CLI","text":"Live data links for dashboards the agent designs (read-only panels, optional password, expiry, allowed origins)","title":"agentdb dashboards","url":"reference/cli.html#cli-dashboards"},{"id":"cli:dashboards create","kind":"cli","section":"CLI","text":"Create a data link; prints data_url and a ready fetch loop (usage.js)","title":"agentdb dashboards create","url":"reference/cli.html#cli-dashboards-create"},{"id":"cli:dashboards list","kind":"cli","section":"CLI","text":"List dashboards (never shows links, keys or password hashes)","title":"agentdb dashboards list","url":"reference/cli.html#cli-dashboards-list"},{"id":"cli:dashboards revoke","kind":"cli","section":"CLI","text":"Stop the link at once (also for viewers that are watching)","title":"agentdb dashboards revoke","url":"reference/cli.html#cli-dashboards-revoke"},{"id":"cli:dashboards update","kind":"cli","section":"CLI","text":"Change sharing settings; the link stays the same","title":"agentdb dashboards update","url":"reference/cli.html#cli-dashboards-update"},{"id":"cli:data-export","kind":"cli","section":"CLI","text":"Download your data: records, links, schema and file metadata (ndjson), or --bundle (.tar.gz with file bytes). Owners and admins.","title":"agentdb data-export","url":"reference/cli.html#cli-data-export"},{"id":"cli:docs","kind":"cli","section":"CLI","text":"API and schema docs generated from this workspace (what you may see)","title":"agentdb docs","url":"reference/cli.html#cli-docs"},{"id":"cli:files","kind":"cli","section":"CLI","text":"Upload, download, attach and delete files (AgentFiles)","title":"agentdb files","url":"reference/cli.html#cli-files"},{"id":"cli:files attach","kind":"cli","section":"CLI","text":"","title":"agentdb files attach","url":"reference/cli.html#cli-files-attach"},{"id":"cli:files delete","kind":"cli","section":"CLI","text":"","title":"agentdb files delete","url":"reference/cli.html#cli-files-delete"},{"id":"cli:files delete-version","kind":"cli","section":"CLI","text":"Delete an earlier version or cancel a pending replacement","title":"agentdb files delete-version","url":"reference/cli.html#cli-files-delete-version"},{"id":"cli:files detach","kind":"cli","section":"CLI","text":"","title":"agentdb files detach","url":"reference/cli.html#cli-files-detach"},{"id":"cli:files download","kind":"cli","section":"CLI","text":"","title":"agentdb files download","url":"reference/cli.html#cli-files-download"},{"id":"cli:files get","kind":"cli","section":"CLI","text":"","title":"agentdb files get","url":"reference/cli.html#cli-files-get"},{"id":"cli:files link","kind":"cli","section":"CLI","text":"Signed, expiring link that opens the file without an API key (for dashboards and public apps)","title":"agentdb files link","url":"reference/cli.html#cli-files-link"},{"id":"cli:files links","kind":"cli","section":"CLI","text":"List signed file links (of one file, or of the workspace)","title":"agentdb files links","url":"reference/cli.html#cli-files-links"},{"id":"cli:files list","kind":"cli","section":"CLI","text":"","title":"agentdb files list","url":"reference/cli.html#cli-files-list"},{"id":"cli:files replace","kind":"cli","section":"CLI","text":"Upload new content for a file as a new version; attachments and file fields keep pointing at it","title":"agentdb files replace","url":"reference/cli.html#cli-files-replace"},{"id":"cli:files search","kind":"cli","section":"CLI","text":"Find files by name or indexed text (exact substring; reports what was indexed)","title":"agentdb files search","url":"reference/cli.html#cli-files-search"},{"id":"cli:files unlink","kind":"cli","section":"CLI","text":"Revoke a signed file link","title":"agentdb files unlink","url":"reference/cli.html#cli-files-unlink"},{"id":"cli:files update","kind":"cli","section":"CLI","text":"Rename a file or change its folder and tags (content is not changed)","title":"agentdb files update","url":"reference/cli.html#cli-files-update"},{"id":"cli:files upload","kind":"cli","section":"CLI","text":"Upload a file (streamed, checksum-verified) and optionally attach it to a record","title":"agentdb files upload","url":"reference/cli.html#cli-files-upload"},{"id":"cli:files versions","kind":"cli","section":"CLI","text":"Version history of a file","title":"agentdb files versions","url":"reference/cli.html#cli-files-versions"},{"id":"cli:flows","kind":"cli","section":"CLI","text":"Rules on record changes: trigger, where condition, actions (docs/SCHEDULER-AND-FLOWS.md)","title":"agentdb flows","url":"reference/cli.html#cli-flows"},{"id":"cli:flows create","kind":"cli","section":"CLI","text":"Create a flow (try it first with `flows test`)","title":"agentdb flows create","url":"reference/cli.html#cli-flows-create"},{"id":"cli:flows delete","kind":"cli","section":"CLI","text":"","title":"agentdb flows delete","url":"reference/cli.html#cli-flows-delete"},{"id":"cli:flows get","kind":"cli","section":"CLI","text":"One flow with versions and run counts","title":"agentdb flows get","url":"reference/cli.html#cli-flows-get"},{"id":"cli:flows list","kind":"cli","section":"CLI","text":"","title":"agentdb flows list","url":"reference/cli.html#cli-flows-list"},{"id":"cli:flows pause","kind":"cli","section":"CLI","text":"","title":"agentdb flows pause","url":"reference/cli.html#cli-flows-pause"},{"id":"cli:flows resume","kind":"cli","section":"CLI","text":"","title":"agentdb flows resume","url":"reference/cli.html#cli-flows-resume"},{"id":"cli:flows runs","kind":"cli","section":"CLI","text":"Flow run history (audit)","title":"agentdb flows runs","url":"reference/cli.html#cli-flows-runs"},{"id":"cli:flows test","kind":"cli","section":"CLI","text":"Dry run, e.g. --json '{\"flow_id\":\"flw_…\",\"record_id\":\"rec_…\"}' (nothing is written or sent)","title":"agentdb flows test","url":"reference/cli.html#cli-flows-test"},{"id":"cli:flows update","kind":"cli","section":"CLI","text":"Change a flow (keeps a new version)","title":"agentdb flows update","url":"reference/cli.html#cli-flows-update"},{"id":"cli:forms","kind":"cli","section":"CLI","text":"AgentForms: public forms that create records (packages install --template forms for an inquiry object)","title":"agentdb forms","url":"reference/cli.html#cli-forms"},{"id":"cli:forms create","kind":"cli","section":"CLI","text":"Create a form from a JSON definition (the token is shown once)","title":"agentdb forms create","url":"reference/cli.html#cli-forms-create"},{"id":"cli:forms delete","kind":"cli","section":"CLI","text":"","title":"agentdb forms delete","url":"reference/cli.html#cli-forms-delete"},{"id":"cli:forms discard","kind":"cli","section":"CLI","text":"","title":"agentdb forms discard","url":"reference/cli.html#cli-forms-discard"},{"id":"cli:forms get","kind":"cli","section":"CLI","text":"","title":"agentdb forms get","url":"reference/cli.html#cli-forms-get"},{"id":"cli:forms list","kind":"cli","section":"CLI","text":"","title":"agentdb forms list","url":"reference/cli.html#cli-forms-list"},{"id":"cli:forms release","kind":"cli","section":"CLI","text":"","title":"agentdb forms release","url":"reference/cli.html#cli-forms-release"},{"id":"cli:forms rotate-token","kind":"cli","section":"CLI","text":"","title":"agentdb forms rotate-token","url":"reference/cli.html#cli-forms-rotate-token"},{"id":"cli:forms submissions","kind":"cli","section":"CLI","text":"","title":"agentdb forms submissions","url":"reference/cli.html#cli-forms-submissions"},{"id":"cli:forms update","kind":"cli","section":"CLI","text":"Needs the current version, e.g. --json '{\"version\":1,\"status\":\"closed\"}'","title":"agentdb forms update","url":"reference/cli.html#cli-forms-update"},{"id":"cli:import","kind":"cli","section":"CLI","text":"Import a CSV/JSON/JSONL file on the server. Without --object/--match-on (or with --inspect) it only inspects: columns, types, match keys, spelling variants and suggested normalize rules. Run with --dry-run first; --normalize applies only the rules you give and reports every chan…","title":"agentdb import","url":"reference/cli.html#cli-import"},{"id":"cli:inbox","kind":"cli","section":"CLI","text":"Your inbox: mentions, direct messages, assignments, notifications","title":"agentdb inbox","url":"reference/cli.html#cli-inbox"},{"id":"cli:inbox done","kind":"cli","section":"CLI","text":"Mark an item done","title":"agentdb inbox done","url":"reference/cli.html#cli-inbox-done"},{"id":"cli:inbox list","kind":"cli","section":"CLI","text":"","title":"agentdb inbox list","url":"reference/cli.html#cli-inbox-list"},{"id":"cli:inbox notify","kind":"cli","section":"CLI","text":"","title":"agentdb inbox notify","url":"reference/cli.html#cli-inbox-notify"},{"id":"cli:inbox read","kind":"cli","section":"CLI","text":"Mark an item read","title":"agentdb inbox read","url":"reference/cli.html#cli-inbox-read"},{"id":"cli:inbox unread","kind":"cli","section":"CLI","text":"Mark an item unread","title":"agentdb inbox unread","url":"reference/cli.html#cli-inbox-unread"},{"id":"cli:indexes","kind":"cli","section":"CLI","text":"Named indexes on often-filtered fields (max 5 per object, 20 per workspace)","title":"agentdb indexes","url":"reference/cli.html#cli-indexes"},{"id":"cli:indexes create","kind":"cli","section":"CLI","text":"","title":"agentdb indexes create","url":"reference/cli.html#cli-indexes-create"},{"id":"cli:indexes drop","kind":"cli","section":"CLI","text":"","title":"agentdb indexes drop","url":"reference/cli.html#cli-indexes-drop"},{"id":"cli:indexes list","kind":"cli","section":"CLI","text":"","title":"agentdb indexes list","url":"reference/cli.html#cli-indexes-list"},{"id":"cli:integrity","kind":"cli","section":"CLI","text":"Dry-run integrity report: required relationships and records missing their link","title":"agentdb integrity","url":"reference/cli.html#cli-integrity"},{"id":"cli:jobs","kind":"cli","section":"CLI","text":"Scheduled jobs: once, cron or RRULE in an IANA time zone (docs/SCHEDULER-AND-FLOWS.md)","title":"agentdb jobs","url":"reference/cli.html#cli-jobs"},{"id":"cli:jobs cancel","kind":"cli","section":"CLI","text":"Cancel for good","title":"agentdb jobs cancel","url":"reference/cli.html#cli-jobs-cancel"},{"id":"cli:jobs create","kind":"cli","section":"CLI","text":"e.g. --json '{\"name\":\"Daily digest\",\"schedule\":{\"type\":\"cron\",\"expression\":\"0 9 * * 1-5\",\"timezone\":\"Europe/Amsterdam\"},\"action\":{\"type\":\"create_record\",\"object\":\"agent_task\",\"data\":{\"title\":\"Write digest\"}}}'","title":"agentdb jobs create","url":"reference/cli.html#cli-jobs-create"},{"id":"cli:jobs get","kind":"cli","section":"CLI","text":"One job with its next 5 run times","title":"agentdb jobs get","url":"reference/cli.html#cli-jobs-get"},{"id":"cli:jobs list","kind":"cli","section":"CLI","text":"","title":"agentdb jobs list","url":"reference/cli.html#cli-jobs-list"},{"id":"cli:jobs pause","kind":"cli","section":"CLI","text":"Run nothing until resumed","title":"agentdb jobs pause","url":"reference/cli.html#cli-jobs-pause"},{"id":"cli:jobs preview","kind":"cli","section":"CLI","text":"Next times of a schedule without creating it (also checks a recurrence field value)","title":"agentdb jobs preview","url":"reference/cli.html#cli-jobs-preview"},{"id":"cli:jobs resume","kind":"cli","section":"CLI","text":"Resume from now (missed times are not made up)","title":"agentdb jobs resume","url":"reference/cli.html#cli-jobs-resume"},{"id":"cli:jobs retry","kind":"cli","section":"CLI","text":"Retry a dead run","title":"agentdb jobs retry","url":"reference/cli.html#cli-jobs-retry"},{"id":"cli:jobs run","kind":"cli","section":"CLI","text":"Run once now","title":"agentdb jobs run","url":"reference/cli.html#cli-jobs-run"},{"id":"cli:jobs runs","kind":"cli","section":"CLI","text":"Run history, newest first","title":"agentdb jobs runs","url":"reference/cli.html#cli-jobs-runs"},{"id":"cli:jobs update","kind":"cli","section":"CLI","text":"Change name, schedule, action, missed or max_attempts","title":"agentdb jobs update","url":"reference/cli.html#cli-jobs-update"},{"id":"cli:knowledge","kind":"cli","section":"CLI","text":"Facts, decisions and documents with sources, versions and review (docs/KNOWLEDGE.md)","title":"agentdb knowledge","url":"reference/cli.html#cli-knowledge"},{"id":"cli:knowledge create","kind":"cli","section":"CLI","text":"Store an item with sources","title":"agentdb knowledge create","url":"reference/cli.html#cli-knowledge-create"},{"id":"cli:knowledge delete","kind":"cli","section":"CLI","text":"Archive (default); --purge --confirm removes it for good","title":"agentdb knowledge delete","url":"reference/cli.html#cli-knowledge-delete"},{"id":"cli:knowledge get","kind":"cli","section":"CLI","text":"","title":"agentdb knowledge get","url":"reference/cli.html#cli-knowledge-get"},{"id":"cli:knowledge list","kind":"cli","section":"CLI","text":"","title":"agentdb knowledge list","url":"reference/cli.html#cli-knowledge-list"},{"id":"cli:knowledge propose","kind":"cli","section":"CLI","text":"Propose a change or contradiction with a reason","title":"agentdb knowledge propose","url":"reference/cli.html#cli-knowledge-propose"},{"id":"cli:knowledge provenance","kind":"cli","section":"CLI","text":"","title":"agentdb knowledge provenance","url":"reference/cli.html#cli-knowledge-provenance"},{"id":"cli:knowledge review","kind":"cli","section":"CLI","text":"Owners/admins: accept or reject a proposal","title":"agentdb knowledge review","url":"reference/cli.html#cli-knowledge-review"},{"id":"cli:knowledge search","kind":"cli","section":"CLI","text":"","title":"agentdb knowledge search","url":"reference/cli.html#cli-knowledge-search"},{"id":"cli:knowledge update","kind":"cli","section":"CLI","text":"New version (a proposal on trusted items unless you are an owner/admin)","title":"agentdb knowledge update","url":"reference/cli.html#cli-knowledge-update"},{"id":"cli:knowledge versions","kind":"cli","section":"CLI","text":"","title":"agentdb knowledge versions","url":"reference/cli.html#cli-knowledge-versions"},{"id":"cli:lifecycle","kind":"cli","section":"CLI","text":"Retention of the recycle bin per object","title":"agentdb lifecycle","url":"reference/cli.html#cli-lifecycle"},{"id":"cli:lifecycle info","kind":"cli","section":"CLI","text":"","title":"agentdb lifecycle info","url":"reference/cli.html#cli-lifecycle-info"},{"id":"cli:lifecycle retention","kind":"cli","section":"CLI","text":"Days deleted records stay restorable (0 = permanent deletes, 'default' = 30)","title":"agentdb lifecycle retention","url":"reference/cli.html#cli-lifecycle-retention"},{"id":"cli:login","kind":"cli","section":"CLI","text":"Log in through the browser (or --api-key) and save the key in the OS credential store","title":"agentdb login","url":"reference/cli.html#cli-login"},{"id":"cli:logout","kind":"cli","section":"CLI","text":"Remove the saved key; a key issued by `agentdb login` is also revoked on the server","title":"agentdb logout","url":"reference/cli.html#cli-logout"},{"id":"cli:mcp","kind":"cli","section":"CLI","text":"Connect AI tools (Claude Code, Codex, Cursor, VS Code, Claude Desktop, Windsurf, Gemini CLI) to AgentDB","title":"agentdb mcp","url":"reference/cli.html#cli-mcp"},{"id":"cli:mcp install","kind":"cli","section":"CLI","text":"Register AgentDB in an AI tool (claude | codex | cursor | vscode | claude-desktop | windsurf | gemini); the tool runs `agentdb mcp proxy`, so no key is written to its config","title":"agentdb mcp install","url":"reference/cli.html#cli-mcp-install"},{"id":"cli:mcp list","kind":"cli","section":"CLI","text":"Show which AI tools have AgentDB configured","title":"agentdb mcp list","url":"reference/cli.html#cli-mcp-list"},{"id":"cli:mcp proxy","kind":"cli","section":"CLI","text":"stdio MCP server forwarding to AgentDB with the saved login (started by the AI tool, not by you)","title":"agentdb mcp proxy","url":"reference/cli.html#cli-mcp-proxy"},{"id":"cli:mcp remove","kind":"cli","section":"CLI","text":"Remove AgentDB from an AI tool (other servers and settings are kept)","title":"agentdb mcp remove","url":"reference/cli.html#cli-mcp-remove"},{"id":"cli:members","kind":"cli","section":"CLI","text":"People in the workspace: invite by email with a role (viewer, editor, admin)","title":"agentdb members","url":"reference/cli.html#cli-members"},{"id":"cli:members invite","kind":"cli","section":"CLI","text":"Email a 7-day invitation link","title":"agentdb members invite","url":"reference/cli.html#cli-members-invite"},{"id":"cli:members list","kind":"cli","section":"CLI","text":"Owner, members and open invitations (owner/admin)","title":"agentdb members list","url":"reference/cli.html#cli-members-list"},{"id":"cli:members remove","kind":"cli","section":"CLI","text":"Remove a member or withdraw an invitation","title":"agentdb members remove","url":"reference/cli.html#cli-members-remove"},{"id":"cli:members role","kind":"cli","section":"CLI","text":"Change a member's role","title":"agentdb members role","url":"reference/cli.html#cli-members-role"},{"id":"cli:packages","kind":"cli","section":"CLI","text":"Versioned schema packages and templates (install is additive and idempotent)","title":"agentdb packages","url":"reference/cli.html#cli-packages"},{"id":"cli:packages get","kind":"cli","section":"CLI","text":"A package's or template's manifest","title":"agentdb packages get","url":"reference/cli.html#cli-packages-get"},{"id":"cli:packages install","kind":"cli","section":"CLI","text":"Install or upgrade a package from a JSON manifest, or --template crm|agent_crm|agent_todos|agent_kanban|agent_projects|support|recruit|property|inventory|assets","title":"agentdb packages install","url":"reference/cli.html#cli-packages-install"},{"id":"cli:packages list","kind":"cli","section":"CLI","text":"Installed packages and built-in templates","title":"agentdb packages list","url":"reference/cli.html#cli-packages-list"},{"id":"cli:packages uninstall","kind":"cli","section":"CLI","text":"Forget a package (and its views, flows and approval policies); objects, fields and records stay","title":"agentdb packages uninstall","url":"reference/cli.html#cli-packages-uninstall"},{"id":"cli:permissions","kind":"cli","section":"CLI","text":"Rules that narrow a role per object, field or owned record","title":"agentdb permissions","url":"reference/cli.html#cli-permissions"},{"id":"cli:permissions list","kind":"cli","section":"CLI","text":"All rules (owner/admin)","title":"agentdb permissions list","url":"reference/cli.html#cli-permissions-list"},{"id":"cli:permissions remove","kind":"cli","section":"CLI","text":"Remove a rule","title":"agentdb permissions remove","url":"reference/cli.html#cli-permissions-remove"},{"id":"cli:permissions set","kind":"cli","section":"CLI","text":"Create or replace a rule; subject is role:viewer, role:editor, user:<acc_…> or agent:<agt_…>","title":"agentdb permissions set","url":"reference/cli.html#cli-permissions-set"},{"id":"cli:query","kind":"cli","section":"CLI","text":"Run a typed query (see docs/QUICKSTART.md for the DSL)","title":"agentdb query","url":"reference/cli.html#cli-query"},{"id":"cli:records","kind":"cli","section":"CLI","text":"Create, read, update, upsert, delete, count and link records","title":"agentdb records","url":"reference/cli.html#cli-records"},{"id":"cli:records archive","kind":"cli","section":"CLI","text":"Archive records (left out of queries unless --archived / include_archived)","title":"agentdb records archive","url":"reference/cli.html#cli-records-archive"},{"id":"cli:records count","kind":"cli","section":"CLI","text":"Count records, optionally filtered and grouped (server-side; use `aggregate` for sums and averages)","title":"agentdb records count","url":"reference/cli.html#cli-records-count"},{"id":"cli:records create","kind":"cli","section":"CLI","text":"","title":"agentdb records create","url":"reference/cli.html#cli-records-create"},{"id":"cli:records delete","kind":"cli","section":"CLI","text":"Delete one record (and its links and attachments; files are kept)","title":"agentdb records delete","url":"reference/cli.html#cli-records-delete"},{"id":"cli:records delete-many","kind":"cli","section":"CLI","text":"Delete up to 1000 records by --ids or by --where (needs --expected-count; try --dry-run first)","title":"agentdb records delete-many","url":"reference/cli.html#cli-records-delete-many"},{"id":"cli:records duplicates","kind":"cli","section":"CLI","text":"Duplicate suggestions, e.g. --json '{\"object\":\"contact\",\"fields\":[\"name\"],\"mode\":\"normalized\"}'","title":"agentdb records duplicates","url":"reference/cli.html#cli-records-duplicates"},{"id":"cli:records get","kind":"cli","section":"CLI","text":"","title":"agentdb records get","url":"reference/cli.html#cli-records-get"},{"id":"cli:records link","kind":"cli","section":"CLI","text":"","title":"agentdb records link","url":"reference/cli.html#cli-records-link"},{"id":"cli:records link-batch","kind":"cli","section":"CLI","text":"Bulk link from a JSONL file or JSON array; one {\"source_record_id\"|\"source_key\", \"target_record_id\"|\"target_key\", \"client_ref\"?} per line, where a key is {\"<unique field>\": value}. Sent in batches; each batch is one server transaction.","title":"agentdb records link-batch","url":"reference/cli.html#cli-records-link-batch"},{"id":"cli:records list","kind":"cli","section":"CLI","text":"List records of one object type (oldest first unless --sort); use `query` for filters","title":"agentdb records list","url":"reference/cli.html#cli-records-list"},{"id":"cli:records merge","kind":"cli","section":"CLI","text":"Merge with explicit field_choices and versions from merge-preview","title":"agentdb records merge","url":"reference/cli.html#cli-records-merge"},{"id":"cli:records merge-preview","kind":"cli","section":"CLI","text":"What a merge would do: values, conflicts, links and files that move","title":"agentdb records merge-preview","url":"reference/cli.html#cli-records-merge-preview"},{"id":"cli:records merge-undo","kind":"cli","section":"CLI","text":"Undo a merge while the merged records are in the recycle bin","title":"agentdb records merge-undo","url":"reference/cli.html#cli-records-merge-undo"},{"id":"cli:records merges","kind":"cli","section":"CLI","text":"Merge history","title":"agentdb records merges","url":"reference/cli.html#cli-records-merges"},{"id":"cli:records purge","kind":"cli","section":"CLI","text":"Delete records in the recycle bin for good (cannot be undone)","title":"agentdb records purge","url":"reference/cli.html#cli-records-purge"},{"id":"cli:records recycle-bin","kind":"cli","section":"CLI","text":"Deleted records that can still be restored","title":"agentdb records recycle-bin","url":"reference/cli.html#cli-records-recycle-bin"},{"id":"cli:records related","kind":"cli","section":"CLI","text":"","title":"agentdb records related","url":"reference/cli.html#cli-records-related"},{"id":"cli:records restore","kind":"cli","section":"CLI","text":"Restore deleted records with their links and attachments","title":"agentdb records restore","url":"reference/cli.html#cli-records-restore"},{"id":"cli:records unarchive","kind":"cli","section":"CLI","text":"Bring archived records back into queries","title":"agentdb records unarchive","url":"reference/cli.html#cli-records-unarchive"},{"id":"cli:records unlink","kind":"cli","section":"CLI","text":"","title":"agentdb records unlink","url":"reference/cli.html#cli-records-unlink"},{"id":"cli:records update","kind":"cli","section":"CLI","text":"","title":"agentdb records update","url":"reference/cli.html#cli-records-update"},{"id":"cli:records upsert","kind":"cli","section":"CLI","text":"Bulk create-or-update from a JSONL file (one {\"data\":{...},\"id\"?,\"version\"?} per line) or a JSON array of such items. Sent in batches; each batch is one server transaction.","title":"agentdb records upsert","url":"reference/cli.html#cli-records-upsert"},{"id":"cli:records upsert-one","kind":"cli","section":"CLI","text":"Create-or-update one record by its match key, e.g. --match-on first_name,last_name,company --data '{\"first_name\":\"Ann\",...}'","title":"agentdb records upsert-one","url":"reference/cli.html#cli-records-upsert-one"},{"id":"cli:relationships","kind":"cli","section":"CLI","text":"Relationship types (required flag)","title":"agentdb relationships","url":"reference/cli.html#cli-relationships"},{"id":"cli:relationships require","kind":"cli","section":"CLI","text":"Make a relationship required (--off: optional again)","title":"agentdb relationships require","url":"reference/cli.html#cli-relationships-require"},{"id":"cli:schema","kind":"cli","section":"CLI","text":"Inspect and change the logical schema (objects, fields, relationships, unique keys)","title":"agentdb schema","url":"reference/cli.html#cli-schema"},{"id":"cli:schema field-add","kind":"cli","section":"CLI","text":"","title":"agentdb schema field-add","url":"reference/cli.html#cli-schema-field-add"},{"id":"cli:schema field-remove","kind":"cli","section":"CLI","text":"Remove a field and its value from every record (needs --confirm; --dry-run previews)","title":"agentdb schema field-remove","url":"reference/cli.html#cli-schema-field-remove"},{"id":"cli:schema field-update","kind":"cli","section":"CLI","text":"Rename, retype or change a field. Every record is validated first; nothing changes on failure. Use --dry-run to preview.","title":"agentdb schema field-update","url":"reference/cli.html#cli-schema-field-update"},{"id":"cli:schema history","kind":"cli","section":"CLI","text":"Schema changes, newest first, with the definition before and after (find a change id to undo)","title":"agentdb schema history","url":"reference/cli.html#cli-schema-history"},{"id":"cli:schema inspect","kind":"cli","section":"CLI","text":"List objects, fields and relationships","title":"agentdb schema inspect","url":"reference/cli.html#cli-schema-inspect"},{"id":"cli:schema object-create","kind":"cli","section":"CLI","text":"","title":"agentdb schema object-create","url":"reference/cli.html#cli-schema-object-create"},{"id":"cli:schema relationship-add","kind":"cli","section":"CLI","text":"","title":"agentdb schema relationship-add","url":"reference/cli.html#cli-schema-relationship-add"},{"id":"cli:schema undo","kind":"cli","section":"CLI","text":"Reverse one schema change and restore archived values (--dry-run previews; --confirm when values are removed or can't all be restored)","title":"agentdb schema undo","url":"reference/cli.html#cli-schema-undo"},{"id":"cli:schema unique-key-add","kind":"cli","section":"CLI","text":"Declare fields that together identify a record (comma-separated, 2-5), usable as --match-on a,b,c","title":"agentdb schema unique-key-add","url":"reference/cli.html#cli-schema-unique-key-add"},{"id":"cli:schema unique-key-remove","kind":"cli","section":"CLI","text":"","title":"agentdb schema unique-key-remove","url":"reference/cli.html#cli-schema-unique-key-remove"},{"id":"cli:search","kind":"cli","section":"CLI","text":"Full-text search (enable per object with `search configure`) and semantic search (off by default)","title":"agentdb search","url":"reference/cli.html#cli-search"},{"id":"cli:search config","kind":"cli","section":"CLI","text":"Objects with a full-text index","title":"agentdb search config","url":"reference/cli.html#cli-search-config"},{"id":"cli:search configure","kind":"cli","section":"CLI","text":"Enable (and build) the full-text index of an object; --disable removes it","title":"agentdb search configure","url":"reference/cli.html#cli-search-configure"},{"id":"cli:search query","kind":"cli","section":"CLI","text":"Records containing every word (--any: at least one); ranked, with highlights","title":"agentdb search query","url":"reference/cli.html#cli-search-query"},{"id":"cli:search semantic","kind":"cli","section":"CLI","text":"Semantic ranking (FEATURE_DISABLED unless the operator enabled a provider)","title":"agentdb search semantic","url":"reference/cli.html#cli-search-semantic"},{"id":"cli:skill","kind":"cli","section":"CLI","text":"The official AgentDB agent skill (SKILL.md)","title":"agentdb skill","url":"reference/cli.html#cli-skill"},{"id":"cli:skill install","kind":"cli","section":"CLI","text":"Install SKILL.md for Claude Code (~/.claude/skills/agentdb/SKILL.md)","title":"agentdb skill install","url":"reference/cli.html#cli-skill-install"},{"id":"cli:skill print","kind":"cli","section":"CLI","text":"Print SKILL.md","title":"agentdb skill print","url":"reference/cli.html#cli-skill-print"},{"id":"cli:status","kind":"cli","section":"CLI","text":"Login, server and MCP setup at a glance (never prints secrets)","title":"agentdb status","url":"reference/cli.html#cli-status"},{"id":"cli:views","kind":"cli","section":"CLI","text":"Saved views: named, versioned queries (private or shared in the workspace)","title":"agentdb views","url":"reference/cli.html#cli-views"},{"id":"cli:views create","kind":"cli","section":"CLI","text":"e.g. --json '{\"name\":\"open_deals\",\"object\":\"deal\",\"visibility\":\"workspace\",\"definition\":{\"where\":{\"all\":[…]}}}'","title":"agentdb views create","url":"reference/cli.html#cli-views-create"},{"id":"cli:views delete","kind":"cli","section":"CLI","text":"","title":"agentdb views delete","url":"reference/cli.html#cli-views-delete"},{"id":"cli:views get","kind":"cli","section":"CLI","text":"A view with its versions","title":"agentdb views get","url":"reference/cli.html#cli-views-get"},{"id":"cli:views list","kind":"cli","section":"CLI","text":"","title":"agentdb views list","url":"reference/cli.html#cli-views-list"},{"id":"cli:views run","kind":"cli","section":"CLI","text":"","title":"agentdb views run","url":"reference/cli.html#cli-views-run"},{"id":"cli:views update","kind":"cli","section":"CLI","text":"Needs the current version, e.g. --json '{\"version\":1,\"name\":\"x\"}'","title":"agentdb views update","url":"reference/cli.html#cli-views-update"},{"id":"cli:webhooks","kind":"cli","section":"CLI","text":"Signed https webhooks for change events, jobs and flows (docs/WEBHOOKS.md)","title":"agentdb webhooks","url":"reference/cli.html#cli-webhooks"},{"id":"cli:webhooks create","kind":"cli","section":"CLI","text":"Register an https endpoint; prints the signing secret ONCE","title":"agentdb webhooks create","url":"reference/cli.html#cli-webhooks-create"},{"id":"cli:webhooks delete","kind":"cli","section":"CLI","text":"Delete; queued deliveries are cancelled","title":"agentdb webhooks delete","url":"reference/cli.html#cli-webhooks-delete"},{"id":"cli:webhooks deliveries","kind":"cli","section":"CLI","text":"Delivery log, newest first (status: pending, delivering, succeeded, dead, cancelled)","title":"agentdb webhooks deliveries","url":"reference/cli.html#cli-webhooks-deliveries"},{"id":"cli:webhooks get","kind":"cli","section":"CLI","text":"One webhook with delivery counts","title":"agentdb webhooks get","url":"reference/cli.html#cli-webhooks-get"},{"id":"cli:webhooks list","kind":"cli","section":"CLI","text":"List webhooks (never shows secrets)","title":"agentdb webhooks list","url":"reference/cli.html#cli-webhooks-list"},{"id":"cli:webhooks pause","kind":"cli","section":"CLI","text":"Stop sending (events keep queueing)","title":"agentdb webhooks pause","url":"reference/cli.html#cli-webhooks-pause"},{"id":"cli:webhooks redeliver","kind":"cli","section":"CLI","text":"Send a finished delivery again (same event id)","title":"agentdb webhooks redeliver","url":"reference/cli.html#cli-webhooks-redeliver"},{"id":"cli:webhooks resume","kind":"cli","section":"CLI","text":"Send again (also after an automatic disable)","title":"agentdb webhooks resume","url":"reference/cli.html#cli-webhooks-resume"},{"id":"cli:webhooks rotate-secret","kind":"cli","section":"CLI","text":"New secret (printed once); the old one also signs during the grace period","title":"agentdb webhooks rotate-secret","url":"reference/cli.html#cli-webhooks-rotate-secret"},{"id":"cli:webhooks test","kind":"cli","section":"CLI","text":"Queue a signed webhook.test delivery","title":"agentdb webhooks test","url":"reference/cli.html#cli-webhooks-test"},{"id":"cli:webhooks update","kind":"cli","section":"CLI","text":"Change url, events, objects or name","title":"agentdb webhooks update","url":"reference/cli.html#cli-webhooks-update"},{"id":"cli:whoami","kind":"cli","section":"CLI","text":"Show the workspace and key the CLI uses (checks it with the server)","title":"agentdb whoami","url":"reference/cli.html#cli-whoami"},{"id":"cli:workspace","kind":"cli","section":"CLI","text":"List, create, select and rename workspaces (projects)","title":"agentdb workspace","url":"reference/cli.html#cli-workspace"},{"id":"cli:workspace create","kind":"cli","section":"CLI","text":"Create a workspace in your account, e.g. agentdb workspace create \"My Application\" (needs an account login)","title":"agentdb workspace create","url":"reference/cli.html#cli-workspace-create"},{"id":"cli:workspace current","kind":"cli","section":"CLI","text":"Show which workspace commands use here, and why","title":"agentdb workspace current","url":"reference/cli.html#cli-workspace-current"},{"id":"cli:workspace delete","kind":"cli","section":"CLI","text":"Not available from the CLI (explorer only since rc.8): the owner deletes a workspace in /app, Settings tab","title":"agentdb workspace delete","url":"reference/cli.html#cli-workspace-delete"},{"id":"cli:workspace import","kind":"cli","section":"CLI","text":"Re-import a data-export bundle (.tar.gz from `data-export --bundle`, or .ndjson) into a NEW workspace of your account (needs an account login)","title":"agentdb workspace import","url":"reference/cli.html#cli-workspace-import"},{"id":"cli:workspace info","kind":"cli","section":"CLI","text":"Show the current workspace with its quotas","title":"agentdb workspace info","url":"reference/cli.html#cli-workspace-info"},{"id":"cli:workspace list","kind":"cli","section":"CLI","text":"Workspaces this login can use; * marks the one commands use here","title":"agentdb workspace list","url":"reference/cli.html#cli-workspace-list"},{"id":"cli:workspace rename","kind":"cli","section":"CLI","text":"Rename a workspace, e.g. agentdb workspace rename my-application \"New Name\" (id and data stay the same)","title":"agentdb workspace rename","url":"reference/cli.html#cli-workspace-rename"},{"id":"cli:workspace restore","kind":"cli","section":"CLI","text":"Not available from the CLI (explorer only since rc.8): the owner restores a workspace in /app, Settings tab","title":"agentdb workspace restore","url":"reference/cli.html#cli-workspace-restore"},{"id":"cli:workspace use","kind":"cli","section":"CLI","text":"Select a workspace (id, slug or name) for later commands and for `agentdb mcp proxy`","title":"agentdb workspace use","url":"reference/cli.html#cli-workspace-use"},{"id":"guide:accounts-and-security","kind":"guide","section":"Account and security","text":"Sign in safely, use two-step sign-in, manage API keys and agents, invite people with roles, and delete a workspace.","title":"Accounts and security","url":"accounts-and-security.html"},{"id":"guide:accounts-and-security#api-keys","kind":"guide","section":"Account and security","text":"An API key lets an agent, a script or the CLI use AgentDB. It starts with adbk. and goes in the Authorization header: There are two kinds: Account key: reaches every workspace of your account. Create it in Settings → Account API keys. Agent key: belongs to one named agent in one…","title":"Accounts and security: API keys","url":"accounts-and-security.html#api-keys"},{"id":"guide:accounts-and-security#delete-a-workspace","kind":"guide","section":"Account and security","text":"Only the owner can delete a workspace. This works only in the app, never with an API key or an AI agent. Sign in to the app as the owner. Export your data first, if you want a copy. See Files and imports. Open Settings and choose to delete the workspace. Type the workspace name…","title":"Accounts and security: Delete a workspace","url":"accounts-and-security.html#delete-a-workspace"},{"id":"guide:accounts-and-security#members","kind":"guide","section":"Account and security","text":"Invite people to a workspace by email, with a role. Owners and admins invite from Settings in the app, or with the API. The invitation link works once, for 7 days. The person needs no account first. Accepting the invitation signs them in. An admin manages only members with a low…","title":"Accounts and security: Members","url":"accounts-and-security.html#members"},{"id":"guide:accounts-and-security#named-agents","kind":"guide","section":"Account and security","text":"Give each AI agent its own key and role. Then you can see what each agent did, and stop one without stopping the rest. The key is shown once. Give it only to that agent. The role is viewer, editor or admin. It can never be higher than your own role. expires_in_hours makes the ag…","title":"Accounts and security: Named agents","url":"accounts-and-security.html#named-agents"},{"id":"guide:accounts-and-security#roles-and-permissions","kind":"guide","section":"Account and security","text":"Every person and agent in a workspace has a role: Permission rules narrow access further. A rule can hide an object or a field, or make it read-only. Rules apply to viewers, editors and agents. They never apply to owners or admins. This rule makes the salary field invisible to e…","title":"Accounts and security: Roles and permissions","url":"accounts-and-security.html#roles-and-permissions"},{"id":"guide:accounts-and-security#sign-in","kind":"guide","section":"Account and security","text":"People sign in to the app at https://app.agentdb.link/app/login. There are three ways: The emailed link always works, also for accounts without a password. Password rules: 12 to 256 characters. AgentDB refuses common passwords and your email address. A few unrelated words make a…","title":"Accounts and security: Sign in","url":"accounts-and-security.html#sign-in"},{"id":"guide:accounts-and-security#two-step-sign-in","kind":"guide","section":"Account and security","text":"Two-step sign-in asks for a second proof after your password or emailed link. Turn it on in Settings → Sign-in and security. Your email address must be confirmed first. Second factors: Authenticator app: a 6-digit code from an app such as 1Password, Google Authenticator or Aegis…","title":"Accounts and security: Two-step sign-in","url":"accounts-and-security.html#two-step-sign-in"},{"id":"guide:accounts-and-security#your-account","kind":"guide","section":"Account and security","text":"An account belongs to one email address. It can own several workspaces. Each workspace is a separate project with its own data. Create an account at https://app.agentdb.link/app/sign-up. AgentDB emails a confirmation link, valid for 24 hours. You can sign in with your password a…","title":"Accounts and security: Your account","url":"accounts-and-security.html#your-account"},{"id":"guide:app-packages","kind":"guide","section":"Build and automate","text":"Install ready-made apps such as a CRM, to-do list, Kanban board or help desk, and start working right away.","title":"App packages","url":"app-packages.html"},{"id":"guide:app-packages#available-packages","kind":"guide","section":"Build and automate","text":"crm is an older, smaller CRM. Use agent_crm for new workspaces. The app package reference lists every object, field and view. All task-based packages share one task object. So a CRM follow-up is also a to-do, and a card on the Kanban board.","title":"App packages: Available packages","url":"app-packages.html#available-packages"},{"id":"guide:app-packages#example-a-small-crm","kind":"guide","section":"Build and automate","text":"After installing agent_crm, add a company and a contact. The contact links to the company by its unique name, so you do not need the record id. Now add a deal and link it to the company. Money fields hold an amount and a currency. A deal moves through fixed stages, from lead to…","title":"App packages: Example: a small CRM","url":"app-packages.html#example-a-small-crm"},{"id":"guide:app-packages#example-a-to-do-list-with-a-board","kind":"guide","section":"Build and automate","text":"Install the to-do app and the Kanban board. Both use the same task object. The task now shows in the to-do views and as a card on the board. AgentTodos makes sure a task with open dependencies cannot be marked done.","title":"App packages: Example: a to-do list with a board","url":"app-packages.html#example-a-to-do-list-with-a-board"},{"id":"guide:app-packages#example-import-your-contacts-into-the-crm","kind":"guide","section":"Build and automate","text":"You already have a spreadsheet of contacts. After installing agent_crm: Import the companies, matching on the unique name. Import the contacts, matching on the unique email. Link each contact to its company with the works_at relationship. imports_run does step 3 in the same call…","title":"App packages: Example: import your contacts into the CRM","url":"app-packages.html#example-import-your-contacts-into-the-crm"},{"id":"guide:app-packages#install-a-package","kind":"guide","section":"Build and automate","text":"What an install does, and does not do: Additive. It only adds objects, fields, links and views. It never removes or retypes a field. Safe to repeat. A second install of the same version changes nothing. Your data stays. An install never touches your records. Upgrades add new ite…","title":"App packages: Install a package","url":"app-packages.html#install-a-package"},{"id":"guide:app-packages#see-what-an-install-will-do","kind":"guide","section":"Build and automate","text":"Start with a dry run. It shows every object, field, link and view the install would create. Nothing is written. The answer has a summary with counts, and an actions list. Each action says create, unchanged, conflict or skipped. A conflict means your workspace already has that it…","title":"App packages: See what an install will do","url":"app-packages.html#see-what-an-install-will-do"},{"id":"guide:app-packages#try-it-with-sample-data","kind":"guide","section":"Build and automate","text":"sample_data: true adds made-up records, so you can explore before you add your own. For the CRM that is a few agencies, contacts, leads, deals in every stage, activities and notes. All names are invented. Tip: install sample data in a separate test workspace, so it never mixes w…","title":"App packages: Try it with sample data","url":"app-packages.html#try-it-with-sample-data"},{"id":"guide:automation","kind":"guide","section":"Build and automate","text":"React to changes with signed webhooks, run scheduled jobs and flows, and coordinate agents through channels, the inbox and calendars.","title":"Automation","url":"automation.html"},{"id":"guide:automation#calendar","kind":"guide","section":"Build and automate","text":"Calendars book time for people, agents and resources, such as a meeting room. calendar_find_slots finds a free time for several calendars and people. It books nothing. recurrence takes a repeat rule, such as FREQ=WEEKLY;BYDAY=MO. reminders send calendar.reminder events before th…","title":"Automation: Calendar","url":"automation.html#calendar"},{"id":"guide:automation#channels-and-messages","kind":"guide","section":"Build and automate","text":"A channel holds work messages between agents and people. Messages stay until you remove them or the channel's retention ends. Public channels are readable by everyone in the workspace. Private channels are visible to members only. A message is Markdown. It can also carry a struc…","title":"Automation: Channels and messages","url":"automation.html#channels-and-messages"},{"id":"guide:automation#flows","kind":"guide","section":"Build and automate","text":"A flow is a rule: \"when this happens, do that\". It reacts to records being created, updated or deleted, or to a field changing. Values such as {{record.data.name}}, {{record.id}} or {{today+30d}} are filled in when the flow runs. Actions: set_field changes the record that starte…","title":"Automation: Flows","url":"automation.html#flows"},{"id":"guide:automation#inbox","kind":"guide","section":"Build and automate","text":"Each agent, member and key has an inbox. It collects mentions, direct messages, assignments and notifications. inbox_update marks items as read or done. People see their inbox in the AgentHub. The inbox is experimental and may change before version 2.0.","title":"Automation: Inbox","url":"automation.html#inbox"},{"id":"guide:automation#scheduled-jobs","kind":"guide","section":"Build and automate","text":"A job runs an action at a set time. There are three kinds of schedule: Check a schedule before you save it. schedule_preview lists the next times and creates nothing. This job creates a task every Monday at 09:00, London time: Actions: create_record: for example a task record yo…","title":"Automation: Scheduled jobs","url":"automation.html#scheduled-jobs"},{"id":"guide:automation#webhooks","kind":"guide","section":"Build and automate","text":"A webhook sends an HTTPS POST to your endpoint when something happens. You choose the events, and optionally the objects. The secret is shown once. It starts with whsec_. Store it on your server. webhooks_rotate_secret gives a new one. Events include record, relationship, schema…","title":"Automation: Webhooks","url":"automation.html#webhooks"},{"id":"guide:build/crm-example","kind":"guide","section":"Build with AgentDB","text":"A complete small CRM on AgentDB, in TypeScript and in plain PHP, with contacts, companies, links, search, edits and live updates.","title":"CRM example","url":"build/crm-example.html"},{"id":"guide:build/crm-example#client","kind":"guide","section":"Build with AgentDB","text":"TypeScript uses the built-in fetch: PHP uses its built-in HTTP stream wrapper:","title":"CRM example: 2. Call AgentDB from the server","url":"build/crm-example.html#client"},{"id":"guide:build/crm-example#create","kind":"guide","section":"Build with AgentDB","text":"POST /records writes the record and its works_at link in one call. Either both are saved or neither is. The submit id makes a retry safe.","title":"CRM example: 4. Create a contact and its link","url":"build/crm-example.html#create"},{"id":"guide:build/crm-example#edit","kind":"guide","section":"Build with AgentDB","text":"The edit form keeps the record's version. AgentDB refuses the save with VERSION_CONFLICT when someone saved first. Moving a contact to another company removes the old link and adds a new one. The PHP version does the same with a hidden version field:","title":"CRM example: 5. Edit with version checks","url":"build/crm-example.html#edit"},{"id":"guide:build/crm-example#list","kind":"guide","section":"Build with AgentDB","text":"A search runs one query with contains on the name. A company filter follows the works_at links into that company (direction=incoming). The PHP version renders the same list on the server:","title":"CRM example: 3. List, search and filter","url":"build/crm-example.html#list"},{"id":"guide:build/crm-example#live","kind":"guide","section":"Build with AgentDB","text":"The live-dashboard starter shows the number of contacts and the latest changes, and updates about one second after any change. On the server, one loop follows the change feed with a read-only viewer key. wait=1 makes AgentDB answer as soon as something changes. To the browser, t…","title":"CRM example: 7. Live updates","url":"build/crm-example.html#live"},{"id":"guide:build/crm-example#run","kind":"guide","section":"Build with AgentDB","text":"Each starter needs a .env made from its .env.example. To put one online, see Deployment.","title":"CRM example: Run it","url":"build/crm-example.html#run"},{"id":"guide:build/crm-example#schema","kind":"guide","section":"Build with AgentDB","text":"Run the setup script once with an owner key. It defines the objects and the link, adds \"Example Ltd\" and \"Ada Lovelace\", and creates a separate editor key for the app. The schema it creates: Put the printed agent key in the app's .env as AGENTDB_TOKEN. The owner key stays with y…","title":"CRM example: 1. Define the data","url":"build/crm-example.html#schema"},{"id":"guide:build/crm-example#split","kind":"guide","section":"Build with AgentDB","text":"AgentDB has no user accounts for your app's visitors. Your app signs its users in and decides what each one may do. Then it calls AgentDB with its own key. See Security for apps.","title":"CRM example: AgentDB provides, your app builds","url":"build/crm-example.html#split"},{"id":"guide:build/crm-example#states","kind":"guide","section":"Build with AgentDB","text":"The backend turns AgentDB errors into short messages and fitting status codes: The TypeScript page uses one helper for every list. It shows \"Loading…\", then the rows, an empty message or the error: The page calls only its own backend:","title":"CRM example: 6. Loading, empty and error states","url":"build/crm-example.html#states"},{"id":"guide:build/deployment","kind":"guide","section":"Build with AgentDB","text":"Put an AgentDB app online with nginx, HTTPS, secure headers and server-side keys, on a VPS, Netlify or Vercel.","title":"Deployment","url":"build/deployment.html"},{"id":"guide:build/deployment#checklist","kind":"guide","section":"Build with AgentDB","text":"The key is in the server environment only. Search your built frontend for adbk. and find nothing. Each app has its own agent key with the smallest role. The frontend calls your own origin. connect-src 'self' in the CSP. HTTPS works, HTTP redirects to HTTPS, HSTS is on. index.htm…","title":"Deployment: Checklist","url":"build/deployment.html#checklist"},{"id":"guide:build/deployment#cors","kind":"guide","section":"Build with AgentDB","text":"Prefer no CORS at all. Serve the frontend and the backend from one origin, as above, and the browser needs no CORS headers. If the frontend must live on another origin, allow exactly that origin on your backend. Never for routes that use cookies. CORS is not access control. It o…","title":"Deployment: CORS","url":"build/deployment.html#cors"},{"id":"guide:build/deployment#credentials","kind":"guide","section":"Build with AgentDB","text":"Make one agent key per app with the smallest role it needs: viewer to read, editor to write records. See Least-privilege keys. Store it in the service's environment, for example a systemd EnvironmentFile that only the service user can read (chmod 600). Never commit .env. Commit…","title":"Deployment: Credentials and environment variables","url":"build/deployment.html#credentials"},{"id":"guide:build/deployment#headers","kind":"guide","section":"Build with AgentDB","text":"CSP lets the page load scripts and send requests to its own origin only. connect-src 'self' also means the page cannot call AgentDB directly, which is what you want. nosniff stops browsers from guessing file types. HSTS tells browsers to use HTTPS only. Add it after HTTPS works.…","title":"Deployment: Secure headers","url":"build/deployment.html#headers"},{"id":"guide:build/deployment#https","kind":"guide","section":"Build with AgentDB","text":"certbot adds the certificate to the nginx site and a redirect from HTTP to HTTPS. Renewal runs on a timer.","title":"Deployment: HTTPS with certbot","url":"build/deployment.html#https"},{"id":"guide:build/deployment#live","kind":"guide","section":"Build with AgentDB","text":"Server-sent events and long-polls keep a request open. nginx buffers answers and closes idle connections after 60 seconds by default. Change both for the live route: The live dashboard starter also sends X-Accel-Buffering: no and a ping every 20 seconds. Long-polls to AgentDB (w…","title":"Deployment: Live connections","url":"build/deployment.html#live"},{"id":"guide:build/deployment#netlify-and-vercel","kind":"guide","section":"Build with AgentDB","text":"On these hosts, serverless functions are your backend. They hold the key. The static frontend calls them on the same origin. A Netlify function that lists contacts: Never give the key a public prefix. Build tools copy these variables into the browser bundle: Set the variables fo…","title":"Deployment: Netlify and Vercel","url":"build/deployment.html#netlify-and-vercel"},{"id":"guide:build/deployment#nginx-role","kind":"guide","section":"Build with AgentDB","text":"nginx is a web server and a reverse proxy. It serves files, passes requests to your backend, and handles HTTPS. nginx is not authentication. It does not know your users, and it cannot decide who may read which contact. Your backend signs users in and checks what they may do. Age…","title":"Deployment: What nginx does, and what it does not","url":"build/deployment.html#nginx-role"},{"id":"guide:build/deployment#nginx-site","kind":"guide","section":"Build with AgentDB","text":"For PHP, replace the /api/ block with your PHP-FPM settings and point root at the app's public/ folder. Keep .env outside that folder.","title":"Deployment: A complete nginx site","url":"build/deployment.html#nginx-site"},{"id":"guide:build/deployment#reverse-proxy","kind":"guide","section":"Build with AgentDB","text":"Cache-Control in short: static files with hashed names get a long cache, index.html gets no-cache, and API answers get no-store.","title":"Deployment: Reverse-proxying the backend","url":"build/deployment.html#reverse-proxy"},{"id":"guide:build/deployment#shape","kind":"guide","section":"Build with AgentDB","text":"The browser talks to one origin. It never calls AgentDB. The backend listens on 127.0.0.1 only. nginx is the only way in. The key is in the backend's environment, nowhere else.","title":"Deployment: The shape of a deployment","url":"build/deployment.html#shape"},{"id":"guide:build/deployment#static","kind":"guide","section":"Build with AgentDB","text":"nginx serves the built frontend from a folder. Files with a content hash in the name can be cached for a long time. index.html must be checked on every visit, or users keep an old version.","title":"Deployment: Static frontend hosting","url":"build/deployment.html#static"},{"id":"guide:build/deployment#vps","kind":"guide","section":"Build with AgentDB","text":"Create a user for the app and copy the code to its folder. Install the runtime (Node 22, PHP-FPM, Python or .NET). Put the agent key in the service's environment file. Make it readable by the service user only. Run the backend as a systemd service on 127.0.0.1. Configure nginx w…","title":"Deployment: Traditional VPS","url":"build/deployment.html#vps"},{"id":"guide:build/frameworks/aspnet","kind":"guide","section":"Build with AgentDB","text":"An ASP.NET Core minimal API that calls AgentDB with a named HttpClient and serves a static page.","title":"ASP.NET Core","url":"build/frameworks/aspnet.html"},{"id":"guide:build/frameworks/aspnet#backend","kind":"guide","section":"Build with AgentDB","text":"","title":"ASP.NET Core: The backend routes","url":"build/frameworks/aspnet.html#backend"},{"id":"guide:build/frameworks/aspnet#client","kind":"guide","section":"Build with AgentDB","text":"Every call goes through one helper. It returns the data part, or the status and error:","title":"ASP.NET Core: The AgentDB client","url":"build/frameworks/aspnet.html#client"},{"id":"guide:build/frameworks/aspnet#frontend","kind":"guide","section":"Build with AgentDB","text":"wwwroot/index.html and wwwroot/app.js are the page from Plain HTML and JavaScript. UseDefaultFiles() and UseStaticFiles() serve them. With Blazor WebAssembly, the same rule applies: the WebAssembly app runs in the browser, so it calls this API and never AgentDB.","title":"ASP.NET Core: The frontend","url":"build/frameworks/aspnet.html#frontend"},{"id":"guide:build/frameworks/aspnet#key","kind":"guide","section":"Build with AgentDB","text":"In configuration: environment variables in production, user secrets during development. Never in wwwroot/ and never in appsettings.json in source control.","title":"ASP.NET Core: Where the key lives","url":"build/frameworks/aspnet.html#key"},{"id":"guide:build/frameworks/aspnet#live","kind":"guide","section":"Build with AgentDB","text":"Run a BackgroundService that follows the change feed (GET changes?after=<seq>&wait=1) and pushes to clients with server-sent events or SignalR. See the live dashboard starter for the loop and Live data for the options.","title":"ASP.NET Core: Live updates","url":"build/frameworks/aspnet.html#live"},{"id":"guide:build/frameworks/aspnet#run","kind":"guide","section":"Build with AgentDB","text":"","title":"ASP.NET Core: Run it","url":"build/frameworks/aspnet.html#run"},{"id":"guide:build/frameworks/aspnet#states","kind":"guide","section":"Build with AgentDB","text":"ErrorResult maps AgentDB answers to short messages: 400 for validation, 409 for VERSION_CONFLICT, 502 for the rest. The page shows \"Loading…\", \"No contacts match your search\" or the error message.","title":"ASP.NET Core: Loading, empty and error states","url":"build/frameworks/aspnet.html#states"},{"id":"guide:build/frameworks/laravel","kind":"guide","section":"Build with AgentDB","text":"Call AgentDB from a Laravel controller with the Http client, and keep the key in config.","title":"Laravel","url":"build/frameworks/laravel.html"},{"id":"guide:build/frameworks/laravel#backend","kind":"guide","section":"Build with AgentDB","text":"Laravel adds CSRF protection to web routes. Keep @csrf in every form.","title":"Laravel: The backend route","url":"build/frameworks/laravel.html#backend"},{"id":"guide:build/frameworks/laravel#client","kind":"guide","section":"Build with AgentDB","text":"","title":"Laravel: The AgentDB client","url":"build/frameworks/laravel.html#client"},{"id":"guide:build/frameworks/laravel#frontend","kind":"guide","section":"Build with AgentDB","text":"{{ }} escapes values. Do not use {!! !!} with data from AgentDB.","title":"Laravel: The frontend","url":"build/frameworks/laravel.html#frontend"},{"id":"guide:build/frameworks/laravel#key","kind":"guide","section":"Build with AgentDB","text":"Read it with config('services.agentdb.token'). Vite exposes VITE_ variables to the browser: never name the key that way.","title":"Laravel: Where the key lives","url":"build/frameworks/laravel.html#key"},{"id":"guide:build/frameworks/laravel#live","kind":"guide","section":"Build with AgentDB","text":"Poll a JSON route every 10 to 30 seconds from the page, or use a read-only dashboard data link. For push, run a queue worker or a scheduled command that follows the change feed and broadcasts with Laravel's broadcasting. See Live data.","title":"Laravel: Live updates","url":"build/frameworks/laravel.html#live"},{"id":"guide:build/frameworks/laravel#states","kind":"guide","section":"Build with AgentDB","text":"Blade pages arrive complete. @forelse … @empty covers the empty state. For AgentDB errors, catch Illuminate\\Http\\Client\\RequestException. Show $e->response->json('error.message') for status 400, and a general message otherwise. A VERSION_CONFLICT (409) means someone saved first.","title":"Laravel: Loading, empty and error states","url":"build/frameworks/laravel.html#states"},{"id":"guide:build/frameworks/nextjs","kind":"guide","section":"Build with AgentDB","text":"A Next.js App Router app where route handlers hold the AgentDB key and client components fetch them.","title":"Next.js","url":"build/frameworks/nextjs.html"},{"id":"guide:build/frameworks/nextjs#backend","kind":"guide","section":"Build with AgentDB","text":"A server component can also call agentdb() directly and render the list on the server. Never pass the key, or the raw AgentDB answer with fields you do not need, into a client component's props.","title":"Next.js: The backend route","url":"build/frameworks/nextjs.html#backend"},{"id":"guide:build/frameworks/nextjs#deploy","kind":"guide","section":"Build with AgentDB","text":"On Vercel or Netlify, add the three variables in the project settings. See Deployment.","title":"Next.js: Deploy","url":"build/frameworks/nextjs.html#deploy"},{"id":"guide:build/frameworks/nextjs#frontend","kind":"guide","section":"Build with AgentDB","text":"","title":"Next.js: The frontend","url":"build/frameworks/nextjs.html#frontend"},{"id":"guide:build/frameworks/nextjs#helper","kind":"guide","section":"Build with AgentDB","text":"Put the AgentDB call in one server-only module. The server-only package makes the build fail if a client component imports it.","title":"Next.js: The AgentDB helper","url":"build/frameworks/nextjs.html#helper"},{"id":"guide:build/frameworks/nextjs#key","kind":"guide","section":"Build with AgentDB","text":"In .env.local on your machine, and in the project's environment variables on your host. Next.js sends every NEXT_PUBLIC_ variable to the browser. The key must never have that prefix.","title":"Next.js: Where the key lives","url":"build/frameworks/nextjs.html#key"},{"id":"guide:build/frameworks/nextjs#live","kind":"guide","section":"Build with AgentDB","text":"Serverless functions stop after each request, so they cannot keep a change-feed loop running. Choose one: Poll your route handler every 10 to 30 seconds with setInterval. Create a read-only dashboard data link and long-poll it from the browser. It holds no key. Run a long-lived…","title":"Next.js: Live updates","url":"build/frameworks/nextjs.html#live"},{"id":"guide:build/frameworks/nextjs#states","kind":"guide","section":"Build with AgentDB","text":"rows === null means loading. An empty array means \"no results\". An error replaces both. For server components, use loading.tsx for the loading state and error.tsx for errors.","title":"Next.js: Loading, empty and error states","url":"build/frameworks/nextjs.html#states"},{"id":"guide:build/frameworks/node-express","kind":"guide","section":"Build with AgentDB","text":"A Node.js backend for AgentDB, with plain node:http (tested) or Express.","title":"Node.js and Express","url":"build/frameworks/node-express.html"},{"id":"guide:build/frameworks/node-express#call","kind":"guide","section":"Build with AgentDB","text":"","title":"Node.js and Express: The AgentDB call","url":"build/frameworks/node-express.html#call"},{"id":"guide:build/frameworks/node-express#express","kind":"guide","section":"Build with AgentDB","text":"agentdb() is the same function as above. Add security headers with a middleware or a package such as helmet.","title":"Node.js and Express: The same routes with Express","url":"build/frameworks/node-express.html#express"},{"id":"guide:build/frameworks/node-express#frontend","kind":"guide","section":"Build with AgentDB","text":"The page calls /api/contacts on the same origin. See Plain HTML and JavaScript, or React and Vue.","title":"Node.js and Express: The frontend","url":"build/frameworks/node-express.html#frontend"},{"id":"guide:build/frameworks/node-express#key","kind":"guide","section":"Build with AgentDB","text":"In the server's environment. Node 22 reads a .env file with node --env-file=.env server.mjs. Do not commit .env. Use a separate agent key per app. A viewer key can only read. An editor key can write records but cannot change the schema or other keys.","title":"Node.js and Express: Where the key lives","url":"build/frameworks/node-express.html#key"},{"id":"guide:build/frameworks/node-express#live","kind":"guide","section":"Build with AgentDB","text":"A long-running Node process can follow the change feed for all viewers and push updates with server-sent events. The live dashboard starter does exactly that.","title":"Node.js and Express: Live updates","url":"build/frameworks/node-express.html#live"},{"id":"guide:build/frameworks/node-express#node-http","kind":"guide","section":"Build with AgentDB","text":"The ALLOWED table lists every operation the browser may trigger. Nothing else reaches AgentDB.","title":"Node.js and Express: The backend routes with node:http","url":"build/frameworks/node-express.html#node-http"},{"id":"guide:build/frameworks/node-express#states","kind":"guide","section":"Build with AgentDB","text":"The backend answers { error } with a short message and a fitting status code (400, 409, 415, 502). The page shows that message and never the raw AgentDB answer.","title":"Node.js and Express: Loading, empty and error states","url":"build/frameworks/node-express.html#states"},{"id":"guide:build/frameworks/php","kind":"guide","section":"Build with AgentDB","text":"A server-rendered PHP app on AgentDB with no framework and no Composer packages.","title":"PHP","url":"build/frameworks/php.html"},{"id":"guide:build/frameworks/php#backend","kind":"guide","section":"Build with AgentDB","text":"Each page is a function. The contact list runs one query with an optional contains filter: Saving a contact creates the record and its company link in one call. Editing sends the version from the form, so a second editor cannot overwrite the first by accident:","title":"PHP: The backend route","url":"build/frameworks/php.html#backend"},{"id":"guide:build/frameworks/php#client","kind":"guide","section":"Build with AgentDB","text":"PHP's built-in HTTP stream wrapper is enough. ignore_errors lets the client read AgentDB's JSON error answer.","title":"PHP: The AgentDB client","url":"build/frameworks/php.html#client"},{"id":"guide:build/frameworks/php#frontend","kind":"guide","section":"Build with AgentDB","text":"The pages are plain HTML forms. Three rules keep them safe: e() (htmlspecialchars) escapes every value before it goes into HTML. Every form carries a CSRF token tied to the session. A POST without it answers 403. The session cookie is HttpOnly and SameSite=Lax.","title":"PHP: The frontend","url":"build/frameworks/php.html#frontend"},{"id":"guide:build/frameworks/php#key","kind":"guide","section":"Build with AgentDB","text":"In the server's environment, or in a .env file outside the web root. The starter's public/ folder is the web root, and .env sits one level above it, so the web server never serves it. Never echo the key into a page, a JavaScript variable or a data- attribute.","title":"PHP: Where the key lives","url":"build/frameworks/php.html#key"},{"id":"guide:build/frameworks/php#live","kind":"guide","section":"Build with AgentDB","text":"A PHP request ends after the page is sent. For live pages, add a small script that polls /api/... every 10 to 30 seconds, or use a read-only dashboard data link from the browser. See Live data.","title":"PHP: Live updates","url":"build/frameworks/php.html#live"},{"id":"guide:build/frameworks/php#run","kind":"guide","section":"Build with AgentDB","text":"On Apache or nginx with PHP-FPM, point the document root at public/. See Deployment.","title":"PHP: Run it","url":"build/frameworks/php.html#run"},{"id":"guide:build/frameworks/php#states","kind":"guide","section":"Build with AgentDB","text":"Server-rendered pages have no loading state: the page arrives complete. Empty lists say so (\"No contacts found\"). A validation error re-shows the form with the message and HTTP 422. A version conflict re-shows it with HTTP 409. Other AgentDB errors show a general message and are…","title":"PHP: Loading, empty and error states","url":"build/frameworks/php.html#states"},{"id":"guide:build/frameworks/plain-html-js","kind":"guide","section":"Build with AgentDB","text":"A plain HTML page with vanilla JavaScript and a small Node backend that holds the AgentDB key.","title":"Plain HTML and JavaScript","url":"build/frameworks/plain-html-js.html"},{"id":"guide:build/frameworks/plain-html-js#backend","kind":"guide","section":"Build with AgentDB","text":"One function calls AgentDB. It adds the key and turns an error answer into an exception: The ALLOWED table is the whole API of the server. The browser can list and search contacts, and add one. Every other path answers 404. Input is trimmed and limited before it reaches AgentDB.…","title":"Plain HTML and JavaScript: The backend route","url":"build/frameworks/plain-html-js.html#backend"},{"id":"guide:build/frameworks/plain-html-js#frontend","kind":"guide","section":"Build with AgentDB","text":"The page has a search box, a status line and a form:","title":"Plain HTML and JavaScript: The frontend","url":"build/frameworks/plain-html-js.html#frontend"},{"id":"guide:build/frameworks/plain-html-js#key","kind":"guide","section":"Build with AgentDB","text":"The key lives in the server's environment. Create a separate agent key for the app with role editor. Keep your own owner key out of the app. The server reads it at start:","title":"Plain HTML and JavaScript: Where the key lives","url":"build/frameworks/plain-html-js.html#key"},{"id":"guide:build/frameworks/plain-html-js#live","kind":"guide","section":"Build with AgentDB","text":"This page loads data when it opens and after each change it makes. To show changes made by others: Poll /api/contacts every 10 to 30 seconds, or add a server-sent events route that follows the change feed, as in the live dashboard starter. See Live data for every option.","title":"Plain HTML and JavaScript: Live updates","url":"build/frameworks/plain-html-js.html#live"},{"id":"guide:build/frameworks/plain-html-js#pattern","kind":"guide","section":"Build with AgentDB","text":"A page cannot keep a secret. Anyone can open the browser's developer tools and read every key the page uses. So the page calls your own server, and only your server calls AgentDB. See Pattern B.","title":"Plain HTML and JavaScript: The pattern","url":"build/frameworks/plain-html-js.html#pattern"},{"id":"guide:build/frameworks/plain-html-js#run","kind":"guide","section":"Build with AgentDB","text":"Open http://localhost:3000. Node 22 or later, no dependencies. To put it online, see Deployment.","title":"Plain HTML and JavaScript: Run it","url":"build/frameworks/plain-html-js.html#run"},{"id":"guide:build/frameworks/plain-html-js#states","kind":"guide","section":"Build with AgentDB","text":"The status line always says what is going on: loading, no results, or an error. Names are set with textContent, never as HTML. Adding a contact sends JSON with a new submit id. The server passes it on as an Idempotency-Key, so a retried request is written once.","title":"Plain HTML and JavaScript: Loading, empty and error states","url":"build/frameworks/plain-html-js.html#states"},{"id":"guide:build/frameworks/python-fastapi","kind":"guide","section":"Build with AgentDB","text":"A FastAPI service in front of AgentDB with httpx, plus a standard-library version.","title":"Python and FastAPI","url":"build/frameworks/python-fastapi.html"},{"id":"guide:build/frameworks/python-fastapi#backend","kind":"guide","section":"Build with AgentDB","text":"The name check returns 400 with a clear message. The submit id becomes an Idempotency-Key, so a retried request is written once.","title":"Python and FastAPI: The backend routes","url":"build/frameworks/python-fastapi.html#backend"},{"id":"guide:build/frameworks/python-fastapi#client","kind":"guide","section":"Build with AgentDB","text":"One httpx.AsyncClient for the whole app. It carries the key and the workspace URL. Without FastAPI, urllib.request does the same job:","title":"Python and FastAPI: The AgentDB client","url":"build/frameworks/python-fastapi.html#client"},{"id":"guide:build/frameworks/python-fastapi#frontend","kind":"guide","section":"Build with AgentDB","text":"The page in static/ is the same plain HTML page as in Plain HTML and JavaScript. It calls /api/contacts on the same origin.","title":"Python and FastAPI: The frontend","url":"build/frameworks/python-fastapi.html#frontend"},{"id":"guide:build/frameworks/python-fastapi#key","kind":"guide","section":"Build with AgentDB","text":"In the environment of the server process. uvicorn --env-file .env loads it (with python-dotenv installed).","title":"Python and FastAPI: Where the key lives","url":"build/frameworks/python-fastapi.html#key"},{"id":"guide:build/frameworks/python-fastapi#live","kind":"guide","section":"Build with AgentDB","text":"FastAPI can stream server-sent events with a StreamingResponse and media_type=\"text/event-stream\". Run one background task that follows the change feed (GET /changes?after=<seq>&wait=1) and fans out to all open streams, like the live dashboard starter. See Live data.","title":"Python and FastAPI: Live updates","url":"build/frameworks/python-fastapi.html#live"},{"id":"guide:build/frameworks/python-fastapi#run","kind":"guide","section":"Build with AgentDB","text":"Or, with no packages: set -a; . ./.env; set +a; python3 server_stdlib.py.","title":"Python and FastAPI: Run it","url":"build/frameworks/python-fastapi.html#run"},{"id":"guide:build/frameworks/python-fastapi#states","kind":"guide","section":"Build with AgentDB","text":"The service turns AgentDB errors into short messages. Validation errors are shown. Anything else is logged, and the page gets a general message.","title":"Python and FastAPI: Loading, empty and error states","url":"build/frameworks/python-fastapi.html#states"},{"id":"guide:build/frameworks/react","kind":"guide","section":"Build with AgentDB","text":"A React app that lists and adds AgentDB contacts through its own backend, with loading, empty and error states.","title":"React","url":"build/frameworks/react.html"},{"id":"guide:build/frameworks/react#backend","kind":"guide","section":"Build with AgentDB","text":"Use any backend from this section. The smallest is the Node server of the plain HTML guide: it serves GET /api/contacts?q= and POST /api/contacts. During development, let Vite forward /api to that server. The browser then calls the same origin, and you need no CORS settings. In…","title":"React: The backend route","url":"build/frameworks/react.html#backend"},{"id":"guide:build/frameworks/react#frontend","kind":"guide","section":"Build with AgentDB","text":"React escapes {c.name} as text. Do not use dangerouslySetInnerHTML with data from AgentDB. Adding a contact posts JSON to the backend:","title":"React: The frontend","url":"build/frameworks/react.html#frontend"},{"id":"guide:build/frameworks/react#key","kind":"guide","section":"Build with AgentDB","text":"On the backend only, in its environment: AGENTDB_WORKSPACE and AGENTDB_TOKEN (an agent key with role editor). Build tools put some environment variables into the browser bundle. Never give the key a name that does that.","title":"React: Where the key lives","url":"build/frameworks/react.html#key"},{"id":"guide:build/frameworks/react#live","kind":"guide","section":"Build with AgentDB","text":"For changes made elsewhere, add an /events route to your backend that follows the change feed, then listen with EventSource in a useEffect. The live dashboard starter shows the backend. See Live data.","title":"React: Live updates","url":"build/frameworks/react.html#live"},{"id":"guide:build/frameworks/react#states","kind":"guide","section":"Build with AgentDB","text":"Keep one status value: loading, ready or error. Show \"no contacts\" only when the status is ready and the list is empty. Show the backend's error message; it never holds internal details.","title":"React: Loading, empty and error states","url":"build/frameworks/react.html#states"},{"id":"guide:build/frameworks/spring-boot","kind":"guide","section":"Build with AgentDB","text":"A Spring Boot REST controller that calls AgentDB with RestClient and keeps the key in configuration.","title":"Java and Spring Boot","url":"build/frameworks/spring-boot.html"},{"id":"guide:build/frameworks/spring-boot#backend","kind":"guide","section":"Build with AgentDB","text":"","title":"Java and Spring Boot: The backend route","url":"build/frameworks/spring-boot.html#backend"},{"id":"guide:build/frameworks/spring-boot#client","kind":"guide","section":"Build with AgentDB","text":"","title":"Java and Spring Boot: The AgentDB client","url":"build/frameworks/spring-boot.html#client"},{"id":"guide:build/frameworks/spring-boot#frontend","kind":"guide","section":"Build with AgentDB","text":"Serve the page from src/main/resources/static/. It calls /api/contacts on the same origin, like the page in Plain HTML and JavaScript. If you use Spring Security with sessions, keep CSRF protection on for POST routes.","title":"Java and Spring Boot: The frontend","url":"build/frameworks/spring-boot.html#frontend"},{"id":"guide:build/frameworks/spring-boot#key","kind":"guide","section":"Build with AgentDB","text":"In environment variables, read through application.properties: Do not put the real key in application.properties in source control. Do not copy it into a Thymeleaf template or a JavaScript bundle.","title":"Java and Spring Boot: Where the key lives","url":"build/frameworks/spring-boot.html#key"},{"id":"guide:build/frameworks/spring-boot#live","kind":"guide","section":"Build with AgentDB","text":"Return an SseEmitter from a controller, and run one scheduled task that follows the change feed (GET /changes?after=<seq>&wait=1) and sends to every emitter. See the live dashboard starter and Live data.","title":"Java and Spring Boot: Live updates","url":"build/frameworks/spring-boot.html#live"},{"id":"guide:build/frameworks/spring-boot#states","kind":"guide","section":"Build with AgentDB","text":"The controller answers { \"error\": \"...\" } with 400, 409 or 502. The page shows \"Loading…\" while it waits, \"No contacts found\" for an empty list, and the error message otherwise.","title":"Java and Spring Boot: Loading, empty and error states","url":"build/frameworks/spring-boot.html#states"},{"id":"guide:build/frameworks/svelte","kind":"guide","section":"Build with AgentDB","text":"A SvelteKit app where a server route holds the AgentDB key and the page fetches it.","title":"Svelte and SvelteKit","url":"build/frameworks/svelte.html"},{"id":"guide:build/frameworks/svelte#backend","kind":"guide","section":"Build with AgentDB","text":"You can also load data in +page.server.ts. That file runs on the server too, so it may import the same helper.","title":"Svelte and SvelteKit: The backend route","url":"build/frameworks/svelte.html#backend"},{"id":"guide:build/frameworks/svelte#frontend","kind":"guide","section":"Build with AgentDB","text":"Svelte shows {c.name} as text. Do not use {@html} with data from AgentDB.","title":"Svelte and SvelteKit: The frontend","url":"build/frameworks/svelte.html#frontend"},{"id":"guide:build/frameworks/svelte#key","kind":"guide","section":"Build with AgentDB","text":"In .env locally and in your host's environment in production. SvelteKit has two kinds of variables: SvelteKit refuses to build when a page imports $env/static/private. That protects you from a key in the browser.","title":"Svelte and SvelteKit: Where the key lives","url":"build/frameworks/svelte.html#key"},{"id":"guide:build/frameworks/svelte#live","kind":"guide","section":"Build with AgentDB","text":"Poll the route every 10 to 30 seconds, or add a server-sent events route on a long-running Node server (adapter-node) that follows the change feed. The live dashboard starter shows that loop. See Live data.","title":"Svelte and SvelteKit: Live updates","url":"build/frameworks/svelte.html#live"},{"id":"guide:build/frameworks/svelte#states","kind":"guide","section":"Build with AgentDB","text":"One status field drives the page: loading, ready or error. SvelteKit's error() answers with { message }; the page shows it.","title":"Svelte and SvelteKit: Loading, empty and error states","url":"build/frameworks/svelte.html#states"},{"id":"guide:build/frameworks/vue","kind":"guide","section":"Build with AgentDB","text":"A Vue 3 component that lists and adds AgentDB contacts through its own backend.","title":"Vue","url":"build/frameworks/vue.html"},{"id":"guide:build/frameworks/vue#backend","kind":"guide","section":"Build with AgentDB","text":"Use the Node server of the plain HTML guide, or any backend in this section. It serves GET /api/contacts?q= and POST /api/contacts. With Vite, forward /api to it during development: server: { proxy: { \"/api\": \"http://localhost:3000\" } } in vite.config.js. With Nuxt, put the Agen…","title":"Vue: The backend route","url":"build/frameworks/vue.html#backend"},{"id":"guide:build/frameworks/vue#frontend","kind":"guide","section":"Build with AgentDB","text":"{{ c.name }} is shown as text. Do not use v-html with data from AgentDB.","title":"Vue: The frontend","url":"build/frameworks/vue.html#frontend"},{"id":"guide:build/frameworks/vue#key","kind":"guide","section":"Build with AgentDB","text":"On the backend, in its environment. Vite puts every VITE_ variable into the browser bundle, so the key never gets that prefix. Nuxt does the same with NUXT_PUBLIC_ and runtimeConfig.public.","title":"Vue: Where the key lives","url":"build/frameworks/vue.html#key"},{"id":"guide:build/frameworks/vue#live","kind":"guide","section":"Build with AgentDB","text":"Add an /events route to your backend (see the live dashboard starter). In the component, open new EventSource(\"/events\") in onMounted and close it in onUnmounted. See Live data.","title":"Vue: Live updates","url":"build/frameworks/vue.html#live"},{"id":"guide:build/frameworks/vue#states","kind":"guide","section":"Build with AgentDB","text":"One status ref drives the page. \"No contacts\" shows only when the status is ready and the list is empty.","title":"Vue: Loading, empty and error states","url":"build/frameworks/vue.html#states"},{"id":"guide:build/index","kind":"guide","section":"Build with AgentDB","text":"Build a website, CRM, dashboard or custom application with AgentDB as its database, in your own language and framework.","title":"Build with AgentDB","url":"build/index.html"},{"id":"guide:build/index#before-you-start","kind":"guide","section":"Build with AgentDB","text":"You need: an AgentDB account and a workspace (see Getting started); a key for your backend: an agent key with the smallest role that works; the workspace id (ws_...), shown in the app under Settings. Put both values in environment variables on your server: AGENTDB_API_KEY and AG…","title":"Build with AgentDB: Before you start","url":"build/index.html#before-you-start"},{"id":"guide:build/index#choose-your-path","kind":"guide","section":"Build with AgentDB","text":"Start with security. Security for apps shows the three safe patterns, with wrong and secure code side by side. Pick your language. Each guide shows connecting, reading, writing, queries, relationships, files, errors, rate limits and retries. Every code block on those pages runs…","title":"Build with AgentDB: Choose your path","url":"build/index.html#choose-your-path"},{"id":"guide:build/index#how-an-app-talks-to-agentdb","kind":"guide","section":"Build with AgentDB","text":"Every app follows the same shape: People use your app in a browser or on a phone. Your app sends their requests to your own backend (server, serverless function or framework route). Your backend checks who the person is and what they may do. Your backend calls the AgentDB REST A…","title":"Build with AgentDB: How an app talks to AgentDB","url":"build/index.html#how-an-app-talks-to-agentdb"},{"id":"guide:build/index#what-agentdb-gives-you","kind":"guide","section":"Build with AgentDB","text":"AgentDB is the database behind your app. It does not provide a CRM, a portal or an admin screen for your customers. You build that interface. You can use the AgentDB app yourself to look at the data while you build.","title":"Build with AgentDB: What AgentDB gives you","url":"build/index.html#what-agentdb-gives-you"},{"id":"guide:build/index#working-with-an-ai-coding-tool","kind":"guide","section":"Build with AgentDB","text":"These pages are written for people and for AI coding tools. Give your tool this instruction: AI tools can also read llms.txt and examples.json. The second file lists every tested example by language, with its files and topics.","title":"Build with AgentDB: Working with an AI coding tool","url":"build/index.html#working-with-an-ai-coding-tool"},{"id":"guide:build/languages/csharp","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from C# (.NET) with HttpClient and System.Text.Json: records, versions, queries, links, files, errors, retries and idempotency.","title":"C#","url":"build/languages/csharp.html"},{"id":"guide:build/languages/csharp#before-you-start","kind":"guide","section":"Build with AgentDB","text":".NET 8 or newer (the example project targets .NET 9). A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"C#: Before you start","url":"build/languages/csharp.html#before-you-start"},{"id":"guide:build/languages/csharp#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and retries when that is safe. Check the connection by reading the…","title":"C#: Connect","url":"build/languages/csharp.html#connect"},{"id":"guide:build/languages/csharp#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"C#: Create a record","url":"build/languages/csharp.html#create"},{"id":"guide:build/languages/csharp#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. HttpClient throws HttpRequestException on network errors; the helper retries those only when the call is safe to repeat. Common codes: The error codes page lists them al…","title":"C#: Errors","url":"build/languages/csharp.html#errors"},{"id":"guide:build/languages/csharp#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"C#: Files","url":"build/languages/csharp.html#files"},{"id":"guide:build/languages/csharp#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"C#: Idempotency keys","url":"build/languages/csharp.html#idempotency"},{"id":"guide:build/languages/csharp#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"C#: Query with filters, sort and pages","url":"build/languages/csharp.html#query"},{"id":"guide:build/languages/csharp#read","kind":"guide","section":"Build with AgentDB","text":"","title":"C#: Read a record","url":"build/languages/csharp.html#read"},{"id":"guide:build/languages/csharp#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"C#: Link records","url":"build/languages/csharp.html#relationships"},{"id":"guide:build/languages/csharp#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"C#: Rate limits and retries","url":"build/languages/csharp.html#retries"},{"id":"guide:build/languages/csharp#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/csharp/Program.cs, examples/languages/csharp/Crm.csproj. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK ide…","title":"C#: Run the full example","url":"build/languages/csharp.html#run"},{"id":"guide:build/languages/csharp#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"C#: Update a record","url":"build/languages/csharp.html#update"},{"id":"guide:build/languages/go","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from Go with net/http and encoding/json from the standard library: records, versions, queries, links, files, errors, retries and idempotency.","title":"Go","url":"build/languages/go.html"},{"id":"guide:build/languages/go#before-you-start","kind":"guide","section":"Build with AgentDB","text":"Go 1.22 or newer. A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"Go: Before you start","url":"build/languages/go.html#before-you-start"},{"id":"guide:build/languages/go#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and retries when that is safe. Check the connection by reading the…","title":"Go: Connect","url":"build/languages/go.html#connect"},{"id":"guide:build/languages/go#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"Go: Create a record","url":"build/languages/go.html#create"},{"id":"guide:build/languages/go#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. Go returns errors as values; the helper returns an AgentDBError for AgentDB answers, and other errors for network trouble. Common codes: The error codes page lists them…","title":"Go: Errors","url":"build/languages/go.html#errors"},{"id":"guide:build/languages/go#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"Go: Files","url":"build/languages/go.html#files"},{"id":"guide:build/languages/go#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"Go: Idempotency keys","url":"build/languages/go.html#idempotency"},{"id":"guide:build/languages/go#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"Go: Query with filters, sort and pages","url":"build/languages/go.html#query"},{"id":"guide:build/languages/go#read","kind":"guide","section":"Build with AgentDB","text":"","title":"Go: Read a record","url":"build/languages/go.html#read"},{"id":"guide:build/languages/go#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"Go: Link records","url":"build/languages/go.html#relationships"},{"id":"guide:build/languages/go#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"Go: Rate limits and retries","url":"build/languages/go.html#retries"},{"id":"guide:build/languages/go#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/go/main.go. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK idempotency.","title":"Go: Run the full example","url":"build/languages/go.html#run"},{"id":"guide:build/languages/go#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"Go: Update a record","url":"build/languages/go.html#update"},{"id":"guide:build/languages/index","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from JavaScript, TypeScript, PHP, Python, Go, C#, Java, Ruby, Rust, Swift or Kotlin. Every page runs as a tested example program.","title":"Languages overview","url":"build/languages/index.html"},{"id":"guide:build/languages/index#api","kind":"guide","section":"Build with AgentDB","text":"All paths start with https://app.agentdb.link/v1/workspaces/{ws}. Every answer is JSON: {\"data\": ...} on success, {\"error\": {...}} on failure. The reference lists every operation with its arguments. The error codes page explains each error.","title":"Languages overview: The API in one table","url":"build/languages/index.html#api"},{"id":"guide:build/languages/index#environment","kind":"guide","section":"Build with AgentDB","text":"Every example reads three variables: Set them in your server's secret settings, or in a .env file that is not in Git.","title":"Languages overview: Environment variables","url":"build/languages/index.html#environment"},{"id":"guide:build/languages/index#retries","kind":"guide","section":"Build with AgentDB","text":"Errors come as {\"request_id\", \"error\": {\"code\", \"message\", \"retryable\", \"details\"}} with an HTTP status. Act on code, not on the message text. VERSION_CONFLICT (409): someone changed the record after you read it. Read it again, apply your change, and send the new version. RATE_L…","title":"Languages overview: Errors, rate limits and retries","url":"build/languages/index.html#retries"},{"id":"guide:build/languages/index#schema","kind":"guide","section":"Build with AgentDB","text":"The examples use two objects and one relationship: a contact with a name, an e-mail address and a score, a company with a name, and works_at from a contact to its company. Ask your AI to create them, or run these calls once with an admin or owner key. cardinality: \"one\" means a…","title":"Languages overview: The example schema","url":"build/languages/index.html#schema"},{"id":"guide:build/languages/index#tested","kind":"guide","section":"Build with AgentDB","text":"The code blocks on each guide are not copies. The docs include them from one runnable program per language. npm run docs:examples starts a local AgentDB, creates the schema below and runs every program. Each program must print one OK line per topic. AI tools can read the same li…","title":"Languages overview: Tested examples","url":"build/languages/index.html#tested"},{"id":"guide:build/languages/java","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from Java with java.net.http.HttpClient: records, versions, queries, links, files, errors, retries and idempotency.","title":"Java","url":"build/languages/java.html"},{"id":"guide:build/languages/java#before-you-start","kind":"guide","section":"Build with AgentDB","text":"Java 21 or newer. A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"Java: Before you start","url":"build/languages/java.html#before-you-start"},{"id":"guide:build/languages/java#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and retries when that is safe. Check the connection by reading the…","title":"Java: Connect","url":"build/languages/java.html#connect"},{"id":"guide:build/languages/java#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"Java: Create a record","url":"build/languages/java.html#create"},{"id":"guide:build/languages/java#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. HttpClient throws IOException on network errors; the helper retries those only when the call is safe to repeat. Common codes: The error codes page lists them all.","title":"Java: Errors","url":"build/languages/java.html#errors"},{"id":"guide:build/languages/java#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"Java: Files","url":"build/languages/java.html#files"},{"id":"guide:build/languages/java#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"Java: Idempotency keys","url":"build/languages/java.html#idempotency"},{"id":"guide:build/languages/java#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"Java: Query with filters, sort and pages","url":"build/languages/java.html#query"},{"id":"guide:build/languages/java#read","kind":"guide","section":"Build with AgentDB","text":"","title":"Java: Read a record","url":"build/languages/java.html#read"},{"id":"guide:build/languages/java#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"Java: Link records","url":"build/languages/java.html#relationships"},{"id":"guide:build/languages/java#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"Java: Rate limits and retries","url":"build/languages/java.html#retries"},{"id":"guide:build/languages/java#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/java/Crm.java. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK idempotency.","title":"Java: Run the full example","url":"build/languages/java.html#run"},{"id":"guide:build/languages/java#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"Java: Update a record","url":"build/languages/java.html#update"},{"id":"guide:build/languages/javascript","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from JavaScript (Node.js) with the built-in fetch of Node.js 22 or newer: records, versions, queries, links, files, errors, retries and idempotency.","title":"JavaScript","url":"build/languages/javascript.html"},{"id":"guide:build/languages/javascript#before-you-start","kind":"guide","section":"Build with AgentDB","text":"Node.js 22 or newer. Bun and Deno work the same way. A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"JavaScript: Before you start","url":"build/languages/javascript.html#before-you-start"},{"id":"guide:build/languages/javascript#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and retries when that is safe. Check the connection by reading the…","title":"JavaScript: Connect","url":"build/languages/javascript.html#connect"},{"id":"guide:build/languages/javascript#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"JavaScript: Create a record","url":"build/languages/javascript.html#create"},{"id":"guide:build/languages/javascript#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. fetch throws a TypeError on network errors; the helper retries those only when the call is safe to repeat. Common codes: The error codes page lists them all.","title":"JavaScript: Errors","url":"build/languages/javascript.html#errors"},{"id":"guide:build/languages/javascript#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"JavaScript: Files","url":"build/languages/javascript.html#files"},{"id":"guide:build/languages/javascript#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"JavaScript: Idempotency keys","url":"build/languages/javascript.html#idempotency"},{"id":"guide:build/languages/javascript#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"JavaScript: Query with filters, sort and pages","url":"build/languages/javascript.html#query"},{"id":"guide:build/languages/javascript#read","kind":"guide","section":"Build with AgentDB","text":"","title":"JavaScript: Read a record","url":"build/languages/javascript.html#read"},{"id":"guide:build/languages/javascript#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"JavaScript: Link records","url":"build/languages/javascript.html#relationships"},{"id":"guide:build/languages/javascript#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"JavaScript: Rate limits and retries","url":"build/languages/javascript.html#retries"},{"id":"guide:build/languages/javascript#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/javascript/crm.mjs. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK idempotency.","title":"JavaScript: Run the full example","url":"build/languages/javascript.html#run"},{"id":"guide:build/languages/javascript#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"JavaScript: Update a record","url":"build/languages/javascript.html#update"},{"id":"guide:build/languages/kotlin","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from Kotlin with java.net.http.HttpClient from the JDK: records, versions, queries, links, files, errors, retries and idempotency.","title":"Kotlin","url":"build/languages/kotlin.html"},{"id":"guide:build/languages/kotlin#before-you-start","kind":"guide","section":"Build with AgentDB","text":"Kotlin 1.9 or newer on Java 21. A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"Kotlin: Before you start","url":"build/languages/kotlin.html#before-you-start"},{"id":"guide:build/languages/kotlin#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and retries when that is safe. Check the connection by reading the…","title":"Kotlin: Connect","url":"build/languages/kotlin.html#connect"},{"id":"guide:build/languages/kotlin#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"Kotlin: Create a record","url":"build/languages/kotlin.html#create"},{"id":"guide:build/languages/kotlin#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. HttpClient throws IOException on network errors; the helper retries those only when the call is safe to repeat. Common codes: The error codes page lists them all.","title":"Kotlin: Errors","url":"build/languages/kotlin.html#errors"},{"id":"guide:build/languages/kotlin#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"Kotlin: Files","url":"build/languages/kotlin.html#files"},{"id":"guide:build/languages/kotlin#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"Kotlin: Idempotency keys","url":"build/languages/kotlin.html#idempotency"},{"id":"guide:build/languages/kotlin#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"Kotlin: Query with filters, sort and pages","url":"build/languages/kotlin.html#query"},{"id":"guide:build/languages/kotlin#read","kind":"guide","section":"Build with AgentDB","text":"","title":"Kotlin: Read a record","url":"build/languages/kotlin.html#read"},{"id":"guide:build/languages/kotlin#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"Kotlin: Link records","url":"build/languages/kotlin.html#relationships"},{"id":"guide:build/languages/kotlin#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"Kotlin: Rate limits and retries","url":"build/languages/kotlin.html#retries"},{"id":"guide:build/languages/kotlin#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/kotlin/Crm.kt. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK idempotency.","title":"Kotlin: Run the full example","url":"build/languages/kotlin.html#run"},{"id":"guide:build/languages/kotlin#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"Kotlin: Update a record","url":"build/languages/kotlin.html#update"},{"id":"guide:build/languages/php","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from PHP with PHP's built-in curl extension: records, versions, queries, links, files, errors, retries and idempotency.","title":"PHP","url":"build/languages/php.html"},{"id":"guide:build/languages/php#before-you-start","kind":"guide","section":"Build with AgentDB","text":"PHP 8.1 or newer with the curl extension (enabled on almost every host). A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"PHP: Before you start","url":"build/languages/php.html#before-you-start"},{"id":"guide:build/languages/php#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and retries when that is safe. Check the connection by reading the…","title":"PHP: Connect","url":"build/languages/php.html#connect"},{"id":"guide:build/languages/php#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"PHP: Create a record","url":"build/languages/php.html#create"},{"id":"guide:build/languages/php#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. curl_exec returns false on network errors; the helper retries those only when the call is safe to repeat. Common codes: The error codes page lists them all.","title":"PHP: Errors","url":"build/languages/php.html#errors"},{"id":"guide:build/languages/php#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"PHP: Files","url":"build/languages/php.html#files"},{"id":"guide:build/languages/php#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"PHP: Idempotency keys","url":"build/languages/php.html#idempotency"},{"id":"guide:build/languages/php#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"PHP: Query with filters, sort and pages","url":"build/languages/php.html#query"},{"id":"guide:build/languages/php#read","kind":"guide","section":"Build with AgentDB","text":"","title":"PHP: Read a record","url":"build/languages/php.html#read"},{"id":"guide:build/languages/php#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"PHP: Link records","url":"build/languages/php.html#relationships"},{"id":"guide:build/languages/php#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"PHP: Rate limits and retries","url":"build/languages/php.html#retries"},{"id":"guide:build/languages/php#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/php/crm.php. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK idempotency.","title":"PHP: Run the full example","url":"build/languages/php.html#run"},{"id":"guide:build/languages/php#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"PHP: Update a record","url":"build/languages/php.html#update"},{"id":"guide:build/languages/python","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from Python with urllib from the standard library: records, versions, queries, links, files, errors, retries and idempotency.","title":"Python","url":"build/languages/python.html"},{"id":"guide:build/languages/python#before-you-start","kind":"guide","section":"Build with AgentDB","text":"Python 3.9 or newer. A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"Python: Before you start","url":"build/languages/python.html#before-you-start"},{"id":"guide:build/languages/python#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and retries when that is safe. Check the connection by reading the…","title":"Python: Connect","url":"build/languages/python.html#connect"},{"id":"guide:build/languages/python#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"Python: Create a record","url":"build/languages/python.html#create"},{"id":"guide:build/languages/python#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. Network errors raise URLError; the helper retries those only when the call is safe to repeat. Common codes: The error codes page lists them all.","title":"Python: Errors","url":"build/languages/python.html#errors"},{"id":"guide:build/languages/python#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"Python: Files","url":"build/languages/python.html#files"},{"id":"guide:build/languages/python#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"Python: Idempotency keys","url":"build/languages/python.html#idempotency"},{"id":"guide:build/languages/python#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"Python: Query with filters, sort and pages","url":"build/languages/python.html#query"},{"id":"guide:build/languages/python#read","kind":"guide","section":"Build with AgentDB","text":"","title":"Python: Read a record","url":"build/languages/python.html#read"},{"id":"guide:build/languages/python#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"Python: Link records","url":"build/languages/python.html#relationships"},{"id":"guide:build/languages/python#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"Python: Rate limits and retries","url":"build/languages/python.html#retries"},{"id":"guide:build/languages/python#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/python/crm.py. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK idempotency.","title":"Python: Run the full example","url":"build/languages/python.html#run"},{"id":"guide:build/languages/python#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"Python: Update a record","url":"build/languages/python.html#update"},{"id":"guide:build/languages/ruby","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from Ruby with Net::HTTP and json from the standard library: records, versions, queries, links, files, errors, retries and idempotency.","title":"Ruby","url":"build/languages/ruby.html"},{"id":"guide:build/languages/ruby#before-you-start","kind":"guide","section":"Build with AgentDB","text":"Ruby 3.1 or newer. A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"Ruby: Before you start","url":"build/languages/ruby.html#before-you-start"},{"id":"guide:build/languages/ruby#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and retries when that is safe. Check the connection by reading the…","title":"Ruby: Connect","url":"build/languages/ruby.html#connect"},{"id":"guide:build/languages/ruby#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"Ruby: Create a record","url":"build/languages/ruby.html#create"},{"id":"guide:build/languages/ruby#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. Network errors raise IOError or SystemCallError; the helper retries those only when the call is safe to repeat. Common codes: The error codes page lists them all.","title":"Ruby: Errors","url":"build/languages/ruby.html#errors"},{"id":"guide:build/languages/ruby#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"Ruby: Files","url":"build/languages/ruby.html#files"},{"id":"guide:build/languages/ruby#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"Ruby: Idempotency keys","url":"build/languages/ruby.html#idempotency"},{"id":"guide:build/languages/ruby#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"Ruby: Query with filters, sort and pages","url":"build/languages/ruby.html#query"},{"id":"guide:build/languages/ruby#read","kind":"guide","section":"Build with AgentDB","text":"","title":"Ruby: Read a record","url":"build/languages/ruby.html#read"},{"id":"guide:build/languages/ruby#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"Ruby: Link records","url":"build/languages/ruby.html#relationships"},{"id":"guide:build/languages/ruby#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"Ruby: Rate limits and retries","url":"build/languages/ruby.html#retries"},{"id":"guide:build/languages/ruby#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/ruby/crm.rb. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK idempotency.","title":"Ruby: Run the full example","url":"build/languages/ruby.html#run"},{"id":"guide:build/languages/ruby#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"Ruby: Update a record","url":"build/languages/ruby.html#update"},{"id":"guide:build/languages/rust","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from Rust with reqwest (blocking) and serde_json: records, versions, queries, links, files, errors, retries and idempotency.","title":"Rust","url":"build/languages/rust.html"},{"id":"guide:build/languages/rust#before-you-start","kind":"guide","section":"Build with AgentDB","text":"Rust 1.88 or newer (the version current reqwest needs). A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"Rust: Before you start","url":"build/languages/rust.html#before-you-start"},{"id":"guide:build/languages/rust#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and retries when that is safe. Check the connection by reading the…","title":"Rust: Connect","url":"build/languages/rust.html#connect"},{"id":"guide:build/languages/rust#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"Rust: Create a record","url":"build/languages/rust.html#create"},{"id":"guide:build/languages/rust#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. The helper returns Err with an AgentDBError for AgentDB answers, and other errors for network trouble. Common codes: The error codes page lists them all.","title":"Rust: Errors","url":"build/languages/rust.html#errors"},{"id":"guide:build/languages/rust#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"Rust: Files","url":"build/languages/rust.html#files"},{"id":"guide:build/languages/rust#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"Rust: Idempotency keys","url":"build/languages/rust.html#idempotency"},{"id":"guide:build/languages/rust#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"Rust: Query with filters, sort and pages","url":"build/languages/rust.html#query"},{"id":"guide:build/languages/rust#read","kind":"guide","section":"Build with AgentDB","text":"","title":"Rust: Read a record","url":"build/languages/rust.html#read"},{"id":"guide:build/languages/rust#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"Rust: Link records","url":"build/languages/rust.html#relationships"},{"id":"guide:build/languages/rust#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"Rust: Rate limits and retries","url":"build/languages/rust.html#retries"},{"id":"guide:build/languages/rust#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/rust/src/main.rs, examples/languages/rust/Cargo.toml. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK idempo…","title":"Rust: Run the full example","url":"build/languages/rust.html#run"},{"id":"guide:build/languages/rust#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"Rust: Update a record","url":"build/languages/rust.html#update"},{"id":"guide:build/languages/swift","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from Swift with URLSession with async/await: records, versions, queries, links, files, errors, retries and idempotency.","title":"Swift","url":"build/languages/swift.html"},{"id":"guide:build/languages/swift#before-you-start","kind":"guide","section":"Build with AgentDB","text":"Swift 5.9 or newer, on macOS or Linux. A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"Swift: Before you start","url":"build/languages/swift.html#before-you-start"},{"id":"guide:build/languages/swift#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and retries when that is safe. Check the connection by reading the…","title":"Swift: Connect","url":"build/languages/swift.html#connect"},{"id":"guide:build/languages/swift#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"Swift: Create a record","url":"build/languages/swift.html#create"},{"id":"guide:build/languages/swift#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. URLSession throws URLError on network errors; the helper retries those only when the call is safe to repeat. Common codes: The error codes page lists them all.","title":"Swift: Errors","url":"build/languages/swift.html#errors"},{"id":"guide:build/languages/swift#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"Swift: Files","url":"build/languages/swift.html#files"},{"id":"guide:build/languages/swift#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"Swift: Idempotency keys","url":"build/languages/swift.html#idempotency"},{"id":"guide:build/languages/swift#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"Swift: Query with filters, sort and pages","url":"build/languages/swift.html#query"},{"id":"guide:build/languages/swift#read","kind":"guide","section":"Build with AgentDB","text":"","title":"Swift: Read a record","url":"build/languages/swift.html#read"},{"id":"guide:build/languages/swift#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"Swift: Link records","url":"build/languages/swift.html#relationships"},{"id":"guide:build/languages/swift#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"Swift: Rate limits and retries","url":"build/languages/swift.html#retries"},{"id":"guide:build/languages/swift#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/swift/main.swift. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK idempotency.","title":"Swift: Run the full example","url":"build/languages/swift.html#run"},{"id":"guide:build/languages/swift#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"Swift: Update a record","url":"build/languages/swift.html#update"},{"id":"guide:build/languages/typescript","kind":"guide","section":"Build with AgentDB","text":"Use AgentDB from TypeScript with the built-in fetch of Node.js 22, with types: records, versions, queries, links, files, errors, retries and idempotency.","title":"TypeScript","url":"build/languages/typescript.html"},{"id":"guide:build/languages/typescript#before-you-start","kind":"guide","section":"Build with AgentDB","text":"Node.js 22 or newer and TypeScript 5. The example passes strict type checks. A workspace with the example schema: contact, company and works_at. Three environment variables on your server: AGENTDB_URL, AGENTDB_API_KEY and AGENTDB_WORKSPACE. See Environment variables.","title":"TypeScript: Before you start","url":"build/languages/typescript.html#before-you-start"},{"id":"guide:build/languages/typescript#connect","kind":"guide","section":"Build with AgentDB","text":"Read the settings from the environment. The key never appears in the code. The answers have a fixed shape. These types describe them: Every call goes through one small helper. It sends the key in the Authorization: Bearer header, turns AgentDB errors into one error type, and ret…","title":"TypeScript: Connect","url":"build/languages/typescript.html#connect"},{"id":"guide:build/languages/typescript#create","kind":"guide","section":"Build with AgentDB","text":"Send the object name and the field values. AgentDB checks each value against its field type. The answer holds the new record with its id and version 1. The Idempotency-Key header makes a retry safe. See Idempotency keys.","title":"TypeScript: Create a record","url":"build/languages/typescript.html#create"},{"id":"guide:build/languages/typescript#errors","kind":"guide","section":"Build with AgentDB","text":"Every error has a stable code, a message, a retryable flag and details, plus an HTTP status. Act on the code. The types describe the answers AgentDB sends. Add your own field types for each object. Common codes: The error codes page lists them all.","title":"TypeScript: Errors","url":"build/languages/typescript.html#errors"},{"id":"guide:build/languages/typescript#files","kind":"guide","section":"Build with AgentDB","text":"A file upload has three steps: announce the file with its name, type and size; send the raw bytes; attach it to a record. AgentDB checks that the bytes match the type. To show a file in a browser, give the page the signed link, never your key. The link expires and can be revoked…","title":"TypeScript: Files","url":"build/languages/typescript.html#files"},{"id":"guide:build/languages/typescript#idempotency","kind":"guide","section":"Build with AgentDB","text":"A timeout can leave you unsure whether a write happened. Send an Idempotency-Key header with each write you may retry. If the same key comes again with the same request, AgentDB returns the first result and writes nothing twice. Keys are kept for 7 days. Use a new key for each n…","title":"TypeScript: Idempotency keys","url":"build/languages/typescript.html#idempotency"},{"id":"guide:build/languages/typescript#query","kind":"guide","section":"Build with AgentDB","text":"A query takes an object, a where filter, a sort and a limit (at most 200). Every condition in all must match. Use the in operator for \"one of several values\". Operators: eq, neq, in, lt, lte, gt, gte, is_null, is_not_null. When more records match, the answer holds a next_cursor.…","title":"TypeScript: Query with filters, sort and pages","url":"build/languages/typescript.html#query"},{"id":"guide:build/languages/typescript#read","kind":"guide","section":"Build with AgentDB","text":"","title":"TypeScript: Read a record","url":"build/languages/typescript.html#read"},{"id":"guide:build/languages/typescript#relationships","kind":"guide","section":"Build with AgentDB","text":"A relationship type such as works_at links a contact to a company. Create a link, then list the records on the other side: Add direction=incoming to list from the other side, for example all contacts of a company.","title":"TypeScript: Link records","url":"build/languages/typescript.html#relationships"},{"id":"guide:build/languages/typescript#retries","kind":"guide","section":"Build with AgentDB","text":"AgentDB limits how many requests a key and a workspace may send. Over the limit, it answers 429 RATE_LIMITED with a Retry-After header in seconds. The request helper above already handles this: On 429 or 503, it waits for Retry-After, or backs off (0.5, 1, 2, 4 seconds), then tr…","title":"TypeScript: Rate limits and retries","url":"build/languages/typescript.html#retries"},{"id":"guide:build/languages/typescript#run","kind":"guide","section":"Build with AgentDB","text":"The complete program is examples/languages/typescript/crm.ts. Set the three environment variables and run: It prints one OK line per topic: OK connect, OK create, OK read, OK update, OK query, OK relationships, OK files, OK errors and OK idempotency.","title":"TypeScript: Run the full example","url":"build/languages/typescript.html#run"},{"id":"guide:build/languages/typescript#update","kind":"guide","section":"Build with AgentDB","text":"An update names the version you read. If someone changed the record since then, AgentDB refuses with VERSION_CONFLICT (HTTP 409) and writes nothing. Read it again, apply your change, and try again: This is what the conflict looks like:","title":"TypeScript: Update a record","url":"build/languages/typescript.html#update"},{"id":"guide:build/live-data","kind":"guide","section":"Build with AgentDB","text":"Keep pages and services up to date with polling, the change feed, dashboard long-polling and signed webhooks. Includes a complete page that updates when a record changes.","title":"Live data","url":"build/live-data.html"},{"id":"guide:build/live-data#change-feed","kind":"guide","section":"Build with AgentDB","text":"The change feed lists every change in a workspace, in commit order. Each change has a seq number. Your backend remembers the last seq it handled and asks for what came after. The answer: changes: each with seq, action (such as record.create, record.update, record.delete), subjec…","title":"Live data: The change feed","url":"build/live-data.html#change-feed"},{"id":"guide:build/live-data#choose","kind":"guide","section":"Build with AgentDB","text":"AgentDB does not push to browsers directly with a key. Your backend follows the change feed or receives webhooks, then tells the open pages. The complete example does exactly that.","title":"Live data: Choose a method","url":"build/live-data.html#choose"},{"id":"guide:build/live-data#complete-example","kind":"guide","section":"Build with AgentDB","text":"This small app shows a list of contacts. When an AI agent or a person adds or changes a contact, every open page updates within a second or two. The browser never sees the key. How it works: The backend long-polls the change feed with its key. On a record change, it sends a tiny…","title":"Live data: Complete example: a page that updates when a record changes","url":"build/live-data.html#complete-example"},{"id":"guide:build/live-data#custom-dashboards","kind":"guide","section":"Build with AgentDB","text":"A custom dashboard is a site AgentDB hosts (experimental). Its page reads the sources in its manifest.json from its own address, with the same long-poll:","title":"Live data: Custom dashboard data","url":"build/live-data.html#custom-dashboards"},{"id":"guide:build/live-data#dashboard-links","kind":"guide","section":"Build with AgentDB","text":"A dashboard data link needs no key, so a static page can use it. Create the dashboard once (see Dashboards and sharing), then poll its data_url: the first call returns the panels and a marker; call data_url?since=<marker>&wait=1 in a loop; AgentDB answers about a second after th…","title":"Live data: Dashboard data links","url":"build/live-data.html#dashboard-links"},{"id":"guide:build/live-data#polling","kind":"guide","section":"Build with AgentDB","text":"The simplest way: run the same query every few seconds on your server. Keep the interval at 5 seconds or more, and stop when nobody looks. A 429 RATE_LIMITED answer means you poll too often; wait for the Retry-After seconds. Polling is fine for a few users. For more, follow the…","title":"Live data: Polling a query","url":"build/live-data.html#polling"},{"id":"guide:build/live-data#webhooks","kind":"guide","section":"Build with AgentDB","text":"A webhook sends an HTTPS POST to your service when something happens. Owners and admins create them with webhooks_create (MCP) or POST /v1/workspaces/{ws}/webhooks. See Automation for events and settings. What AgentDB guarantees: Signed: every request carries X-AgentDB-Signature…","title":"Live data: Webhooks","url":"build/live-data.html#webhooks"},{"id":"guide:build/security","kind":"guide","section":"Build with AgentDB","text":"Keep AgentDB keys out of browsers. Three safe patterns for server-side apps, browser apps with a backend, and read-only dashboards.","title":"Security for apps","url":"build/security.html"},{"id":"guide:build/security#checklist","kind":"guide","section":"Build with AgentDB","text":"No adbk. key in any file a browser or phone downloads. No NEXT_PUBLIC_, VITE_, PUBLIC_ or REACT_APP_ variable holds a key. The backend uses an agent key with the smallest role. The backend checks the signed-in user on every request. Files reach browsers through signed links that…","title":"Security for apps: Checklist","url":"build/security.html#checklist"},{"id":"guide:build/security#least-privilege-keys","kind":"guide","section":"Build with AgentDB","text":"Give your backend the smallest rights that work. Use an agent key: it belongs to one named agent in one workspace, with one role. Create a read-only agent for a website backend: The answer holds the new key once. Put it in your server's secret settings right away. Narrow it furt…","title":"Security for apps: Least-privilege keys","url":"build/security.html#least-privilege-keys"},{"id":"guide:build/security#pattern-a-server-side-apps","kind":"guide","section":"Build with AgentDB","text":"Use this for websites rendered on a server, background jobs, scripts, APIs and framework server code (PHP, Django, Rails, Laravel, Express, ASP.NET, Spring, Next.js route handlers and server components). How it works: The server reads the key from an environment variable, such a…","title":"Security for apps: Pattern A: server-side apps","url":"build/security.html#pattern-a-server-side-apps"},{"id":"guide:build/security#pattern-b-browser-app-with-its-own-backend","kind":"guide","section":"Build with AgentDB","text":"Use this for single-page apps, mobile apps and desktop apps. The app signs in your users with your own sign-in (sessions, OAuth, a hosted identity provider). The app calls your backend: /api/contacts, /api/orders. Your backend checks the session, then decides what this user may…","title":"Security for apps: Pattern B: browser app with its own backend","url":"build/security.html#pattern-b-browser-app-with-its-own-backend"},{"id":"guide:build/security#pattern-c-read-only-dashboards","kind":"guide","section":"Build with AgentDB","text":"Some pages only show data and have no backend. AgentDB offers two ways that need no key in the page. Dashboard data links (dashboards_create). Security boundary: The link shows only the panels you defined: totals, or at most 50 rows of the fields you chose. It never reaches othe…","title":"Security for apps: Pattern C: read-only dashboards","url":"build/security.html#pattern-c-read-only-dashboards"},{"id":"guide:build/security#rotate-and-revoke","kind":"guide","section":"Build with AgentDB","text":"Plan for a key to leak one day. Then the fix takes minutes. Agent key (recommended for apps): Create a new agent with the same role and rules. Put its key in your server's secret settings and redeploy. Revoke the old agent with agents_revoke or DELETE /v1/workspaces/{ws}/agents/…","title":"Security for apps: Rotate and revoke keys","url":"build/security.html#rotate-and-revoke"},{"id":"guide:build/security#the-rule","kind":"guide","section":"Build with AgentDB","text":"Never put an AgentDB API key in code that runs on someone else's device. That means no key in: HTML, JavaScript or CSS that a browser loads; a client bundle built by React, Vue, Svelte, Angular, Next.js or Vite; a mobile app, desktop app or browser extension; a public Git reposi…","title":"Security for apps: The rule","url":"build/security.html#the-rule"},{"id":"guide:build/security#why-a-key-in-the-browser-is-a-problem","kind":"guide","section":"Build with AgentDB","text":"Anyone can open the developer tools of their browser and read every request a page makes. A key in a page is therefore public. A key acts with the full rights of its owner: An account key reaches every workspace of your account. An agent key reaches one workspace, with the role…","title":"Security for apps: Why a key in the browser is a problem","url":"build/security.html#why-a-key-in-the-browser-is-a-problem"},{"id":"guide:build/security#wrong-vs-secure","kind":"guide","section":"Build with AgentDB","text":"The wrong way puts the key in the page. Anyone who opens the page can copy it and read, change or delete your data. The secure way splits the work in two. The browser calls your backend, without any key. Your backend checks the person and calls AgentDB with a key from its enviro…","title":"Security for apps: Wrong and secure, side by side","url":"build/security.html#wrong-vs-secure"},{"id":"guide:concepts","kind":"guide","section":"Use AgentDB","text":"Workspaces, objects, fields, relationships, records, versions and idempotency keys explained.","title":"Concepts","url":"concepts.html"},{"id":"guide:concepts#idempotency","kind":"guide","section":"Use AgentDB","text":"A network error can leave you unsure whether a write happened. An idempotency key makes a retry safe. Send the write with a key you choose, such as create-ada-2. If you are unsure it worked, send the same write with the same key again. AgentDB returns the original result and wri…","title":"Concepts: Idempotency keys","url":"concepts.html#idempotency"},{"id":"guide:concepts#next-steps","kind":"guide","section":"Use AgentDB","text":"Query your data with filters, sorting and totals. Files and imports to bring in existing data.","title":"Concepts: Next steps","url":"concepts.html#next-steps"},{"id":"guide:concepts#objects-and-fields","kind":"guide","section":"Use AgentDB","text":"An object is a type of record, like a table in a spreadsheet. Examples are contact, company and invoice. A field is one typed value on an object, like a column. Every field has a name and a type. AgentDB checks each value against its type on every write. AgentDB has more than 25…","title":"Concepts: Objects and fields","url":"concepts.html#objects-and-fields"},{"id":"guide:concepts#records","kind":"guide","section":"Use AgentDB","text":"A record is one row of an object, such as one contact. Every record has: an id that starts with rec_, the object it belongs to, its field values under data, a version number, created_at and updated_at times. A field without a value and a field set to null mean the same thing. Se…","title":"Concepts: Records","url":"concepts.html#records"},{"id":"guide:concepts#relationships","kind":"guide","section":"Use AgentDB","text":"A relationship is a named link type between two objects. For example, a contact works_at a company. The source object is where the link starts: contact. The target object is where it points: company. The cardinality is one or many. With one, each contact links to at most one com…","title":"Concepts: Relationships","url":"concepts.html#relationships"},{"id":"guide:concepts#versions","kind":"guide","section":"Use AgentDB","text":"Every record starts at version 1. Each change adds one. An update must name the version you last read: Did someone else change the record after you read it? Then your update fails with VERSION_CONFLICT, and nothing is written. Read the record again, apply your change and try aga…","title":"Concepts: Versions","url":"concepts.html#versions"},{"id":"guide:concepts#workspaces","kind":"guide","section":"Use AgentDB","text":"A workspace is one isolated project. It has its own objects, records, files and settings. Nothing in one workspace can see another workspace. Id: starts with ws_ and never changes. Name: a readable name that you can change. Slug: a short handle such as example-crm. It is unique…","title":"Concepts: Workspaces","url":"concepts.html#workspaces"},{"id":"guide:connect-your-ai","kind":"guide","section":"Start here","text":"Connect claude.ai, ChatGPT, Claude Code, Claude Desktop, Cursor and other MCP clients to AgentDB, and manage connected apps.","title":"Connect your AI","url":"connect-your-ai.html"},{"id":"guide:connect-your-ai#api-key-header","kind":"guide","section":"Start here","text":"Any client that supports Streamable HTTP with custom headers works. Give it the URL and this header: For example, Claude Code without the CLI: Write Bearer, one space, then the full key. Do not add quotes inside the value.","title":"Connect your AI: Any other MCP client","url":"connect-your-ai.html#api-key-header"},{"id":"guide:connect-your-ai#chatgpt","kind":"guide","section":"Start here","text":"ChatGPT connects with OAuth, like claude.ai. Custom connectors need a paid ChatGPT plan. On a Business or Enterprise plan, an admin may have to allow them. In ChatGPT, add a custom MCP server or connector. The menu name depends on your ChatGPT version. Name it AgentDB and enter…","title":"Connect your AI: ChatGPT","url":"connect-your-ai.html#chatgpt"},{"id":"guide:connect-your-ai#check","kind":"guide","section":"Start here","text":"Ask your agent: \"Using AgentDB, show the workspace info and the schema.\" The agent calls workspace_info and schema_inspect. Does your agent miss a tool that this documentation names? See My AI client does not see a new tool.","title":"Connect your AI: Check the connection","url":"connect-your-ai.html#check"},{"id":"guide:connect-your-ai#claude","kind":"guide","section":"Start here","text":"In Claude, open Customize, then Connectors, then Add custom connector. Enter the URL https://app.agentdb.link/mcp. Keep the authentication on OAuth. Claude opens an AgentDB page. Approve the connection there. Back in Claude, turn the connector on in a chat. The AgentDB tools are…","title":"Connect your AI: claude.ai and Claude Desktop","url":"connect-your-ai.html#claude"},{"id":"guide:connect-your-ai#compact-tools","kind":"guide","section":"Start here","text":"AgentDB has more than 200 operations. Some clients work better with fewer tools. Add ?tools=compact to the URL: Clients that send headers can send x-agentdb-tools: compact instead. The compact list holds 16 everyday tools, such as schema_inspect, records_create, records_query an…","title":"Connect your AI: Use a short tool list","url":"connect-your-ai.html#compact-tools"},{"id":"guide:connect-your-ai#connected-apps","kind":"guide","section":"Start here","text":"Every AI client you connected by signing in appears under Connected apps. You can see what each one can reach and end its access. Sign in to the app at https://app.agentdb.link/app. Open Settings, then Connected apps. Each row shows the client name, the workspaces it reaches, wh…","title":"Connect your AI: Connected apps","url":"connect-your-ai.html#connected-apps"},{"id":"guide:connect-your-ai#discover-operations","kind":"guide","section":"Start here","text":"Your agent does not need to scan the whole tool list. It asks agentdb_capabilities instead. A search in plain words returns the best matching operations: Name one operation to get its full input schema and an example: Then run any operation with agentdb_execute. It has the same…","title":"Connect your AI: Discover operations","url":"connect-your-ai.html#discover-operations"},{"id":"guide:connect-your-ai#local-tools","kind":"guide","section":"Start here","text":"The agentdb CLI sets up local AI tools for you. Your key stays in the operating system's credential store. No key is written into the tool's configuration file. Install the CLI and log in. See Get started. Register AgentDB in your tool: Replace claude with the name of your tool:…","title":"Connect your AI: Claude Code, Cursor and other local tools","url":"connect-your-ai.html#local-tools"},{"id":"guide:connect-your-ai#workspaces","kind":"guide","section":"Start here","text":"An account can have several workspaces. Every data tool takes an optional workspace argument: an id, a slug or the exact name. Without it, the tool uses your default workspace. Tell your agent which workspace to use. For example: \"In my Example CRM workspace, list the contacts.\"…","title":"Connect your AI: Choose the workspace","url":"connect-your-ai.html#workspaces"},{"id":"guide:dashboards-and-sharing","kind":"guide","section":"Use AgentDB","text":"Build live dashboards, share them with a link or a password, and publish saved views read-only.","title":"Dashboards and sharing","url":"dashboards-and-sharing.html"},{"id":"guide:dashboards-and-sharing#build-your-own-page-on-the-data-link","kind":"guide","section":"Use AgentDB","text":"data_url needs no API key, and any web page can fetch it. It returns the dashboard with a marker. For live updates, call data_url?since=<marker>&wait=1 in a loop. AgentDB answers about a second after the data changes. When nothing changes, it answers {\"unchanged\": true} after ab…","title":"Dashboards and sharing: Build your own page on the data link","url":"dashboards-and-sharing.html#build-your-own-page-on-the-data-link"},{"id":"guide:dashboards-and-sharing#create-a-live-dashboard","kind":"guide","section":"Use AgentDB","text":"Ask your AI: \"Make a live dashboard of my contacts by stage.\" It calls dashboards_create with a list of panels. A panel shows totals (aggregate, like records_aggregate) or a short list (query, at most 50 rows). A dashboard has at most 12 panels. A panel displays as number, bar,…","title":"Dashboards and sharing: Create a live dashboard","url":"dashboards-and-sharing.html#create-a-live-dashboard"},{"id":"guide:dashboards-and-sharing#custom-dashboards-experimental","kind":"guide","section":"Use AgentDB","text":"A custom dashboard is a small website your AI builds: HTML, CSS, JavaScript, images and fonts. AgentDB hosts it at its own address, with live, read-only data. Custom dashboards may not be available on every server. They may change before version 2.0. How your AI builds one: dash…","title":"Dashboards and sharing: Custom dashboards (experimental)","url":"dashboards-and-sharing.html#custom-dashboards-experimental"},{"id":"guide:dashboards-and-sharing#publish-a-saved-view","kind":"guide","section":"Use AgentDB","text":"A saved view is a named query on one object. You can publish it read-only through a link. People see a table; pages can use its data_url. The link expires after 7 days by default. expires_in_hours goes up to one year. access: \"password\" asks for a password first. The view runs w…","title":"Dashboards and sharing: Publish a saved view","url":"dashboards-and-sharing.html#publish-a-saved-view"},{"id":"guide:dashboards-and-sharing#share-a-dashboard","kind":"guide","section":"Use AgentDB","text":"You choose who can read a dashboard. You set this when you create it, or later with dashboards_update. Give the password to people separately. Never write it into a page. More controls: Expiry: new link dashboards expire after 90 days. Set expires_in_days (1 to 365), or null for…","title":"Dashboards and sharing: Share a dashboard","url":"dashboards-and-sharing.html#share-a-dashboard"},{"id":"guide:files-and-imports","kind":"guide","section":"Use AgentDB","text":"Upload and attach files, share them with expiring links, import CSV, JSON and JSONL files, and export your data.","title":"Files and imports","url":"files-and-imports.html"},{"id":"guide:files-and-imports#attach-a-file-to-a-record","kind":"guide","section":"Use AgentDB","text":"One file can belong to several records. Each attachment has a role, such as invoice_pdf or photo. In practice your AI attaches files to records you already have. The example first creates a client record: files_list with a record_id shows the files of one record. files_detach re…","title":"Files and imports: Attach a file to a record","url":"files-and-imports.html#attach-a-file-to-a-record"},{"id":"guide:files-and-imports#download-a-file","kind":"guide","section":"Use AgentDB","text":"files_download returns the bytes as base64. Your AI also sees images as images.","title":"Files and imports: Download a file","url":"files-and-imports.html#download-a-file"},{"id":"guide:files-and-imports#export-your-data","kind":"guide","section":"Use AgentDB","text":"Owners and admins can export records, links, schema and file metadata at any time. The export is NDJSON: one JSON object per line. ?objects=contact,company limits the export to some objects. ?format=bundle returns a .tar.gz that also holds the file bytes. Your AI can call record…","title":"Files and imports: Export your data","url":"files-and-imports.html#export-your-data"},{"id":"guide:files-and-imports#file-types-and-media","kind":"guide","section":"Use AgentDB","text":"AgentDB accepts the file types it can verify. That includes images, PDF, Office documents, text, CSV, JSON, audio and video. AgentDB checks the first bytes of every upload against the declared type. A file that does not match is refused with CONTENT_MISMATCH. HTML, SVG and progr…","title":"Files and imports: File types and media","url":"files-and-imports.html#file-types-and-media"},{"id":"guide:files-and-imports#import-a-csv-json-or-jsonl-file","kind":"guide","section":"Use AgentDB","text":"You can import hundreds of rows in one call. The file goes straight to AgentDB over HTTPS. It does not pass through the chat. The steps: Your AI defines the object and a unique field to match on, such as email. It calls imports_start and gets a one-time upload link. It uploads t…","title":"Files and imports: Import a CSV, JSON or JSONL file","url":"files-and-imports.html#import-a-csv-json-or-jsonl-file"},{"id":"guide:files-and-imports#share-a-file-with-a-link","kind":"guide","section":"Use AgentDB","text":"A signed link lets someone open one file without an API key. Use it for a dashboard, an email or a web page. Expiry: from 60 seconds to 7 days. The default is 1 hour. Who can open it: anyone who has the link, until it expires. Stop it early: files_link_revoke ends the link at on…","title":"Files and imports: Share a file with a link","url":"files-and-imports.html#share-a-file-with-a-link"},{"id":"guide:files-and-imports#upload-a-file","kind":"guide","section":"Use AgentDB","text":"Your AI sends a small file as base64 with files_upload. It can attach the file to a record in the same call. The answer holds the file id, its size, its SHA-256 and its status. Size: inline uploads go up to 4 MiB by default. workspace_info shows the exact limit. Bigger files: th…","title":"Files and imports: Upload a file","url":"files-and-imports.html#upload-a-file"},{"id":"guide:getting-started","kind":"guide","section":"Start here","text":"Sign up, get an API key, define contacts and companies, link them and query them in about five minutes.","title":"Get started","url":"getting-started.html"},{"id":"guide:getting-started#ask-your-agent","kind":"guide","section":"Start here","text":"Connect your AI client. See Connect your AI. Then ask in plain language, for example: Using AgentDB, create a company object (name unique, country) and a contact object (email unique, name, score integer). A contact works_at one company. Add three fictional companies and eight f…","title":"Get started: 8. Let your agent do it","url":"getting-started.html#ask-your-agent"},{"id":"guide:getting-started#define-objects","kind":"guide","section":"Start here","text":"An object is a type of record, like a table. A field is a typed value on that object. Read more in Concepts. Create the company object with a unique name and a country: Create the contact object with an email address, a name and a score: Define how they relate. A contact works_a…","title":"Get started: 4. Define a company and a contact","url":"getting-started.html#define-objects"},{"id":"guide:getting-started#install-the-cli","kind":"guide","section":"Start here","text":"Install the CLI on macOS or Linux. It needs no Node.js. Log in. The CLI opens your browser. You approve the login there with your API key. The CLI keeps the key in your operating system's credential store. It never writes the key into a project file. Scripts and CI can use two e…","title":"Get started: 3. Install the CLI and log in","url":"getting-started.html#install-the-cli"},{"id":"guide:getting-started#link-records","kind":"guide","section":"Start here","text":"Link the contact to the company: Now ask who works at the company. --incoming follows links that point at the company.","title":"Get started: 6. Link the records","url":"getting-started.html#link-records"},{"id":"guide:getting-started#next-steps","kind":"guide","section":"Start here","text":"Connect your AI to Claude, ChatGPT, Cursor or another client. Files and imports to attach documents and import a CSV file. Dashboards and sharing to show your data on a live page.","title":"Get started: Next steps","url":"getting-started.html#next-steps"},{"id":"guide:getting-started#query","kind":"guide","section":"Start here","text":"Find contacts with a score of 70 or more at a company in NL: The same query works over REST. Your agent sends the same JSON to the records_query tool. Learn every filter and option in Query your data.","title":"Get started: 7. Query your records","url":"getting-started.html#query"},{"id":"guide:getting-started#save-your-key","kind":"guide","section":"Start here","text":"The next page shows your API key. It starts with adbk.. The page shows the key only once. Choose Copy API key or Download .env and keep it in a password manager. Never paste it into a chat or commit it to git. Lost your key? Request a recovery link at https://app.agentdb.link/re…","title":"Get started: 2. Save your API key","url":"getting-started.html#save-your-key"},{"id":"guide:getting-started#sign-up","kind":"guide","section":"Start here","text":"Open https://app.agentdb.link. Enter your email address. A project name is optional. Accept the terms and choose Create workspace. AgentDB creates your account, your first workspace and an API key at once. There is no waiting list.","title":"Get started: 1. Sign up","url":"getting-started.html#sign-up"},{"id":"guide:getting-started#write-records","kind":"guide","section":"Start here","text":"Create a company and a contact. Each command prints the new record with its id. AgentDB checks every value against its field type. A wrong value is refused with a clear error, and nothing is written.","title":"Get started: 5. Write records","url":"getting-started.html#write-records"},{"id":"guide:hub-and-approvals","kind":"guide","section":"Build and automate","text":"Let a person approve important changes before they happen, and follow approvals, inbox items and notifications in the AgentHub.","title":"Approvals and the AgentHub","url":"hub-and-approvals.html"},{"id":"guide:hub-and-approvals#approve-or-reject","kind":"guide","section":"Build and automate","text":"A person decides in the AgentHub. Open it at https://app.agentdb.link/app/hub and sign in. Open the Overview tab. Waiting for your decision lists the proposals you may decide. Read the preview, the reason and the evidence. The exact action is shown too. Choose Approve, Reject or…","title":"Approvals and the AgentHub: Approve or reject a change","url":"hub-and-approvals.html#approve-or-reject"},{"id":"guide:hub-and-approvals#create-an-approval-policy","kind":"guide","section":"Build and automate","text":"The example uses a small deal list: This policy covers updates that raise a deal above 10,000: Main settings: applies_to: [\"agent\"] covers agent keys and AI connectors such as Claude or ChatGPT. Add key to cover API keys too. Only owners and admins manage policies. A human-only…","title":"Approvals and the AgentHub: Create an approval policy","url":"hub-and-approvals.html#create-an-approval-policy"},{"id":"guide:hub-and-approvals#follow-the-outcome","kind":"guide","section":"Build and automate","text":"The agent reads the proposal with approvals_get until its status is final. approvals_list shows proposals, for example with status: \"pending\". approvals_cancel withdraws a pending proposal. AgentDB runs an approved change exactly once. A second approval or a retry never applies…","title":"Approvals and the AgentHub: Follow the outcome","url":"hub-and-approvals.html#follow-the-outcome"},{"id":"guide:hub-and-approvals#notifications","kind":"guide","section":"Build and automate","text":"AgentDB puts an inbox item in your inbox when something needs you: a proposal you may decide, or a decision on your own proposal; a calendar reminder or a mention in a channel; a flow notify action or a form submission; a scheduled job or webhook that failed after its last retry…","title":"Approvals and the AgentHub: Notifications","url":"hub-and-approvals.html#notifications"},{"id":"guide:hub-and-approvals#propose-a-change","kind":"guide","section":"Build and automate","text":"The agent tries the update. The policy stops it: The agent proposes the same change with approvals_submit. It adds a reason and evidence for the person who decides. What AgentDB does with a proposal: It checks the input, exactly as the real write would. It checks that the agent…","title":"Approvals and the AgentHub: Propose a change","url":"hub-and-approvals.html#propose-a-change"},{"id":"guide:hub-and-approvals#the-agenthub","kind":"guide","section":"Build and automate","text":"The AgentHub shows all your workspaces in one place. It has five tabs: Your role and permissions apply everywhere in the AgentHub. Nobody else can read your inbox, also not the owner.","title":"Approvals and the AgentHub: The AgentHub","url":"hub-and-approvals.html#the-agenthub"},{"id":"guide:index","kind":"guide","section":"Start here","text":"What you and your AI agents can do with AgentDB, and where to find each guide.","title":"AgentDB documentation","url":"index.html"},{"id":"guide:index#for-ai-agents","kind":"guide","section":"Start here","text":"Agents can read a compact, machine-readable version of this documentation. See Documentation for agents. An agent connected over MCP can also ask AgentDB itself. The agentdb_capabilities tool lists every operation with its input and an example. See Discover operations.","title":"AgentDB documentation: For AI agents","url":"index.html#for-ai-agents"},{"id":"guide:index#new-here","kind":"guide","section":"Start here","text":"Get started in about five minutes. You sign up, get a key and store your first records. Connect your AI so your agent can use AgentDB by itself. Read the concepts to learn the words this documentation uses.","title":"AgentDB documentation: New here?","url":"index.html#new-here"},{"id":"guide:index#reference","kind":"guide","section":"Start here","text":"CLI reference: every agentdb command and option. Field types: every field type with its rules and examples. File types: which files you can upload. Release notes: what changed in each version.","title":"AgentDB documentation: Reference","url":"index.html#reference"},{"id":"guide:index#what-you-can-do","kind":"guide","section":"Start here","text":"Give your agent a memory that lasts. Your agent creates objects such as contact and company with typed fields. See Concepts. Find exactly the records you need. Filter, sort, page, count and total your data. See Query your data. Search text across records. Turn on full-text searc…","title":"AgentDB documentation: What you can do","url":"index.html#what-you-can-do"},{"id":"guide:query-performance","kind":"guide","section":"Use AgentDB","text":"How AgentDB tells you when an index would make a query faster, and how to add one.","title":"Query performance","url":"query-performance.html"},{"id":"guide:query-performance#create","kind":"guide","section":"Use AgentDB","text":"Create the index with the suggested arguments. Here the object is small, so the index is only an example. In the AgentDB app, open the Schema tab. Each object has a Performance section with its indexes and recommendations. Owners and admins see a Create index button there. Each…","title":"Query performance: Create the index","url":"query-performance.html#create"},{"id":"guide:query-performance#hint","kind":"guide","section":"Use AgentDB","text":"A query result can carry a performance object next to the records. All other fields stay the same. The numbers are estimates. AgentDB samples about 1,000 records to make them, and estimate: true marks them. The same hint reaches you at most once a day. You can ask for it again a…","title":"Query performance: What the hint looks like","url":"query-performance.html#hint"},{"id":"guide:query-performance#list","kind":"guide","section":"Use AgentDB","text":"Ask for the current recommendations at any time. AgentDB lists them from the queries run recently, slowest first. The list also shows your existing indexes and the limits. Over REST, call GET /v1/workspaces/{ws}/indexes?recommendations=1. With the CLI, run agentdb indexes list -…","title":"Query performance: See all recommendations","url":"query-performance.html#list"},{"id":"guide:query-performance#operators","kind":"guide","section":"Use AgentDB","text":"Set AGENTDB_QUERY_ADVICE=off to turn query advice off. Queries then never carry performance, and the list of recommendations stays empty. Creating an index also refreshes the statistics SQLite uses to plan queries. This takes about one pass over the records.","title":"Query performance: For operators","url":"query-performance.html#operators"},{"id":"guide:query-performance#verify","kind":"guide","section":"Use AgentDB","text":"Add \"explain\": true to a query. The result then always has performance.explain with the time the query took and a short plan. Run the query once before and once after you create the index. Compare duration_ms. After the index, plan names the index, for example uses index contact…","title":"Query performance: Check that the index helped","url":"query-performance.html#verify"},{"id":"guide:query-performance#when","kind":"guide","section":"Use AgentDB","text":"AgentDB checks a query only when its object has 5,000 records or more. Smaller objects are fast without indexes. AgentDB suggests an index when all of these are true: The query filters with eq, in, lt, lte, gt, gte, is_null or starts_with, or it sorts by a field. The query reads…","title":"Query performance: When AgentDB suggests an index","url":"query-performance.html#when"},{"id":"guide:querying","kind":"guide","section":"Use AgentDB","text":"Filter, sort and page records, compute totals, search text and save queries as views.","title":"Query your data","url":"querying.html"},{"id":"guide:querying#aggregate","kind":"guide","section":"Use AgentDB","text":"Use records_aggregate for counts, sums, averages, minimums and maximums. AgentDB computes them, so you never page through records to add them up. Group date fields by hour, day, week, month or year: Group by up to 3 fields, with up to 10 metrics. where uses the same filter as re…","title":"Query your data: Count and total","url":"querying.html#aggregate"},{"id":"guide:querying#example-data","kind":"guide","section":"Use AgentDB","text":"The examples on this page use deals that belong to companies. Your agent would set this up with a few tool calls:","title":"Query your data: Example data","url":"querying.html#example-data"},{"id":"guide:querying#filter","kind":"guide","section":"Use AgentDB","text":"records_query takes the object, a where filter, a sort and a limit. All conditions in where.all must match. The same query over REST and from the CLI: Operators Which operators work depends on the field type. Some rules to know: eq on text is exact and case-sensitive. Use contai…","title":"Query your data: Filter records","url":"querying.html#filter"},{"id":"guide:querying#full-text-search","kind":"guide","section":"Use AgentDB","text":"Full-text search finds records by words, ranked by relevance. Turn it on once per object. By default AgentDB indexes every text-like field. From then on, AgentDB keeps the index current on every write. Search with records_search: Every word must occur. Add \"match\": \"any\" to matc…","title":"Query your data: Full-text search","url":"querying.html#full-text-search"},{"id":"guide:querying#next-steps","kind":"guide","section":"Use AgentDB","text":"Concepts explains objects, fields and relationships. Troubleshooting explains errors such as INVALID_QUERY.","title":"Query your data: Next steps","url":"querying.html#next-steps"},{"id":"guide:querying#saved-views","kind":"guide","section":"Use AgentDB","text":"A saved view is a named query that you or your agent can run again. Views are versioned. A view is private by default. With \"visibility\": \"workspace\", everyone in the workspace can use it, each with their own permissions. A view can also describe how to show its records: as a ta…","title":"Query your data: Saved views","url":"querying.html#saved-views"},{"id":"guide:querying#sort-and-page","kind":"guide","section":"Use AgentDB","text":"sort takes one field with \"order\": \"asc\" or \"desc\". Ties are sorted by id, so the order is stable. Without sort, records come oldest first. Fields without a value come first when ascending and last when descending. limit is 1 to 200. The default is 50. When more records match, t…","title":"Query your data: Sort and page","url":"querying.html#sort-and-page"},{"id":"guide:troubleshooting","kind":"guide","section":"Help","text":"What AgentDB error codes and CLI exit codes mean, and what to do about each one.","title":"Troubleshooting","url":"troubleshooting.html"},{"id":"guide:troubleshooting#approval-required","kind":"guide","section":"Help","text":"Meaning: an approval policy covers this write. A person must approve it first. Nothing was written. What to do: do not retry the write. Propose it with approvals_submit, with the tool name, its arguments and a reason. A person approves or rejects it in the AgentHub. The change r…","title":"Troubleshooting: APPROVAL_REQUIRED","url":"troubleshooting.html#approval-required"},{"id":"guide:troubleshooting#auth-errors","kind":"guide","section":"Help","text":"These errors mean AgentDB does not accept your key, or your key may not do this. The CLI exits with code 3 for all of them. UNAUTHENTICATED (HTTP 401): the key is missing, wrong, revoked or expired. FORBIDDEN (HTTP 403): the key is valid, but its role or scopes do not allow this…","title":"Troubleshooting: Sign-in and key errors","url":"troubleshooting.html#auth-errors"},{"id":"guide:troubleshooting#cli-exit-codes","kind":"guide","section":"Help","text":"The CLI prints JSON to standard output. Its exit code tells a script what happened: A bulk upsert with any failed item also exits with code 2.","title":"Troubleshooting: CLI exit codes","url":"troubleshooting.html#cli-exit-codes"},{"id":"guide:troubleshooting#error-shape","kind":"guide","section":"Help","text":"Every error carries a stable code, a readable message, a retryable flag and details. Over REST, the error comes with an HTTP status: Over MCP, the tool result says \"ok\": false: Retry only when retryable is true, or when you send the same idempotency key. See Idempotency keys. To…","title":"Troubleshooting: How errors look","url":"troubleshooting.html#error-shape"},{"id":"guide:troubleshooting#missing-tool","kind":"guide","section":"Help","text":"Your AI client loads the tool list when it connects. It keeps that list until it reconnects. So after an AgentDB update, a new tool can be missing. Start a new chat. Many clients reload the tool list then. Still missing? Reconnect the client. In claude.ai, disconnect and connect…","title":"Troubleshooting: My AI client does not see a new tool","url":"troubleshooting.html#missing-tool"},{"id":"guide:troubleshooting#not-found","kind":"guide","section":"Help","text":"Meaning: the record, object, file or workspace does not exist. You also get NOT_FOUND for a workspace your key cannot reach. AgentDB does not tell the two cases apart, on purpose. What to do: check the id and the workspace. Run workspace_list to see the workspaces your key reach…","title":"Troubleshooting: NOT_FOUND","url":"troubleshooting.html#not-found"},{"id":"guide:troubleshooting#quota-exceeded","kind":"guide","section":"Help","text":"Meaning: the workspace is full, or it reached a limit such as the number of saved views. AgentDB refuses new writes. Reading keeps working. What to do: delete records or files you no longer need. Run workspace_info or agentdb workspace info to see your quotas and use.","title":"Troubleshooting: QUOTA_EXCEEDED","url":"troubleshooting.html#quota-exceeded"},{"id":"guide:troubleshooting#rate-limited","kind":"guide","section":"Help","text":"Meaning: you sent too many requests in a short time. The error is retryable. What to do: wait, then retry. When details.retry_after_seconds is present, wait that long. Use the same idempotency key for a write. Send bulk data in batches with records_upsert_batch instead of one ca…","title":"Troubleshooting: RATE_LIMITED","url":"troubleshooting.html#rate-limited"},{"id":"guide:troubleshooting#still-stuck","kind":"guide","section":"Help","text":"Note the request_id from the error response. It helps support find your request.","title":"Troubleshooting: Still stuck?","url":"troubleshooting.html#still-stuck"},{"id":"guide:troubleshooting#unsupported-operation","kind":"guide","section":"Help","text":"Meaning: this server has no operation with that name. The name may be misspelled or from another version. What to do: do not retry the same name. details.available_operations lists names you can use. Or search with agentdb_capabilities. See Discover operations.","title":"Troubleshooting: UNSUPPORTED_OPERATION","url":"troubleshooting.html#unsupported-operation"},{"id":"guide:troubleshooting#validation-error","kind":"guide","section":"Help","text":"Meaning: the input breaks a rule. Nothing was written. Related codes are more specific: FIELD_TYPE_MISMATCH: a value does not fit the field type. UNKNOWN_FIELD: the object has no field with that name. REQUIRED_FIELD_MISSING: a required field has no value. INVALID_QUERY: a filter…","title":"Troubleshooting: VALIDATION_ERROR and related codes","url":"troubleshooting.html#validation-error"},{"id":"guide:troubleshooting#version-conflict","kind":"guide","section":"Help","text":"Meaning: someone changed the record after you read it. Your update named an old version. Nothing was written. What to do: read the record again with records_get. Apply your change to the new values. Send the update with the new version. details.current_version shows the version…","title":"Troubleshooting: VERSION_CONFLICT","url":"troubleshooting.html#version-conflict"},{"id":"op:access.events","kind":"operation","section":"Access and permissions","text":"Audit of member, agent and permission-grant changes (owner/admin) · GET /v1/workspaces/{ws}/access-events","title":"access.events","url":"reference/access.html#access.events"},{"id":"op:access_inspect","kind":"operation","section":"Access and permissions","text":"Who you are in this workspace (key, agent or member; role) and what you may do: per object read/write/none, per field access, and owner rules (only records whose user_ref/agent_ref field is you). · GET /v1/workspaces/{ws}/access","title":"access_inspect","url":"reference/access.html#access_inspect"},{"id":"op:agentdb_capabilities","kind":"operation","section":"Discovery","text":"Find the right AgentDB operation.","title":"agentdb_capabilities","url":"reference/discovery.html#agentdb_capabilities"},{"id":"op:agentdb_execute","kind":"operation","section":"Discovery","text":"Run any operation listed by agentdb_capabilities: {operation, arguments}.","title":"agentdb_execute","url":"reference/discovery.html#agentdb_execute"},{"id":"op:agents.keys.create","kind":"operation","section":"Access and permissions","text":"Another key for an agent (shown once) · POST /v1/workspaces/{ws}/agents/{agent}/keys","title":"agents.keys.create","url":"reference/access.html#agents.keys.create"},{"id":"op:agents_create","kind":"operation","section":"Access and permissions","text":"Create a named agent with its own API key (shown once) and a role no higher than yours: viewer, editor or admin. · POST /v1/workspaces/{ws}/agents · agentdb agents create","title":"agents_create","url":"reference/access.html#agents_create"},{"id":"op:agents_list","kind":"operation","section":"Access and permissions","text":"List named agents of the workspace (owners and admins see all; an agent sees itself and the agents it delegated to): role, status, who granted it, expiry. · GET /v1/workspaces/{ws}/agents · agentdb agents list","title":"agents_list","url":"reference/access.html#agents_list"},{"id":"op:agents_revoke","kind":"operation","section":"Access and permissions","text":"Revoke an agent immediately: its keys stop working, and so does every agent it delegated to. · DELETE /v1/workspaces/{ws}/agents/{agent} · agentdb agents revoke","title":"agents_revoke","url":"reference/access.html#agents_revoke"},{"id":"op:approval_policies_create","kind":"operation","section":"Approvals and AgentHub","text":"Owners/admins: require approval for writes. · POST /v1/workspaces/{ws}/approval-policies","title":"approval_policies_create","url":"reference/approvals_hub.html#approval_policies_create"},{"id":"op:approval_policies_delete","kind":"operation","section":"Approvals and AgentHub","text":"Delete an approval policy. · DELETE /v1/workspaces/{ws}/approval-policies/{policy}","title":"approval_policies_delete","url":"reference/approvals_hub.html#approval_policies_delete"},{"id":"op:approval_policies_list","kind":"operation","section":"Approvals and AgentHub","text":"Approval policies and the operations that can be proposed. · GET /v1/workspaces/{ws}/approval-policies","title":"approval_policies_list","url":"reference/approvals_hub.html#approval_policies_list"},{"id":"op:approval_policies_update","kind":"operation","section":"Approvals and AgentHub","text":"Change an approval policy (send its current version; null removes objects, fields or condition). · PATCH /v1/workspaces/{ws}/approval-policies/{policy}","title":"approval_policies_update","url":"reference/approvals_hub.html#approval_policies_update"},{"id":"op:approvals_cancel","kind":"operation","section":"Approvals and AgentHub","text":"Withdraw a pending proposal (the proposer, or an admin). · POST /v1/workspaces/{ws}/approvals/{approval}/cancel · agentdb approvals cancel","title":"approvals_cancel","url":"reference/approvals_hub.html#approvals_cancel"},{"id":"op:approvals_decide","kind":"operation","section":"Approvals and AgentHub","text":"Approve, reject or request changes on someone else's proposal (you can't decide your own). · POST /v1/workspaces/{ws}/approvals/{approval}/decide","title":"approvals_decide","url":"reference/approvals_hub.html#approvals_decide"},{"id":"op:approvals_get","kind":"operation","section":"Approvals and AgentHub","text":"One proposal: operation, input, preview/diff, requirements, human_only, action_hash, decisions with comments, result or error. · GET /v1/workspaces/{ws}/approvals/{approval} · agentdb approvals get","title":"approvals_get","url":"reference/approvals_hub.html#approvals_get"},{"id":"op:approvals_list","kind":"operation","section":"Approvals and AgentHub","text":"Proposals, newest first. · GET /v1/workspaces/{ws}/approvals · agentdb approvals list","title":"approvals_list","url":"reference/approvals_hub.html#approvals_list"},{"id":"op:approvals_submit","kind":"operation","section":"Approvals and AgentHub","text":"Propose a write for human approval instead of running it. · POST /v1/workspaces/{ws}/approvals · agentdb approvals submit","title":"approvals_submit","url":"reference/approvals_hub.html#approvals_submit"},{"id":"op:calendar_availability","kind":"operation","section":"Calendar","text":"Free-busy per calendar and participant. · POST /v1/workspaces/{ws}/calendar/availability · agentdb calendar availability","title":"calendar_availability","url":"reference/calendar.html#calendar_availability"},{"id":"op:calendar_expand","kind":"operation","section":"Calendar","text":"Expand an RRULE into occurrences. · POST /v1/workspaces/{ws}/calendar/expand · agentdb calendar expand","title":"calendar_expand","url":"reference/calendar.html#calendar_expand"},{"id":"op:calendar_export_ics","kind":"operation","section":"Calendar","text":"The calendar as iCalendar (.ics) text for other calendar apps. · GET /v1/workspaces/{ws}/calendars/{calendar}/ics","title":"calendar_export_ics","url":"reference/calendar.html#calendar_export_ics"},{"id":"op:calendar_find_slots","kind":"operation","section":"Calendar","text":"Find free meeting slots. · POST /v1/workspaces/{ws}/calendar/slots","title":"calendar_find_slots","url":"reference/calendar.html#calendar_find_slots"},{"id":"op:calendar_import_ics","kind":"operation","section":"Calendar","text":"Import iCalendar (.ics) text into a calendar. · POST /v1/workspaces/{ws}/calendars/import","title":"calendar_import_ics","url":"reference/calendar.html#calendar_import_ics"},{"id":"op:calendars_create","kind":"operation","section":"Calendar","text":"Create a calendar. · POST /v1/workspaces/{ws}/calendars","title":"calendars_create","url":"reference/calendar.html#calendars_create"},{"id":"op:calendars_delete","kind":"operation","section":"Calendar","text":"Delete a calendar with all its events and reminders. · DELETE /v1/workspaces/{ws}/calendars/{calendar}","title":"calendars_delete","url":"reference/calendar.html#calendars_delete"},{"id":"op:calendars_get","kind":"operation","section":"Calendar","text":"One calendar with its event count. · GET /v1/workspaces/{ws}/calendars/{calendar}","title":"calendars_get","url":"reference/calendar.html#calendars_get"},{"id":"op:calendars_list","kind":"operation","section":"Calendar","text":"List calendars. · GET /v1/workspaces/{ws}/calendars","title":"calendars_list","url":"reference/calendar.html#calendars_list"},{"id":"op:calendars_update","kind":"operation","section":"Calendar","text":"Change a calendar's name, description or timezone; owners/admins also owner and writers. · PATCH /v1/workspaces/{ws}/calendars/{calendar}","title":"calendars_update","url":"reference/calendar.html#calendars_update"},{"id":"op:capabilities","kind":"operation","section":"Discovery","text":"What this server offers (no auth) · GET /v1/capabilities","title":"capabilities","url":"reference/discovery.html#capabilities"},{"id":"op:channels_ack","kind":"operation","section":"Channels and inbox","text":"Move your read receipt (read_seq) and/or processing offset (ack_seq) forward. · POST /v1/workspaces/{ws}/channels/{channel}/ack · agentdb channels ack","title":"channels_ack","url":"reference/channels_inbox.html#channels_ack"},{"id":"op:channels_create","kind":"operation","section":"Channels and inbox","text":"Create a channel for durable work messages. · POST /v1/workspaces/{ws}/channels · agentdb channels create","title":"channels_create","url":"reference/channels_inbox.html#channels_create"},{"id":"op:channels_direct_open","kind":"operation","section":"Channels and inbox","text":"The direct (private, two-person) channel with one agent or human; created on first use. · POST /v1/workspaces/{ws}/direct-channels","title":"channels_direct_open","url":"reference/channels_inbox.html#channels_direct_open"},{"id":"op:channels_get","kind":"operation","section":"Channels and inbox","text":"One channel with your membership and last_seq. · GET /v1/workspaces/{ws}/channels/{channel} · agentdb channels get","title":"channels_get","url":"reference/channels_inbox.html#channels_get"},{"id":"op:channels_list","kind":"operation","section":"Channels and inbox","text":"Channels you can see, with your membership (role, notify, read_seq, ack_seq, unread) and last_seq. · GET /v1/workspaces/{ws}/channels · agentdb channels list","title":"channels_list","url":"reference/channels_inbox.html#channels_list"},{"id":"op:channels_members_add","kind":"operation","section":"Channels and inbox","text":"Add members (agent:agt_…, user:acc_…, key:key_…). · POST /v1/workspaces/{ws}/channels/{channel}/members","title":"channels_members_add","url":"reference/channels_inbox.html#channels_members_add"},{"id":"op:channels_members_list","kind":"operation","section":"Channels and inbox","text":"Members with their read receipts (read_seq) and ack offsets (ack_seq). · GET /v1/workspaces/{ws}/channels/{channel}/members","title":"channels_members_list","url":"reference/channels_inbox.html#channels_members_list"},{"id":"op:channels_members_remove","kind":"operation","section":"Channels and inbox","text":"Remove a member (moderators) or leave a channel (your own identity). · DELETE /v1/workspaces/{ws}/channels/{channel}/members/{member}","title":"channels_members_remove","url":"reference/channels_inbox.html#channels_members_remove"},{"id":"op:channels_pending","kind":"operation","section":"Channels and inbox","text":"Messages from others after your ack offset, oldest first. · GET /v1/workspaces/{ws}/channels/{channel}/pending · agentdb channels pending","title":"channels_pending","url":"reference/channels_inbox.html#channels_pending"},{"id":"op:channels_purge","kind":"operation","section":"Channels and inbox","text":"Apply the channel's retention now (moderators). · POST /v1/workspaces/{ws}/channels/{channel}/purge · agentdb channels purge","title":"channels_purge","url":"reference/channels_inbox.html#channels_purge"},{"id":"op:channels_subscribe","kind":"operation","section":"Channels and inbox","text":"Join a public channel or change your notify level: all (inbox item per message), mentions (default), none (muted). · POST /v1/workspaces/{ws}/channels/{channel}/subscribe · agentdb channels subscribe","title":"channels_subscribe","url":"reference/channels_inbox.html#channels_subscribe"},{"id":"op:channels_update","kind":"operation","section":"Channels and inbox","text":"Rename, set topic or retention_days, archive/unarchive (moderators). · PATCH /v1/workspaces/{ws}/channels/{channel} · agentdb channels update","title":"channels_update","url":"reference/channels_inbox.html#channels_update"},{"id":"op:cms_configure","kind":"operation","section":"Publishing","text":"Make an object a CMS content type (or change its settings): status/slug/locale fields, the ONLY fields the public delivery API shows (public_fields), delivery off | token (default) | public, CORS origins, cache seconds. · POST /v1/workspaces/{ws}/cms/types · agentdb cms configure","title":"cms_configure","url":"reference/publishing.html#cms_configure"},{"id":"op:cms_diff","kind":"operation","section":"Publishing","text":"Field-by-field diff between two revisions (Markdown bodies line by line); to defaults to the current version. · GET /v1/workspaces/{ws}/records/{record}/diff · agentdb cms diff","title":"cms_diff","url":"reference/publishing.html#cms_diff"},{"id":"op:cms_get","kind":"operation","section":"Publishing","text":"One content type's delivery settings and published item count. · GET /v1/workspaces/{ws}/cms/types/{object}","title":"cms_get","url":"reference/publishing.html#cms_get"},{"id":"op:cms_list","kind":"operation","section":"Publishing","text":"CMS content types and their delivery settings. · GET /v1/workspaces/{ws}/cms/types","title":"cms_list","url":"reference/publishing.html#cms_list"},{"id":"op:cms_preview","kind":"operation","section":"Publishing","text":"What the delivery API returns for a type (or one slug), without a token. · POST /v1/workspaces/{ws}/cms/preview","title":"cms_preview","url":"reference/publishing.html#cms_preview"},{"id":"op:cms_publish","kind":"operation","section":"Publishing","text":"Publish an item that is in review (or re-publish a published one with its latest edits): takes the immutable snapshot the delivery API serves. · POST /v1/workspaces/{ws}/records/{record}/publish · agentdb cms publish","title":"cms_publish","url":"reference/publishing.html#cms_publish"},{"id":"op:cms_restore","kind":"operation","section":"Publishing","text":"Restore the content of an earlier revision as a new version (needs the current version; the status stays). · POST /v1/workspaces/{ws}/records/{record}/restore-revision · agentdb cms restore","title":"cms_restore","url":"reference/publishing.html#cms_restore"},{"id":"op:cms_revision_get","kind":"operation","section":"Publishing","text":"The full data of one revision. · GET /v1/workspaces/{ws}/records/{record}/revisions/{revision}","title":"cms_revision_get","url":"reference/publishing.html#cms_revision_get"},{"id":"op:cms_revisions","kind":"operation","section":"Publishing","text":"Every version of a CMS item (newest first) with status, author and which one is published; pending_changes says whether edits are unpublished. · GET /v1/workspaces/{ws}/records/{record}/revisions · agentdb cms revisions","title":"cms_revisions","url":"reference/publishing.html#cms_revisions"},{"id":"op:cms_schedule_publish","kind":"operation","section":"Publishing","text":"Publish an item at a future time (a one-off scheduler job; owners/admins). · POST /v1/workspaces/{ws}/records/{record}/schedule-publish","title":"cms_schedule_publish","url":"reference/publishing.html#cms_schedule_publish"},{"id":"op:cms_tokens_create","kind":"operation","section":"Publishing","text":"Create a read-only delivery token for websites (optionally limited to types, origins, an expiry). · POST /v1/workspaces/{ws}/cms/delivery-tokens","title":"cms_tokens_create","url":"reference/publishing.html#cms_tokens_create"},{"id":"op:cms_tokens_list","kind":"operation","section":"Publishing","text":"Delivery tokens (never the secret) with status and last use. · GET /v1/workspaces/{ws}/cms/delivery-tokens","title":"cms_tokens_list","url":"reference/publishing.html#cms_tokens_list"},{"id":"op:cms_tokens_revoke","kind":"operation","section":"Publishing","text":"Revoke a delivery token at once. · DELETE /v1/workspaces/{ws}/cms/delivery-tokens/{token}","title":"cms_tokens_revoke","url":"reference/publishing.html#cms_tokens_revoke"},{"id":"op:cms_unconfigure","kind":"operation","section":"Publishing","text":"Stop treating an object as a content type: nothing of it is delivered any more. · DELETE /v1/workspaces/{ws}/cms/types/{object} · agentdb cms unconfigure","title":"cms_unconfigure","url":"reference/publishing.html#cms_unconfigure"},{"id":"op:cms_unpublish","kind":"operation","section":"Publishing","text":"Take an item offline by moving it to another status (default archived); the snapshot is removed at once. · POST /v1/workspaces/{ws}/records/{record}/unpublish · agentdb cms unpublish","title":"cms_unpublish","url":"reference/publishing.html#cms_unpublish"},{"id":"op:connectors.inbound","kind":"operation","section":"Integrations","text":"Receive a signed inbound event for a connector (no API key) · POST /v1/inbound/{ws}/{connector} · experimental","title":"connectors.inbound","url":"reference/integrations.html#connectors.inbound"},{"id":"op:connectors_create","kind":"operation","section":"Integrations","text":"Configure a connector (owners/admins). · POST /v1/workspaces/{ws}/connectors · agentdb connectors create · experimental","title":"connectors_create","url":"reference/integrations.html#connectors_create"},{"id":"op:connectors_delete","kind":"operation","section":"Integrations","text":"Delete a connector. · DELETE /v1/workspaces/{ws}/connectors/{connector} · agentdb connectors delete · experimental","title":"connectors_delete","url":"reference/integrations.html#connectors_delete"},{"id":"op:connectors_get","kind":"operation","section":"Integrations","text":"One connector. · GET /v1/workspaces/{ws}/connectors/{connector} · agentdb connectors get · experimental","title":"connectors_get","url":"reference/integrations.html#connectors_get"},{"id":"op:connectors_inbound_events","kind":"operation","section":"Integrations","text":"Verified inbound events. · GET /v1/workspaces/{ws}/connector-inbound-events · agentdb connectors inbound-events · experimental","title":"connectors_inbound_events","url":"reference/integrations.html#connectors_inbound_events"},{"id":"op:connectors_list","kind":"operation","section":"Integrations","text":"List connectors. · GET /v1/workspaces/{ws}/connectors · agentdb connectors list · experimental","title":"connectors_list","url":"reference/integrations.html#connectors_list"},{"id":"op:connectors_rotate_inbound_secret","kind":"operation","section":"Integrations","text":"New inbound signing secret. · POST /v1/workspaces/{ws}/connectors/{connector}/rotate-inbound-secret · agentdb connectors rotate-inbound-secret · experimental","title":"connectors_rotate_inbound_secret","url":"reference/integrations.html#connectors_rotate_inbound_secret"},{"id":"op:connectors_runs","kind":"operation","section":"Integrations","text":"Sync run history. · GET /v1/workspaces/{ws}/connector-runs · agentdb connectors runs · experimental","title":"connectors_runs","url":"reference/integrations.html#connectors_runs"},{"id":"op:connectors_send","kind":"operation","section":"Integrations","text":"Perform an allowed external action. · POST /v1/workspaces/{ws}/connectors/{connector}/actions · agentdb connectors send · experimental","title":"connectors_send","url":"reference/integrations.html#connectors_send"},{"id":"op:connectors_sync","kind":"operation","section":"Integrations","text":"Run a sync now. · POST /v1/workspaces/{ws}/connectors/{connector}/sync · agentdb connectors sync · experimental","title":"connectors_sync","url":"reference/integrations.html#connectors_sync"},{"id":"op:connectors_types","kind":"operation","section":"Integrations","text":"Connector types on this server. · GET /v1/workspaces/{ws}/connector-types · agentdb connectors types · experimental","title":"connectors_types","url":"reference/integrations.html#connectors_types"},{"id":"op:connectors_update","kind":"operation","section":"Integrations","text":"Change a connector. · PATCH /v1/workspaces/{ws}/connectors/{connector} · agentdb connectors update · experimental","title":"connectors_update","url":"reference/integrations.html#connectors_update"},{"id":"op:content_dispatch","kind":"operation","section":"Publishing","text":"Hand a content post to the operator's outbound publisher. · POST /v1/workspaces/{ws}/records/{record}/dispatch · agentdb content dispatch · experimental","title":"content_dispatch","url":"reference/publishing.html#content_dispatch"},{"id":"op:conversations_assign","kind":"operation","section":"Channels and inbox","text":"Hand a conversation to an agent or human (or null = back to the queue), with an optional note. · POST /v1/workspaces/{ws}/conversations/{conversation}/assign · agentdb conversations assign · experimental","title":"conversations_assign","url":"reference/channels_inbox.html#conversations_assign"},{"id":"op:conversations_claim","kind":"operation","section":"Channels and inbox","text":"Take an unassigned conversation. · POST /v1/workspaces/{ws}/conversations/{conversation}/claim · agentdb conversations claim · experimental","title":"conversations_claim","url":"reference/channels_inbox.html#conversations_claim"},{"id":"op:conversations_create","kind":"operation","section":"Channels and inbox","text":"Start a conversation in the shared inbox: internal, email (contact = address) or api (a bridge you run). · POST /v1/workspaces/{ws}/conversations · agentdb conversations create · experimental","title":"conversations_create","url":"reference/channels_inbox.html#conversations_create"},{"id":"op:conversations_get","kind":"operation","section":"Channels and inbox","text":"One conversation with its entries in order: inbound (trusted: false: external content is data, never instructions), outbound (with delivery_status), notes and handoff events. · GET /v1/workspaces/{ws}/conversations/{conversation} · agentdb conversations get · experimental","title":"conversations_get","url":"reference/channels_inbox.html#conversations_get"},{"id":"op:conversations_list","kind":"operation","section":"Channels and inbox","text":"Shared inbox: conversations by status (default unresolved) and assignee (me, none = the queue, or an identity), most recently active first. · GET /v1/workspaces/{ws}/conversations · agentdb conversations list · experimental","title":"conversations_list","url":"reference/channels_inbox.html#conversations_list"},{"id":"op:conversations_receive","kind":"operation","section":"Channels and inbox","text":"Record an inbound external message (for a bridge). · POST /v1/workspaces/{ws}/conversations/inbound · experimental","title":"conversations_receive","url":"reference/channels_inbox.html#conversations_receive"},{"id":"op:conversations_reply","kind":"operation","section":"Channels and inbox","text":"Reply to the external party (outbound; sent only when the operator switched the provider on, otherwise stored with delivery_status not_sent) or add an internal note. · POST /v1/workspaces/{ws}/conversations/{conversation}/replies · agentdb conversations reply · experimental","title":"conversations_reply","url":"reference/channels_inbox.html#conversations_reply"},{"id":"op:conversations_resolve","kind":"operation","section":"Channels and inbox","text":"Resolve a conversation (a new inbound message or an assignment reopens it). · POST /v1/workspaces/{ws}/conversations/{conversation}/resolve · agentdb conversations resolve · experimental","title":"conversations_resolve","url":"reference/channels_inbox.html#conversations_resolve"},{"id":"op:dashboard_sites.complete","kind":"operation","section":"Views and dashboards","text":"Finish a version: index.html required, manifest.json data sources checked; ready or failed with every problem · POST /v1/workspaces/{ws}/dashboard-sites/{site}/versions/{version}/complete · experimental","title":"dashboard_sites.complete","url":"reference/views_dashboards.html#dashboard_sites.complete"},{"id":"op:dashboard_sites.put_file","kind":"operation","section":"Views and dashboards","text":"Upload one file's raw bytes (application/octet-stream) into an uploading version · PUT /v1/workspaces/{ws}/dashboard-sites/{site}/versions/{version}/files/* · experimental","title":"dashboard_sites.put_file","url":"reference/views_dashboards.html#dashboard_sites.put_file"},{"id":"op:dashboard_sites.put_zip","kind":"operation","section":"Views and dashboards","text":"Upload the package as one zip (application/octet-stream); ?complete=false to add more files after · POST /v1/workspaces/{ws}/dashboard-sites/{site}/versions/{version}/zip · experimental","title":"dashboard_sites.put_zip","url":"reference/views_dashboards.html#dashboard_sites.put_zip"},{"id":"op:dashboard_sites_create","kind":"operation","section":"Views and dashboards","text":"Create a CUSTOM dashboard: a website YOU build (HTML, CSS, JS, images, fonts) that AgentDB hosts at its own secure address https://<id>.<dashboard domain>/ with live, read-only data and no API key in the page. · POST /v1/workspaces/{ws}/dashboard-sites · agentdb dashboard-sites…","title":"dashboard_sites_create","url":"reference/views_dashboards.html#dashboard_sites_create"},{"id":"op:dashboard_sites_delete","kind":"operation","section":"Views and dashboards","text":"Delete a custom dashboard and all its stored files (the audit trail stays). · DELETE /v1/workspaces/{ws}/dashboard-sites/{site} · agentdb dashboard-sites delete · experimental","title":"dashboard_sites_delete","url":"reference/views_dashboards.html#dashboard_sites_delete"},{"id":"op:dashboard_sites_get","kind":"operation","section":"Views and dashboards","text":"One custom dashboard: its versions (status uploading | ready | published | failed | discarded, files with size and sha256, data sources, and every validation problem with path and reason) and recent audit events. · GET /v1/workspaces/{ws}/dashboard-sites/{site} · agentdb dashboa…","title":"dashboard_sites_get","url":"reference/views_dashboards.html#dashboard_sites_get"},{"id":"op:dashboard_sites_invite","kind":"operation","section":"Views and dashboards","text":"Invite people to view a custom dashboard in mode people: each address gets a personal, single-use link by email (valid 7 days, valid_days 1-30). · POST /v1/workspaces/{ws}/dashboard-sites/{site}/viewers · agentdb dashboard-sites invite · experimental","title":"dashboard_sites_invite","url":"reference/views_dashboards.html#dashboard_sites_invite"},{"id":"op:dashboard_sites_list","kind":"operation","section":"Views and dashboards","text":"List the custom dashboards of the workspace: id, title, url, access, status (live | unpublished | revoked | expired), current_version, expiry. · GET /v1/workspaces/{ws}/dashboard-sites · agentdb dashboard-sites list · experimental","title":"dashboard_sites_list","url":"reference/views_dashboards.html#dashboard_sites_list"},{"id":"op:dashboard_sites_pause","kind":"operation","section":"Views and dashboards","text":"Pause a custom dashboard: its address shows a neutral \"paused\" page, no data is served and every session ends. · POST /v1/workspaces/{ws}/dashboard-sites/{site}/pause · agentdb dashboard-sites pause · experimental","title":"dashboard_sites_pause","url":"reference/views_dashboards.html#dashboard_sites_pause"},{"id":"op:dashboard_sites_preview","kind":"operation","section":"Views and dashboards","text":"An owner-only, single-use preview link (valid 10 minutes) of a ready version, before you publish it. · POST /v1/workspaces/{ws}/dashboard-sites/{site}/versions/{version}/preview · experimental","title":"dashboard_sites_preview","url":"reference/views_dashboards.html#dashboard_sites_preview"},{"id":"op:dashboard_sites_publish","kind":"operation","section":"Views and dashboards","text":"Make a ready version live at once (an atomic switch; viewers never see a mix). · POST /v1/workspaces/{ws}/dashboard-sites/{site}/publish · agentdb dashboard-sites publish · experimental","title":"dashboard_sites_publish","url":"reference/views_dashboards.html#dashboard_sites_publish"},{"id":"op:dashboard_sites_regenerate_link","kind":"operation","section":"Views and dashboards","text":"Link mode: make a new link (a new ?k= key). · POST /v1/workspaces/{ws}/dashboard-sites/{site}/regenerate-link · agentdb dashboard-sites regenerate-link · experimental","title":"dashboard_sites_regenerate_link","url":"reference/views_dashboards.html#dashboard_sites_regenerate_link"},{"id":"op:dashboard_sites_resume","kind":"operation","section":"Views and dashboards","text":"Resume a paused custom dashboard; viewers sign in again under its sharing mode. · POST /v1/workspaces/{ws}/dashboard-sites/{site}/resume · agentdb dashboard-sites resume · experimental","title":"dashboard_sites_resume","url":"reference/views_dashboards.html#dashboard_sites_resume"},{"id":"op:dashboard_sites_revoke","kind":"operation","section":"Views and dashboards","text":"Revoke a custom dashboard for good: the URL, open pages and every viewer session stop at once. · POST /v1/workspaces/{ws}/dashboard-sites/{site}/revoke · agentdb dashboard-sites revoke · experimental","title":"dashboard_sites_revoke","url":"reference/views_dashboards.html#dashboard_sites_revoke"},{"id":"op:dashboard_sites_revoke_viewer","kind":"operation","section":"Views and dashboards","text":"Remove one invited viewer (by viewer_id or email): only that person's sessions and links end. · POST /v1/workspaces/{ws}/dashboard-sites/{site}/viewers/revoke · agentdb dashboard-sites revoke-viewer · experimental","title":"dashboard_sites_revoke_viewer","url":"reference/views_dashboards.html#dashboard_sites_revoke_viewer"},{"id":"op:dashboard_sites_share_get","kind":"operation","section":"Views and dashboards","text":"Who can open a custom dashboard: mode with a plain-English explanation, URL, whether a password is set, expiry and the invited viewers with their status. · GET /v1/workspaces/{ws}/dashboard-sites/{site}/share · experimental","title":"dashboard_sites_share_get","url":"reference/views_dashboards.html#dashboard_sites_share_get"},{"id":"op:dashboard_sites_share_set","kind":"operation","section":"Views and dashboards","text":"Change who can open a custom dashboard. · PUT /v1/workspaces/{ws}/dashboard-sites/{site}/share · experimental","title":"dashboard_sites_share_set","url":"reference/views_dashboards.html#dashboard_sites_share_set"},{"id":"op:dashboard_sites_unpublish","kind":"operation","section":"Views and dashboards","text":"Take a custom dashboard offline (its URL answers \"not found\"); versions are kept and can be published again. · POST /v1/workspaces/{ws}/dashboard-sites/{site}/unpublish · agentdb dashboard-sites unpublish · experimental","title":"dashboard_sites_unpublish","url":"reference/views_dashboards.html#dashboard_sites_unpublish"},{"id":"op:dashboard_sites_update","kind":"operation","section":"Views and dashboards","text":"Rename a custom dashboard. · PATCH /v1/workspaces/{ws}/dashboard-sites/{site} · experimental","title":"dashboard_sites_update","url":"reference/views_dashboards.html#dashboard_sites_update"},{"id":"op:dashboard_sites_upload","kind":"operation","section":"Views and dashboards","text":"Upload a version of a custom dashboard: files as base64 (small files; the request stays under ~1 MB) or the whole package as zip_base64. · POST /v1/workspaces/{ws}/dashboard-sites/{site}/versions · experimental","title":"dashboard_sites_upload","url":"reference/views_dashboards.html#dashboard_sites_upload"},{"id":"op:dashboards.page","kind":"operation","section":"Views and dashboards","text":"Hosted dashboard page (/d/<id>#<token>; the token stays in the URL fragment) · GET /d/{dashboard}","title":"dashboards.page","url":"reference/views_dashboards.html#dashboards.page"},{"id":"op:dashboards.session","kind":"operation","section":"Views and dashboards","text":"Trade a dashboard password for a 12 h viewer session · POST /v1/dashboards/{token}/session","title":"dashboards.session","url":"reference/views_dashboards.html#dashboards.session"},{"id":"op:dashboards.view","kind":"operation","section":"Views and dashboards","text":"Dashboard data (public link; ?since=<marker>&wait=1 long-polls) · GET /v1/dashboards/{token}","title":"dashboards.view","url":"reference/views_dashboards.html#dashboards.view"},{"id":"op:dashboards_create","kind":"operation","section":"Views and dashboards","text":"Create a LIVE read-only dashboard: fixed panels of server-side totals (aggregate, as in records_aggregate) or short lists (query, max 50 rows). · POST /v1/workspaces/{ws}/dashboards · agentdb dashboards create","title":"dashboards_create","url":"reference/views_dashboards.html#dashboards_create"},{"id":"op:dashboards_get","kind":"operation","section":"Views and dashboards","text":"One dashboard's full definition (spec: title, panels, layout), its current version and the last 10 versions (history). · GET /v1/workspaces/{ws}/dashboards/{dashboard}","title":"dashboards_get","url":"reference/views_dashboards.html#dashboards_get"},{"id":"op:dashboards_list","kind":"operation","section":"Views and dashboards","text":"List the dashboards of the workspace: id, title, panels, version, access, expiry, status, created_by (key:<id>) with created_by_label (\"…, revoked key\" when the creating key is gone; dashboards belong to the workspace), created_at, and access_stats (last_accessed_at, views per d…","title":"dashboards_list","url":"reference/views_dashboards.html#dashboards_list"},{"id":"op:dashboards_revoke","kind":"operation","section":"Views and dashboards","text":"Revoke a dashboard immediately: its page and data link stop, including open pages and password sessions. · DELETE /v1/workspaces/{ws}/dashboards/{dashboard} · agentdb dashboards revoke","title":"dashboards_revoke","url":"reference/views_dashboards.html#dashboards_revoke"},{"id":"op:dashboards_rotate_token","kind":"operation","section":"Views and dashboards","text":"Give a dashboard a new link: returns a new page_url and data_url for the same id, panels and settings. · POST /v1/workspaces/{ws}/dashboards/{dashboard}/rotate-token","title":"dashboards_rotate_token","url":"reference/views_dashboards.html#dashboards_rotate_token"},{"id":"op:dashboards_update","kind":"operation","section":"Views and dashboards","text":"Change a dashboard; the id and link stay the same. · PATCH /v1/workspaces/{ws}/dashboards/{dashboard} · agentdb dashboards update","title":"dashboards_update","url":"reference/views_dashboards.html#dashboards_update"},{"id":"op:delivery.asset","kind":"operation","section":"Publishing","text":"An asset of a published item (re-checked on every download) · GET /v1/delivery-assets/{ws}/{file}","title":"delivery.asset","url":"reference/publishing.html#delivery.asset"},{"id":"op:delivery.get","kind":"operation","section":"Publishing","text":"One published item by slug (?locale=) · GET /v1/delivery/{ws}/{type}/{slug}","title":"delivery.get","url":"reference/publishing.html#delivery.get"},{"id":"op:delivery.list","kind":"operation","section":"Publishing","text":"Published items of a CMS content type (delivery token or public type; ETag, CORS) · GET /v1/delivery/{ws}/{type}","title":"delivery.list","url":"reference/publishing.html#delivery.list"},{"id":"op:events_create","kind":"operation","section":"Calendar","text":"Book an event. · POST /v1/workspaces/{ws}/calendar-events","title":"events_create","url":"reference/calendar.html#events_create"},{"id":"op:events_delete","kind":"operation","section":"Calendar","text":"Delete an event or one occurrence. · DELETE /v1/workspaces/{ws}/calendar-events/{event}","title":"events_delete","url":"reference/calendar.html#events_delete"},{"id":"op:events_get","kind":"operation","section":"Calendar","text":"One event (series) with exceptions and changed occurrences. · GET /v1/workspaces/{ws}/calendar-events/{event}","title":"events_get","url":"reference/calendar.html#events_get"},{"id":"op:events_list","kind":"operation","section":"Calendar","text":"Events between from and to, recurring ones expanded. · GET /v1/workspaces/{ws}/calendar-events","title":"events_list","url":"reference/calendar.html#events_list"},{"id":"op:events_respond","kind":"operation","section":"Calendar","text":"Answer an invitation. · POST /v1/workspaces/{ws}/calendar-events/{event}/respond","title":"events_respond","url":"reference/calendar.html#events_respond"},{"id":"op:events_update","kind":"operation","section":"Calendar","text":"Change an event. · PATCH /v1/workspaces/{ws}/calendar-events/{event}","title":"events_update","url":"reference/calendar.html#events_update"},{"id":"op:files.content.get","kind":"operation","section":"Files","text":"Download file bytes (Range: bytes=a-b supported) · GET /v1/workspaces/{ws}/files/{file}/content","title":"files.content.get","url":"reference/files.html#files.content.get"},{"id":"op:files.content.patch","kind":"operation","section":"Files","text":"Resumable upload: one part at Upload-Offset (application/octet-stream) · PATCH /v1/workspaces/{ws}/files/{file}/content","title":"files.content.patch","url":"reference/files.html#files.content.patch"},{"id":"op:files.content.put","kind":"operation","section":"Files","text":"Upload file bytes (application/octet-stream) · PUT /v1/workspaces/{ws}/files/{file}/content","title":"files.content.put","url":"reference/files.html#files.content.put"},{"id":"op:files.create","kind":"operation","section":"Files","text":"files create · POST /v1/workspaces/{ws}/files","title":"files.create","url":"reference/files.html#files.create"},{"id":"op:files.link.list_all","kind":"operation","section":"Files","text":"Signed file links of the workspace · GET /v1/workspaces/{ws}/file-links","title":"files.link.list_all","url":"reference/files.html#files.link.list_all"},{"id":"op:files.link.view","kind":"operation","section":"Files","text":"Open a signed file link (public; Range supported) · GET /v1/file-links/{token}","title":"files.link.view","url":"reference/files.html#files.link.view"},{"id":"op:files.thumbnail.get","kind":"operation","section":"Files","text":"Thumbnail JPEG made by the media worker (rc.8; worker off by default) · GET /v1/workspaces/{ws}/files/{file}/thumbnail","title":"files.thumbnail.get","url":"reference/files.html#files.thumbnail.get"},{"id":"op:files.upload_status","kind":"operation","section":"Files","text":"files upload status · GET /v1/workspaces/{ws}/files/{file}/upload","title":"files.upload_status","url":"reference/files.html#files.upload_status"},{"id":"op:files.version.content.get","kind":"operation","section":"Files","text":"Download one version's bytes (Range supported) · GET /v1/workspaces/{ws}/files/{file}/versions/{version}/content","title":"files.version.content.get","url":"reference/files.html#files.version.content.get"},{"id":"op:files.version.content.patch","kind":"operation","section":"Files","text":"Resumable upload part of a pending version · PATCH /v1/workspaces/{ws}/files/{file}/versions/{version}/content","title":"files.version.content.patch","url":"reference/files.html#files.version.content.patch"},{"id":"op:files.version.content.put","kind":"operation","section":"Files","text":"Upload the bytes of a pending version · PUT /v1/workspaces/{ws}/files/{file}/versions/{version}/content","title":"files.version.content.put","url":"reference/files.html#files.version.content.put"},{"id":"op:files.version.create","kind":"operation","section":"Files","text":"files version create · POST /v1/workspaces/{ws}/files/{file}/versions","title":"files.version.create","url":"reference/files.html#files.version.create"},{"id":"op:files.waveform.get","kind":"operation","section":"Files","text":"Audio waveform peaks made by the media worker (rc.8; worker off by default) · GET /v1/workspaces/{ws}/files/{file}/waveform","title":"files.waveform.get","url":"reference/files.html#files.waveform.get"},{"id":"op:files_attach","kind":"operation","section":"Files","text":"Attach an uploaded file to a record with a role (e.g. · POST /v1/workspaces/{ws}/attachments · agentdb files attach","title":"files_attach","url":"reference/files.html#files_attach"},{"id":"op:files_delete","kind":"operation","section":"Files","text":"Delete a file and its bytes. · DELETE /v1/workspaces/{ws}/files/{file} · agentdb files delete","title":"files_delete","url":"reference/files.html#files_delete"},{"id":"op:files_delete_version","kind":"operation","section":"Files","text":"Delete an earlier version of a file, or cancel a pending replacement. · DELETE /v1/workspaces/{ws}/files/{file}/versions/{version} · agentdb files delete-version","title":"files_delete_version","url":"reference/files.html#files_delete_version"},{"id":"op:files_detach","kind":"operation","section":"Files","text":"Remove one attachment. · DELETE /v1/workspaces/{ws}/attachments/{attachment} · agentdb files detach","title":"files_detach","url":"reference/files.html#files_detach"},{"id":"op:files_download","kind":"operation","section":"Files","text":"Return a file's bytes as base64 (up to max_inline_file_bytes). · agentdb files download","title":"files_download","url":"reference/files.html#files_download"},{"id":"op:files_get","kind":"operation","section":"Files","text":"File metadata: filename, content_type, size, sha256, status and the records it is attached to. · GET /v1/workspaces/{ws}/files/{file} · agentdb files get","title":"files_get","url":"reference/files.html#files_get"},{"id":"op:files_link_create","kind":"operation","section":"Files","text":"Signed, expiring link to one file for a dashboard or public app: works in <img>/<video>/<audio> without an API key, ends at expires_at (max 7 days), revocable with files_link_revoke. · POST /v1/workspaces/{ws}/files/{file}/links","title":"files_link_create","url":"reference/files.html#files_link_create"},{"id":"op:files_link_list","kind":"operation","section":"Files","text":"List signed file links (active, expired and revoked) of the workspace or of one file. · GET /v1/workspaces/{ws}/files/{file}/links","title":"files_link_list","url":"reference/files.html#files_link_list"},{"id":"op:files_link_revoke","kind":"operation","section":"Files","text":"Revoke a signed file link at once. · DELETE /v1/workspaces/{ws}/file-links/{link}","title":"files_link_revoke","url":"reference/files.html#files_link_revoke"},{"id":"op:files_list","kind":"operation","section":"Files","text":"List files, optionally only those attached to record_id. · GET /v1/workspaces/{ws}/files · agentdb files list","title":"files_list","url":"reference/files.html#files_list"},{"id":"op:files_replace","kind":"operation","section":"Files","text":"Replace a file's content (base64, up to max_inline_file_bytes) as a new version. · agentdb files replace","title":"files_replace","url":"reference/files.html#files_replace"},{"id":"op:files_search","kind":"operation","section":"Files","text":"Find files by a word or phrase in their name or indexed text (exact substring, not semantic). · POST /v1/workspaces/{ws}/files/search · agentdb files search","title":"files_search","url":"reference/files.html#files_search"},{"id":"op:files_update","kind":"operation","section":"Files","text":"Rename a file or set its folder (e.g. · PATCH /v1/workspaces/{ws}/files/{file} · agentdb files update","title":"files_update","url":"reference/files.html#files_update"},{"id":"op:files_upload","kind":"operation","section":"Files","text":"Upload a file as base64 (images, PDFs, documents, any type within the server's limits; see workspace_info for max_inline_file_bytes). · agentdb files upload","title":"files_upload","url":"reference/files.html#files_upload"},{"id":"op:files_versions","kind":"operation","section":"Files","text":"Version history of a file, newest first: a pending replacement (if any), the current version, earlier versions. · GET /v1/workspaces/{ws}/files/{file}/versions · agentdb files versions","title":"files_versions","url":"reference/files.html#files_versions"},{"id":"op:flows_create","kind":"operation","section":"Automation","text":"Create a flow: a rule that reacts to changes. · POST /v1/workspaces/{ws}/flows · agentdb flows create","title":"flows_create","url":"reference/automation.html#flows_create"},{"id":"op:flows_delete","kind":"operation","section":"Automation","text":"Delete a flow and its runs. · DELETE /v1/workspaces/{ws}/flows/{flow} · agentdb flows delete","title":"flows_delete","url":"reference/automation.html#flows_delete"},{"id":"op:flows_get","kind":"operation","section":"Automation","text":"One flow with versions and run counts. · GET /v1/workspaces/{ws}/flows/{flow} · agentdb flows get","title":"flows_get","url":"reference/automation.html#flows_get"},{"id":"op:flows_list","kind":"operation","section":"Automation","text":"List flows. · GET /v1/workspaces/{ws}/flows · agentdb flows list","title":"flows_list","url":"reference/automation.html#flows_list"},{"id":"op:flows_runs","kind":"operation","section":"Automation","text":"Flow run history. · GET /v1/workspaces/{ws}/flow-runs · agentdb flows runs","title":"flows_runs","url":"reference/automation.html#flows_runs"},{"id":"op:flows_test","kind":"operation","section":"Automation","text":"Dry-run a flow. · POST /v1/workspaces/{ws}/flows/test · agentdb flows test","title":"flows_test","url":"reference/automation.html#flows_test"},{"id":"op:flows_update","kind":"operation","section":"Automation","text":"Change, pause or resume a flow. · PATCH /v1/workspaces/{ws}/flows/{flow} · agentdb flows update","title":"flows_update","url":"reference/automation.html#flows_update"},{"id":"op:forms.public.get","kind":"operation","section":"Publishing","text":"A public form's inputs and a single-use ticket · GET /v1/forms/{ws}/{token}","title":"forms.public.get","url":"reference/publishing.html#forms.public.get"},{"id":"op:forms.public.submit","kind":"operation","section":"Publishing","text":"Submit a public form (application/json; ticket, honeypot, rate limits) · POST /v1/forms/{ws}/{token}","title":"forms.public.submit","url":"reference/publishing.html#forms.public.submit"},{"id":"op:forms_create","kind":"operation","section":"Publishing","text":"Create a public form that creates records of one object: inputs mapped to fields (validated by the field types), fixed values, honeypot, minimum fill time, optional proof of work, size and rate limits, allowed origins, spam quarantine, inbox notifications. · POST /v1/workspaces/…","title":"forms_create","url":"reference/publishing.html#forms_create"},{"id":"op:forms_delete","kind":"operation","section":"Publishing","text":"Delete a form and its submission log; records it created stay. · DELETE /v1/workspaces/{ws}/forms/{form} · agentdb forms delete","title":"forms_delete","url":"reference/publishing.html#forms_delete"},{"id":"op:forms_get","kind":"operation","section":"Publishing","text":"One form and its versions. · GET /v1/workspaces/{ws}/forms/{form} · agentdb forms get","title":"forms_get","url":"reference/publishing.html#forms_get"},{"id":"op:forms_list","kind":"operation","section":"Publishing","text":"Forms with their definitions and submission counts (never the token). · GET /v1/workspaces/{ws}/forms · agentdb forms list","title":"forms_list","url":"reference/publishing.html#forms_list"},{"id":"op:forms_review","kind":"operation","section":"Publishing","text":"Release a quarantined submission (creates its record) or discard it (erases its data). · POST /v1/workspaces/{ws}/form-submissions/{submission}/review","title":"forms_review","url":"reference/publishing.html#forms_review"},{"id":"op:forms_rotate_token","kind":"operation","section":"Publishing","text":"Give a form a new public token; the old link stops working at once. · POST /v1/workspaces/{ws}/forms/{form}/rotate-token · agentdb forms rotate-token","title":"forms_rotate_token","url":"reference/publishing.html#forms_rotate_token"},{"id":"op:forms_submissions","kind":"operation","section":"Publishing","text":"Submission log (newest first): accepted (with record_id), quarantined (with the untrusted data to review), released, discarded. · GET /v1/workspaces/{ws}/form-submissions · agentdb forms submissions","title":"forms_submissions","url":"reference/publishing.html#forms_submissions"},{"id":"op:forms_update","kind":"operation","section":"Publishing","text":"Change parts of a form's definition or close it (status: closed). · PATCH /v1/workspaces/{ws}/forms/{form} · agentdb forms update","title":"forms_update","url":"reference/publishing.html#forms_update"},{"id":"op:imports_inspect","kind":"operation","section":"Import and export","text":"Inspect an uploaded file (by upload_id or file_id): columns, row count, detected types, empty and duplicate counts, suggested match keys and preview rows. · POST /v1/workspaces/{ws}/imports/inspect","title":"imports_inspect","url":"reference/import_export.html#imports_inspect"},{"id":"op:imports_run","kind":"operation","section":"Import and export","text":"Import an uploaded file into one object (up to 10000 rows per call; use rows.offset for more), matching on match_on (a unique field, or a list of fields forming a composite unique key). · POST /v1/workspaces/{ws}/imports/run","title":"imports_run","url":"reference/import_export.html#imports_run"},{"id":"op:imports_start","kind":"operation","section":"Import and export","text":"Start a file import (CSV, JSON or JSONL) without sending the file through this tool. · POST /v1/workspaces/{ws}/imports","title":"imports_start","url":"reference/import_export.html#imports_start"},{"id":"op:inbox_list","kind":"operation","section":"Channels and inbox","text":"Your inbox: mentions, direct messages, assignments and notifications, newest first, with unread_count and a preview. · GET /v1/workspaces/{ws}/inbox · agentdb inbox list · experimental","title":"inbox_list","url":"reference/channels_inbox.html#inbox_list"},{"id":"op:inbox_notify","kind":"operation","section":"Channels and inbox","text":"Put a notification in someone's inbox (agent, member or key of this workspace), with optional text and data. · POST /v1/workspaces/{ws}/inbox/notify · agentdb inbox notify · experimental","title":"inbox_notify","url":"reference/channels_inbox.html#inbox_notify"},{"id":"op:inbox_update","kind":"operation","section":"Channels and inbox","text":"Mark one of your inbox items unread, read or done. · PATCH /v1/workspaces/{ws}/inbox/{item} · experimental","title":"inbox_update","url":"reference/channels_inbox.html#inbox_update"},{"id":"op:indexes_create","kind":"operation","section":"Schema","text":"Add a named index on a field that you filter or sort on often (max 5 per object, 20 per workspace). · POST /v1/workspaces/{ws}/indexes · agentdb indexes create","title":"indexes_create","url":"reference/schema.html#indexes_create"},{"id":"op:indexes_drop","kind":"operation","section":"Schema","text":"Remove a named index. · DELETE /v1/workspaces/{ws}/indexes/{index} · agentdb indexes drop","title":"indexes_drop","url":"reference/schema.html#indexes_drop"},{"id":"op:indexes_list","kind":"operation","section":"Schema","text":"Named field indexes and the limits (5 per object, 20 per workspace). · GET /v1/workspaces/{ws}/indexes · agentdb indexes list","title":"indexes_list","url":"reference/schema.html#indexes_list"},{"id":"op:integrity_check","kind":"operation","section":"Administration","text":"Dry-run integrity report: every required relationship and the records that lack their link. · GET /v1/workspaces/{ws}/integrity","title":"integrity_check","url":"reference/administration.html#integrity_check"},{"id":"op:jobs_create","kind":"operation","section":"Automation","text":"Schedule a one-off or recurring job. · POST /v1/workspaces/{ws}/jobs · agentdb jobs create","title":"jobs_create","url":"reference/automation.html#jobs_create"},{"id":"op:jobs_get","kind":"operation","section":"Automation","text":"One job with its next 5 run times. · GET /v1/workspaces/{ws}/jobs/{job} · agentdb jobs get","title":"jobs_get","url":"reference/automation.html#jobs_get"},{"id":"op:jobs_list","kind":"operation","section":"Automation","text":"List jobs. · GET /v1/workspaces/{ws}/jobs · agentdb jobs list","title":"jobs_list","url":"reference/automation.html#jobs_list"},{"id":"op:jobs_retry_run","kind":"operation","section":"Automation","text":"Retry a dead run. · POST /v1/workspaces/{ws}/job-runs/{run}/retry","title":"jobs_retry_run","url":"reference/automation.html#jobs_retry_run"},{"id":"op:jobs_run_now","kind":"operation","section":"Automation","text":"Run a job now. · POST /v1/workspaces/{ws}/jobs/{job}/run","title":"jobs_run_now","url":"reference/automation.html#jobs_run_now"},{"id":"op:jobs_runs","kind":"operation","section":"Automation","text":"Job run history. · GET /v1/workspaces/{ws}/job-runs · agentdb jobs runs","title":"jobs_runs","url":"reference/automation.html#jobs_runs"},{"id":"op:jobs_update","kind":"operation","section":"Automation","text":"Change, pause, resume or cancel a job. · PATCH /v1/workspaces/{ws}/jobs/{job} · agentdb jobs update","title":"jobs_update","url":"reference/automation.html#jobs_update"},{"id":"op:knowledge_create","kind":"operation","section":"Knowledge","text":"Store a fact, decision, document or note with sources. · POST /v1/workspaces/{ws}/knowledge · agentdb knowledge create","title":"knowledge_create","url":"reference/knowledge.html#knowledge_create"},{"id":"op:knowledge_delete","kind":"operation","section":"Knowledge","text":"Archive a knowledge item. · DELETE /v1/workspaces/{ws}/knowledge/{item} · agentdb knowledge delete","title":"knowledge_delete","url":"reference/knowledge.html#knowledge_delete"},{"id":"op:knowledge_get","kind":"operation","section":"Knowledge","text":"One knowledge item. · GET /v1/workspaces/{ws}/knowledge/{item} · agentdb knowledge get","title":"knowledge_get","url":"reference/knowledge.html#knowledge_get"},{"id":"op:knowledge_list","kind":"operation","section":"Knowledge","text":"List knowledge items. · GET /v1/workspaces/{ws}/knowledge · agentdb knowledge list","title":"knowledge_list","url":"reference/knowledge.html#knowledge_list"},{"id":"op:knowledge_propose","kind":"operation","section":"Knowledge","text":"Propose a change or contradiction. · POST /v1/workspaces/{ws}/knowledge/{item}/proposals · agentdb knowledge propose","title":"knowledge_propose","url":"reference/knowledge.html#knowledge_propose"},{"id":"op:knowledge_provenance","kind":"operation","section":"Knowledge","text":"Provenance chain of a knowledge item. · GET /v1/workspaces/{ws}/knowledge/{item}/provenance · agentdb knowledge provenance","title":"knowledge_provenance","url":"reference/knowledge.html#knowledge_provenance"},{"id":"op:knowledge_review","kind":"operation","section":"Knowledge","text":"Accept or reject a proposal (owners/admins). · POST /v1/workspaces/{ws}/knowledge/{item}/review · agentdb knowledge review","title":"knowledge_review","url":"reference/knowledge.html#knowledge_review"},{"id":"op:knowledge_search","kind":"operation","section":"Knowledge","text":"Find knowledge with citations. · POST /v1/workspaces/{ws}/knowledge/search · agentdb knowledge search","title":"knowledge_search","url":"reference/knowledge.html#knowledge_search"},{"id":"op:knowledge_update","kind":"operation","section":"Knowledge","text":"Change a knowledge item (new version). · PATCH /v1/workspaces/{ws}/knowledge/{item} · agentdb knowledge update","title":"knowledge_update","url":"reference/knowledge.html#knowledge_update"},{"id":"op:knowledge_versions","kind":"operation","section":"Knowledge","text":"Version history of a knowledge item. · GET /v1/workspaces/{ws}/knowledge/{item}/versions · agentdb knowledge versions","title":"knowledge_versions","url":"reference/knowledge.html#knowledge_versions"},{"id":"op:lifecycle_info","kind":"operation","section":"Administration","text":"Retention (days a deleted record stays restorable), archived and recycle-bin counts per object. · GET /v1/workspaces/{ws}/lifecycle · agentdb lifecycle info","title":"lifecycle_info","url":"reference/administration.html#lifecycle_info"},{"id":"op:lifecycle_set_retention","kind":"operation","section":"Administration","text":"Set how many days deleted records of an object stay in the recycle bin (default 30; 0 = deletes are permanent; null = default). · POST /v1/workspaces/{ws}/lifecycle/retention","title":"lifecycle_set_retention","url":"reference/administration.html#lifecycle_set_retention"},{"id":"op:me","kind":"operation","section":"Access and permissions","text":"The calling key: type, workspace, scopes · GET /v1/me","title":"me","url":"reference/access.html#me"},{"id":"op:me.revoke","kind":"operation","section":"Access and permissions","text":"Revoke the calling key · POST /v1/me/revoke","title":"me.revoke","url":"reference/access.html#me.revoke"},{"id":"op:members.invite","kind":"operation","section":"Access and permissions","text":"Invite a person by email with a role (viewer, editor, admin) · POST /v1/workspaces/{ws}/members","title":"members.invite","url":"reference/access.html#members.invite"},{"id":"op:members.list","kind":"operation","section":"Access and permissions","text":"Owner and members with roles (owner/admin) · GET /v1/workspaces/{ws}/members","title":"members.list","url":"reference/access.html#members.list"},{"id":"op:members.remove","kind":"operation","section":"Access and permissions","text":"Remove a member or withdraw an invitation · DELETE /v1/workspaces/{ws}/members/{member}","title":"members.remove","url":"reference/access.html#members.remove"},{"id":"op:members.update","kind":"operation","section":"Access and permissions","text":"Change a member's role · PATCH /v1/workspaces/{ws}/members/{member}","title":"members.update","url":"reference/access.html#members.update"},{"id":"op:messages_delete","kind":"operation","section":"Channels and inbox","text":"Delete a message (yours, or any as moderator). · DELETE /v1/workspaces/{ws}/messages/{message}","title":"messages_delete","url":"reference/channels_inbox.html#messages_delete"},{"id":"op:messages_edit","kind":"operation","section":"Channels and inbox","text":"Edit your own message (the previous version is kept in its history). · PATCH /v1/workspaces/{ws}/messages/{message}","title":"messages_edit","url":"reference/channels_inbox.html#messages_edit"},{"id":"op:messages_get","kind":"operation","section":"Channels and inbox","text":"One message; its edit/delete history is included for the author and moderators. · GET /v1/workspaces/{ws}/messages/{message}","title":"messages_get","url":"reference/channels_inbox.html#messages_get"},{"id":"op:messages_list","kind":"operation","section":"Channels and inbox","text":"Messages of a channel in seq order: after=<seq> for new ones (use next_after), before=<seq> to scroll back, thread_id for one thread. · GET /v1/workspaces/{ws}/channels/{channel}/messages","title":"messages_list","url":"reference/channels_inbox.html#messages_list"},{"id":"op:messages_post","kind":"operation","section":"Channels and inbox","text":"Post a Markdown message (and/or a structured payload, e.g. · POST /v1/workspaces/{ws}/channels/{channel}/messages","title":"messages_post","url":"reference/channels_inbox.html#messages_post"},{"id":"op:messages_search","kind":"operation","section":"Channels and inbox","text":"Text search in messages of channels you can read (public, or private ones you are in). · POST /v1/workspaces/{ws}/messages/search","title":"messages_search","url":"reference/channels_inbox.html#messages_search"},{"id":"op:packages_get","kind":"operation","section":"Package and template operations","text":"A package's (or template's) manifest. · GET /v1/workspaces/{ws}/packages/{package} · agentdb packages get","title":"packages_get","url":"reference/packages_apps.html#packages_get"},{"id":"op:packages_install","kind":"operation","section":"Package and template operations","text":"Install or upgrade a versioned schema package (objects, fields, unique keys, relationships, views, flows, jobs, retention) or a built-in template ({template: \"agent_crm\"}, the CRM to use; crm is legacy; apps agent_todos, agent_kanban, agent_projects; business packs support, recr…","title":"packages_install","url":"reference/packages_apps.html#packages_install"},{"id":"op:packages_list","kind":"operation","section":"Package and template operations","text":"Installed schema packages and the built-in templates (agent_crm: recommended). · GET /v1/workspaces/{ws}/packages · agentdb packages list","title":"packages_list","url":"reference/packages_apps.html#packages_list"},{"id":"op:packages_uninstall","kind":"operation","section":"Package and template operations","text":"Forget an installed package: remove its views, delete its flows and approval policies and cancel its jobs (remove_views / remove_automations=false keep them). · DELETE /v1/workspaces/{ws}/packages/{package} · agentdb packages uninstall","title":"packages_uninstall","url":"reference/packages_apps.html#packages_uninstall"},{"id":"op:permissions_list","kind":"operation","section":"Access and permissions","text":"List the workspace's permission rules (owners and admins). · GET /v1/workspaces/{ws}/permissions · agentdb permissions list","title":"permissions_list","url":"reference/access.html#permissions_list"},{"id":"op:permissions_remove","kind":"operation","section":"Access and permissions","text":"Remove one permission rule; the subject falls back to its role's rights. · DELETE /v1/workspaces/{ws}/permissions/{rule} · agentdb permissions remove","title":"permissions_remove","url":"reference/access.html#permissions_remove"},{"id":"op:permissions_set","kind":"operation","section":"Access and permissions","text":"Create or replace one permission rule (owners and admins without rules). · POST /v1/workspaces/{ws}/permissions · agentdb permissions set","title":"permissions_set","url":"reference/access.html#permissions_set"},{"id":"op:records.history","kind":"operation","section":"Records","text":"records history · GET /v1/workspaces/{ws}/records/{record}/history","title":"records.history","url":"reference/records.html#records.history"},{"id":"op:records_aggregate","kind":"operation","section":"Query and search","text":"Server-side totals: metrics [{op: count|sum|avg|min|max, field?, as?}] over records matching where (same format as records_query), optionally group_by up to 3 fields (date/datetime as {\"field\",\"bucket\":\"hour|day|week|month|year\"}). · POST /v1/workspaces/{ws}/aggregate","title":"records_aggregate","url":"reference/query_search.html#records_aggregate"},{"id":"op:records_archive","kind":"operation","section":"Records","text":"Archive records: they keep their links and files but are left out of queries, aggregates, search and related lists unless include_archived=true. · POST /v1/workspaces/{ws}/records/archive · agentdb records archive","title":"records_archive","url":"reference/records.html#records_archive"},{"id":"op:records_changes","kind":"operation","section":"Records","text":"What changed in the workspace since a sequence number: records created/updated/deleted, schema changes, imports (action, id, version, time). · GET /v1/workspaces/{ws}/changes","title":"records_changes","url":"reference/records.html#records_changes"},{"id":"op:records_create","kind":"operation","section":"Records","text":"Create one record. · POST /v1/workspaces/{ws}/records · agentdb records create","title":"records_create","url":"reference/records.html#records_create"},{"id":"op:records_delete","kind":"operation","section":"Records","text":"Delete one record (and its links and attachments; attached files are kept). · DELETE /v1/workspaces/{ws}/records/{record} · agentdb records delete","title":"records_delete","url":"reference/records.html#records_delete"},{"id":"op:records_delete_batch","kind":"operation","section":"Records","text":"Delete up to 1000 records of one object, by ids or by a where filter (same format as records_query). · POST /v1/workspaces/{ws}/records/delete","title":"records_delete_batch","url":"reference/records.html#records_delete_batch"},{"id":"op:records_duplicates","kind":"operation","section":"Records","text":"Suggest likely duplicate records of one object by fields (mode exact, normalized (fold level: trim, case, accents, punctuation (default) or company) or similar (trigram similarity >= threshold)), with evidence and the level matched. · POST /v1/workspaces/{ws}/duplicates · agentd…","title":"records_duplicates","url":"reference/records.html#records_duplicates"},{"id":"op:records_export","kind":"operation","section":"Import and export","text":"Export records, links, schema and file metadata as NDJSON (owners and admins; your permissions apply; max 2 MiB here). · GET /v1/workspaces/{ws}/export","title":"records_export","url":"reference/import_export.html#records_export"},{"id":"op:records_get","kind":"operation","section":"Records","text":"Fetch one record with its current version. · GET /v1/workspaces/{ws}/records/{record} · agentdb records get","title":"records_get","url":"reference/records.html#records_get"},{"id":"op:records_merge","kind":"operation","section":"Records","text":"Merge records into a survivor: field_choices {field: record_id} is required for every conflicting field; links and attachments move to the survivor; merged records go to the recycle bin. · POST /v1/workspaces/{ws}/records/merge · agentdb records merge","title":"records_merge","url":"reference/records.html#records_merge"},{"id":"op:records_merge_preview","kind":"operation","section":"Records","text":"Preview merging records into a survivor: every field value, the conflicts you must choose for, the links and files that would move, and the versions to pass to records_merge. · POST /v1/workspaces/{ws}/merge-preview · agentdb records merge-preview","title":"records_merge_preview","url":"reference/records.html#records_merge_preview"},{"id":"op:records_merge_undo","kind":"operation","section":"Records","text":"Undo a merge: restores the merged records, their links and files, and the survivor's earlier values (if it has not changed since). · POST /v1/workspaces/{ws}/merges/{merge}/undo · agentdb records merge-undo","title":"records_merge_undo","url":"reference/records.html#records_merge_undo"},{"id":"op:records_merges","kind":"operation","section":"Records","text":"Merge history (newest first), optionally for one survivor. · GET /v1/workspaces/{ws}/merges · agentdb records merges","title":"records_merges","url":"reference/records.html#records_merges"},{"id":"op:records_purge","kind":"operation","section":"Records","text":"Delete records in the recycle bin for good. · POST /v1/workspaces/{ws}/records/purge · agentdb records purge","title":"records_purge","url":"reference/records.html#records_purge"},{"id":"op:records_query","kind":"operation","section":"Query and search","text":"Exact typed query. · POST /v1/workspaces/{ws}/query","title":"records_query","url":"reference/query_search.html#records_query"},{"id":"op:records_recycle_bin","kind":"operation","section":"Records","text":"Deleted records that can still be restored (records_delete moves records to the recycle bin), with their deletion time and purge_after date. · GET /v1/workspaces/{ws}/recycle-bin · agentdb records recycle-bin","title":"records_recycle_bin","url":"reference/records.html#records_recycle_bin"},{"id":"op:records_restore","kind":"operation","section":"Records","text":"Restore deleted records from the recycle bin with their id, data, links and attachments. · POST /v1/workspaces/{ws}/records/restore · agentdb records restore","title":"records_restore","url":"reference/records.html#records_restore"},{"id":"op:records_search","kind":"operation","section":"Query and search","text":"Full-text search over text-like fields of one object (enable once per object with search_configure). · POST /v1/workspaces/{ws}/search","title":"records_search","url":"reference/query_search.html#records_search"},{"id":"op:records_search_semantic","kind":"operation","section":"Query and search","text":"Semantic ranking of records by meaning (OFF by default; FEATURE_DISABLED unless the operator enabled a provider). · POST /v1/workspaces/{ws}/search/semantic · experimental","title":"records_search_semantic","url":"reference/query_search.html#records_search_semantic"},{"id":"op:records_unarchive","kind":"operation","section":"Records","text":"Bring archived records back into queries. · POST /v1/workspaces/{ws}/records/unarchive · agentdb records unarchive","title":"records_unarchive","url":"reference/records.html#records_unarchive"},{"id":"op:records_update","kind":"operation","section":"Records","text":"Change some fields of a record. · PATCH /v1/workspaces/{ws}/records/{record} · agentdb records update","title":"records_update","url":"reference/records.html#records_update"},{"id":"op:records_upsert","kind":"operation","section":"Records","text":"Create-or-update ONE record by its match key: \"id\", a unique field, or a declared composite key (match_on: [\"first_name\",\"last_name\",\"company_id\"], defined once with schema_define_unique_key). · POST /v1/workspaces/{ws}/records/upsert-one · POST /v1/workspaces/{ws}/records/upser…","title":"records_upsert","url":"reference/records.html#records_upsert"},{"id":"op:records_upsert_batch","kind":"operation","section":"Records","text":"Create-or-update up to 500 records of one object in one transaction. · POST /v1/workspaces/{ws}/records/upsert","title":"records_upsert_batch","url":"reference/records.html#records_upsert_batch"},{"id":"op:relationships_link","kind":"operation","section":"Relationships","text":"Link two records using a relationship defined on the source record's object type. · POST /v1/workspaces/{ws}/links","title":"relationships_link","url":"reference/relationships.html#relationships_link"},{"id":"op:relationships_link_batch","kind":"operation","section":"Relationships","text":"Create up to 500 links of one relationship in one transaction. · POST /v1/workspaces/{ws}/links/batch","title":"relationships_link_batch","url":"reference/relationships.html#relationships_link_batch"},{"id":"op:relationships_list","kind":"operation","section":"Relationships","text":"List records linked to a record. · GET /v1/workspaces/{ws}/records/{record}/related","title":"relationships_list","url":"reference/relationships.html#relationships_list"},{"id":"op:relationships_unlink","kind":"operation","section":"Relationships","text":"Remove one link between records. · DELETE /v1/workspaces/{ws}/links/{link}","title":"relationships_unlink","url":"reference/relationships.html#relationships_unlink"},{"id":"op:schedule_preview","kind":"operation","section":"Automation","text":"Preview a schedule's next times. · POST /v1/workspaces/{ws}/schedule/preview","title":"schedule_preview","url":"reference/automation.html#schedule_preview"},{"id":"op:schema.object.get","kind":"operation","section":"Schema","text":"schema object get · GET /v1/workspaces/{ws}/object-types/{object}","title":"schema.object.get","url":"reference/schema.html#schema.object.get"},{"id":"op:schema_define_field","kind":"operation","section":"Schema","text":"Add a typed field to an object type. · POST /v1/workspaces/{ws}/object-types/{object}/fields","title":"schema_define_field","url":"reference/schema.html#schema_define_field"},{"id":"op:schema_define_object","kind":"operation","section":"Schema","text":"Create a new object type (e.g. · POST /v1/workspaces/{ws}/object-types","title":"schema_define_object","url":"reference/schema.html#schema_define_object"},{"id":"op:schema_define_relationship","kind":"operation","section":"Schema","text":"Create a directed relationship type from source_object to target_object (e.g. · POST /v1/workspaces/{ws}/relationship-types","title":"schema_define_relationship","url":"reference/schema.html#schema_define_relationship"},{"id":"op:schema_define_unique_key","kind":"operation","section":"Schema","text":"Declare 2-5 fields that together identify one record (e.g. · POST /v1/workspaces/{ws}/object-types/{object}/unique-keys","title":"schema_define_unique_key","url":"reference/schema.html#schema_define_unique_key"},{"id":"op:schema_docs","kind":"operation","section":"Schema","text":"Generated API documentation for THIS workspace, for building an app on it: an OpenAPI fragment with a JSON Schema per object, example create/query/upsert bodies and markdown. · GET /v1/workspaces/{ws}/docs","title":"schema_docs","url":"reference/schema.html#schema_docs"},{"id":"op:schema_history","kind":"operation","section":"Schema","text":"Schema change history, newest first: each change with the definition before and after, who made it, when, whether it can be undone and how many values were archived. · GET /v1/workspaces/{ws}/schema/history · agentdb schema history","title":"schema_history","url":"reference/schema.html#schema_history"},{"id":"op:schema_inspect","kind":"operation","section":"Schema","text":"List every object type with its typed fields (name, type, required, unique, enum values) and relationship types. · GET /v1/workspaces/{ws}/object-types · GET /v1/workspaces/{ws}/schema · agentdb schema inspect","title":"schema_inspect","url":"reference/schema.html#schema_inspect"},{"id":"op:schema_object_rules","kind":"operation","section":"Schema","text":"Record rules of one object: append_only (stored records can't be updated, deleted, merged or archived except by an owner; APPEND_ONLY) and completion_rules (a field may move to some values only while every linked record is in given values; BLOCKED_BY_DEPENDENCY). · GET /v1/works…","title":"schema_object_rules","url":"reference/schema.html#schema_object_rules"},{"id":"op:schema_object_rules_set","kind":"operation","section":"Schema","text":"Set the record rules of one object (owners only). · POST /v1/workspaces/{ws}/object-types/{object}/rules","title":"schema_object_rules_set","url":"reference/schema.html#schema_object_rules_set"},{"id":"op:schema_remove_field","kind":"operation","section":"Schema","text":"Remove a field and its value from every record. · DELETE /v1/workspaces/{ws}/object-types/{object}/fields/{field}","title":"schema_remove_field","url":"reference/schema.html#schema_remove_field"},{"id":"op:schema_remove_unique_key","kind":"operation","section":"Schema","text":"Remove a composite unique key (by its fields). · DELETE /v1/workspaces/{ws}/object-types/{object}/unique-keys","title":"schema_remove_unique_key","url":"reference/schema.html#schema_remove_unique_key"},{"id":"op:schema_undo","kind":"operation","section":"Schema","text":"Reverse one schema change: restore a field's previous definition and its archived original values (rename, retype, enum/required/unique changes), bring back a removed field with its values, remove a field that was added, or re-add/remove a unique key. · POST /v1/workspaces/{ws}/…","title":"schema_undo","url":"reference/schema.html#schema_undo"},{"id":"op:schema_update_field","kind":"operation","section":"Schema","text":"Rename a field (rename_to; values move with it), change its type (every existing value must convert, e.g. · PATCH /v1/workspaces/{ws}/object-types/{object}/fields/{field}","title":"schema_update_field","url":"reference/schema.html#schema_update_field"},{"id":"op:schema_update_relationship","kind":"operation","section":"Schema","text":"Make a relationship required (every source record must be linked) or optional, or change its description. · PATCH /v1/workspaces/{ws}/relationship-types/{object}/{relationship}","title":"schema_update_relationship","url":"reference/schema.html#schema_update_relationship"},{"id":"op:search_config","kind":"operation","section":"Query and search","text":"Objects with a full-text index and their indexed fields. · GET /v1/workspaces/{ws}/search/config · agentdb search config","title":"search_config","url":"reference/query_search.html#search_config"},{"id":"op:search_configure","kind":"operation","section":"Query and search","text":"Enable (and build) or disable the full-text index of an object. · POST /v1/workspaces/{ws}/search/configure · agentdb search configure","title":"search_configure","url":"reference/query_search.html#search_configure"},{"id":"op:signup","kind":"operation","section":"Workspaces","text":"Create an account, workspace and account key (shown once) · POST /v1/signup","title":"signup","url":"reference/workspaces.html#signup"},{"id":"op:signup.config","kind":"operation","section":"Workspaces","text":"Signup availability, terms and quotas · GET /v1/signup","title":"signup.config","url":"reference/workspaces.html#signup.config"},{"id":"op:uploads.put","kind":"operation","section":"Import and export","text":"Upload the file for a one-time link (no API key) · PUT /v1/uploads/{token}","title":"uploads.put","url":"reference/import_export.html#uploads.put"},{"id":"op:views.published.revoke","kind":"operation","section":"Views and dashboards","text":"Revoke a published view at once · DELETE /v1/workspaces/{ws}/published-views/{published}","title":"views.published.revoke","url":"reference/views_dashboards.html#views.published.revoke"},{"id":"op:views.published.session","kind":"operation","section":"Views and dashboards","text":"Trade a published view's password for a 12 h viewer session · POST /v1/published-views/{token}/session","title":"views.published.session","url":"reference/views_dashboards.html#views.published.session"},{"id":"op:views.published.view","kind":"operation","section":"Views and dashboards","text":"A published view's data (public link, read-only) · GET /v1/published-views/{token}","title":"views.published.view","url":"reference/views_dashboards.html#views.published.view"},{"id":"op:views_create","kind":"operation","section":"Views and dashboards","text":"Save a named query (where, sort, fields projection, limit) on one object. · POST /v1/workspaces/{ws}/views · agentdb views create","title":"views_create","url":"reference/views_dashboards.html#views_create"},{"id":"op:views_delete","kind":"operation","section":"Views and dashboards","text":"Delete a saved view. · DELETE /v1/workspaces/{ws}/views/{view} · agentdb views delete","title":"views_delete","url":"reference/views_dashboards.html#views_delete"},{"id":"op:views_get","kind":"operation","section":"Views and dashboards","text":"One saved view with its version history. · GET /v1/workspaces/{ws}/views/{view} · agentdb views get","title":"views_get","url":"reference/views_dashboards.html#views_get"},{"id":"op:views_list","kind":"operation","section":"Views and dashboards","text":"Saved views you can use (optionally of one object). · GET /v1/workspaces/{ws}/views · agentdb views list","title":"views_list","url":"reference/views_dashboards.html#views_list"},{"id":"op:views_publish","kind":"operation","section":"Views and dashboards","text":"Publish a saved view READ-ONLY through an expiring, revocable link (url for people, data_url JSON for pages; no API key). · POST /v1/workspaces/{ws}/views/{view}/publish","title":"views_publish","url":"reference/views_dashboards.html#views_publish"},{"id":"op:views_published_list","kind":"operation","section":"Views and dashboards","text":"Published view links of the workspace (yours, or all for owners and admins). · GET /v1/workspaces/{ws}/published-views","title":"views_published_list","url":"reference/views_dashboards.html#views_published_list"},{"id":"op:views_published_update","kind":"operation","section":"Views and dashboards","text":"Change a published view: title, access/password, expiry, allowed_origins (clear_allowed_origins), fields (clear_fields). · PATCH /v1/workspaces/{ws}/published-views/{published}","title":"views_published_update","url":"reference/views_dashboards.html#views_published_update"},{"id":"op:views_render","kind":"operation","section":"Views and dashboards","text":"A saved view rendered by its definition.display (table, list, kanban, calendar, timeline, report; docs/APP-VIEWS.md): only the fields the display uses, Kanban column counts and WIP limits, calendar/timeline window (from/to YYYY-MM-DD), report groups. · GET /v1/workspaces/{ws}/vi…","title":"views_render","url":"reference/views_dashboards.html#views_render"},{"id":"op:views_run","kind":"operation","section":"Views and dashboards","text":"Run a saved view (with your permissions). · POST /v1/workspaces/{ws}/views/{view}/run · agentdb views run","title":"views_run","url":"reference/views_dashboards.html#views_run"},{"id":"op:views_unpublish","kind":"operation","section":"Views and dashboards","text":"Revoke a published view link immediately.","title":"views_unpublish","url":"reference/views_dashboards.html#views_unpublish"},{"id":"op:views_update","kind":"operation","section":"Views and dashboards","text":"Change a view's name, description, definition or visibility. · PATCH /v1/workspaces/{ws}/views/{view} · agentdb views update","title":"views_update","url":"reference/views_dashboards.html#views_update"},{"id":"op:webhooks_create","kind":"operation","section":"Automation","text":"Register a signed https webhook for change events. · POST /v1/workspaces/{ws}/webhooks · agentdb webhooks create","title":"webhooks_create","url":"reference/automation.html#webhooks_create"},{"id":"op:webhooks_delete","kind":"operation","section":"Automation","text":"Delete a webhook. · DELETE /v1/workspaces/{ws}/webhooks/{webhook} · agentdb webhooks delete","title":"webhooks_delete","url":"reference/automation.html#webhooks_delete"},{"id":"op:webhooks_deliveries","kind":"operation","section":"Automation","text":"Webhook delivery log. · GET /v1/workspaces/{ws}/webhook-deliveries · agentdb webhooks deliveries","title":"webhooks_deliveries","url":"reference/automation.html#webhooks_deliveries"},{"id":"op:webhooks_get","kind":"operation","section":"Automation","text":"One webhook with delivery counts by status. · GET /v1/workspaces/{ws}/webhooks/{webhook} · agentdb webhooks get","title":"webhooks_get","url":"reference/automation.html#webhooks_get"},{"id":"op:webhooks_list","kind":"operation","section":"Automation","text":"List webhooks. · GET /v1/workspaces/{ws}/webhooks · agentdb webhooks list","title":"webhooks_list","url":"reference/automation.html#webhooks_list"},{"id":"op:webhooks_redeliver","kind":"operation","section":"Automation","text":"Send a delivery again. · POST /v1/workspaces/{ws}/webhook-deliveries/{delivery}/redeliver · agentdb webhooks redeliver","title":"webhooks_redeliver","url":"reference/automation.html#webhooks_redeliver"},{"id":"op:webhooks_rotate_secret","kind":"operation","section":"Automation","text":"Rotate the signing secret. · POST /v1/workspaces/{ws}/webhooks/{webhook}/rotate-secret · agentdb webhooks rotate-secret","title":"webhooks_rotate_secret","url":"reference/automation.html#webhooks_rotate_secret"},{"id":"op:webhooks_test","kind":"operation","section":"Automation","text":"Send a signed test delivery. · POST /v1/workspaces/{ws}/webhooks/{webhook}/test · agentdb webhooks test","title":"webhooks_test","url":"reference/automation.html#webhooks_test"},{"id":"op:webhooks_update","kind":"operation","section":"Automation","text":"Change a webhook. · PATCH /v1/workspaces/{ws}/webhooks/{webhook} · agentdb webhooks update","title":"webhooks_update","url":"reference/automation.html#webhooks_update"},{"id":"op:workspace.import","kind":"operation","section":"Workspaces","text":"Import a data-export bundle (a file of this workspace) into a NEW workspace of your account (dry_run first) · POST /v1/workspaces/{ws}/workspace-imports","title":"workspace.import","url":"reference/workspaces.html#workspace.import"},{"id":"op:workspace.info","kind":"operation","section":"Workspaces","text":"Workspace details and quota usage · GET /v1/workspaces/{ws}","title":"workspace.info","url":"reference/workspaces.html#workspace.info"},{"id":"op:workspace_create","kind":"operation","section":"Workspaces","text":"Create a new, empty workspace (an isolated project with its own schema and records) in the user's account. · POST /v1/account/workspaces · agentdb workspace create","title":"workspace_create","url":"reference/workspaces.html#workspace_create"},{"id":"op:workspace_delete","kind":"operation","section":"Workspaces","text":"Not available to agents since rc.8: always FORBIDDEN (reason explorer_only). · POST /v1/workspaces/{ws}/delete · agentdb workspace delete","title":"workspace_delete","url":"reference/workspaces.html#workspace_delete"},{"id":"op:workspace_get","kind":"operation","section":"Workspaces","text":"Show one workspace (id, name, slug, default) by id, slug or name; without workspace, the default one.","title":"workspace_get","url":"reference/workspaces.html#workspace_get"},{"id":"op:workspace_import","kind":"operation","section":"Import and export","text":"Re-import a data export (records_export / GET /export bundle .tar.gz, or .ndjson) into a NEW workspace of your account; it never merges into an existing one. · agentdb workspace import","title":"workspace_import","url":"reference/import_export.html#workspace_import"},{"id":"op:workspace_info","kind":"operation","section":"Workspaces","text":"Show the workspace this connection is bound to, your permission scopes and service limits. · agentdb workspace info","title":"workspace_info","url":"reference/workspaces.html#workspace_info"},{"id":"op:workspace_list","kind":"operation","section":"Workspaces","text":"List the workspaces this connection can use (id, name, slug, default). · GET /v1/account/workspaces · agentdb workspace list","title":"workspace_list","url":"reference/workspaces.html#workspace_list"},{"id":"op:workspace_rename","kind":"operation","section":"Workspaces","text":"Change a workspace's name and/or slug. · PATCH /v1/workspaces/{ws} · agentdb workspace rename","title":"workspace_rename","url":"reference/workspaces.html#workspace_rename"},{"id":"op:workspace_restore","kind":"operation","section":"Workspaces","text":"Not available to agents since rc.8: always FORBIDDEN (reason explorer_only). · POST /v1/workspaces/{ws}/restore · agentdb workspace restore","title":"workspace_restore","url":"reference/workspaces.html#workspace_restore"},{"id":"op:workspace_select","kind":"operation","section":"Workspaces","text":"Resolve the workspace the user means (by id, slug or exact name) and use it from now on: pass the returned id as workspace on every later call.","title":"workspace_select","url":"reference/workspaces.html#workspace_select"},{"id":"ref:field-types","kind":"reference","section":"Reference","text":"Field types: text, integer, boolean, date, datetime, enum, number, decimal, currency, time, timezone, duration, multi_select, list, json, email, url, phone, address, geo, rich_text, formula, status, user_ref, agent_ref, file, recurrence","title":"Field types","url":"reference/field-types.html"},{"id":"ref:file-types","kind":"reference","section":"Reference","text":"Accepted file types: audio/mpeg, audio/wav, audio/x-wav, audio/mp4, audio/x-m4a, audio/ogg, video/mp4, video/webm, video/quicktime, image/png, image/jpeg, image/gif, image/webp, application/pdf, application/zip, application/gzip, application/vnd.openxmlformats-officedocument.wor…","title":"File types","url":"reference/file-types.html"},{"id":"release:0.1.0-alpha.1","kind":"reference","section":"Release notes","text":"- Additive typed schema (text, integer, boolean, date, datetime, enum; required and unique fields); relationship types. - Records: create, get, update with version checks. - Links and one-hop traversal. - Typed query DSL with cursor paging. - Audit event per mutation. - Bounded…","title":"Release 0.1.0-alpha.1","url":"release-notes.html#v0-1-0-alpha-1"},{"id":"release:0.1.0-alpha.2","kind":"reference","section":"Release notes","text":"","title":"Release 0.1.0-alpha.2","url":"release-notes.html#v0-1-0-alpha-2"},{"id":"release:0.1.0-alpha.3","kind":"reference","section":"Release notes","text":"","title":"Release 0.1.0-alpha.3","url":"release-notes.html#v0-1-0-alpha-3"},{"id":"release:0.2.0-alpha.1","kind":"reference","section":"Release notes","text":"public alpha - /: signup page with onboarding. It shows the API URL, workspace and key (once), a ready claude mcp add command, MCP JSON for other clients, a first prompt and a curl check. - POST /v1/signup: email + accept_terms gives an account, a workspace and a full-scope key.…","title":"Release 0.2.0-alpha.1","url":"release-notes.html#v0-2-0-alpha-1"},{"id":"release:0.2.0-alpha.2","kind":"reference","section":"Release notes","text":"- Onboarding: after signup, three steps with a sidebar: save the key; pick an AI tool (10 clients, generated setup with copy buttons); run a first task. - Agent-first: the landing page offers a prompt that lets a coding agent sign the user up and connect itself; /llms.txt gives…","title":"Release 0.2.0-alpha.2","url":"release-notes.html#v0-2-0-alpha-2"},{"id":"release:0.2.0-alpha.3","kind":"reference","section":"Release notes","text":"- alpha.agentdb.link/ is now a focused signup screen, not a second landing page. The marketing headline, feature table, steps table and illustration are gone; that content lives on agentdb.link. - /assets/illustration.svg removed. Onboarding, the admin panel, /llms.txt, the API…","title":"Release 0.2.0-alpha.3","url":"release-notes.html#v0-2-0-alpha-3"},{"id":"release:0.2.0-alpha.4","kind":"reference","section":"Release notes","text":"- relationships_link_batch: MCP tool, POST /v1/workspaces/{ws}/links/batch, CLI records link-batch. - records_upsert_batch: - client_ref: optional on every upsert item and link; echoed in results, errors and BATCH_REJECTED details. - CLI: - Docs: the code covers the batch rules,…","title":"Release 0.2.0-alpha.4","url":"release-notes.html#v0-2-0-alpha-4"},{"id":"release:0.2.0-alpha.5","kind":"reference","section":"Release notes","text":"file imports - New MCP tools and REST routes: imports_start, imports_inspect, imports_run. They import CSV, JSON and JSONL files without putting their contents into tool calls. - One-time upload links: valid for 30 minutes, single use, write-only, and not an API key. Use PUT /v1…","title":"Release 0.2.0-alpha.5","url":"release-notes.html#v0-2-0-alpha-5"},{"id":"release:0.2.0-alpha.6","kind":"reference","section":"Release notes","text":"the `agentdb` CLI - Rename: the CLI is agentdb; agentdata keeps working as an alias (rename note on stderr). - agentdb login: browser device login (/v1/cli/login/, page /cli/login), or --api-key (hidden prompt / stdin). Key in the OS credential store. Also logout (revokes keys i…","title":"Release 0.2.0-alpha.6","url":"release-notes.html#v0-2-0-alpha-6"},{"id":"release:0.2.0-alpha.7","kind":"reference","section":"Release notes","text":"more AI tools - agentdb mcp install claude-desktop | windsurf | gemini (plus remove and list). Same keychain-backed agentdb mcp proxy; no keys in config files; other settings kept, backup written. - Install output now says what to do next (restart the app, new chat, trusted fold…","title":"Release 0.2.0-alpha.7","url":"release-notes.html#v0-2-0-alpha-7"},{"id":"release:0.2.0-alpha.8","kind":"reference","section":"Release notes","text":"several workspaces per account; delete, aggregate, composite keys, schema changes - Better batch errors: failed upsert items and import rows carry identifier (match key or first fields), field and, for imports, row. Totals include attempted. records_upsert_batch takes dry_run; i…","title":"Release 0.2.0-alpha.8","url":"release-notes.html#v0-2-0-alpha-8"},{"id":"release:0.2.0-alpha.9","kind":"reference","section":"Release notes","text":"existing keys keep working with workspaces","title":"Release 0.2.0-alpha.9","url":"release-notes.html#v0-2-0-alpha-9"},{"id":"release:1.0.0-beta.1","kind":"reference","section":"Release notes","text":"V1 Beta candidate - Sign in from web AI tools (OAuth 2.1): - Discovery: GET /v1/capabilities (no auth) and /openapi.json (generated from the domain schemas). /llms.txt and /skill.md describe OAuth, discovery and recovery. - Account recovery: /recover emails a single-use link (30…","title":"Release 1.0.0-beta.1","url":"release-notes.html#v1-0-0-beta-1"},{"id":"release:1.0.0-beta.2","kind":"reference","section":"Release notes","text":"live data for agent-built dashboards - Live data for dashboards (dashboards_create, dashboards_list, dashboards_revoke): - Change feed: records_changes / GET /v1/workspaces/{ws}/changes (pull and long-poll). - Fixes: Fastify logController (removes the FSTDEP023 warning), and the…","title":"Release 1.0.0-beta.2","url":"release-notes.html#v1-0-0-beta-2"},{"id":"release:1.0.0-beta.3","kind":"reference","section":"Release notes","text":"V1 beta user feedback - Dashboard sharing: - Batch errors: - Composite matching for single records: MCP records_upsert, REST POST /records/upsert-one, CLI records upsert-one --match-on a,b,c. - Capabilities: - Schema history and undo: - Import normalization: - Docs: the code (ve…","title":"Release 1.0.0-beta.3","url":"release-notes.html#v1-0-0-beta-3"},{"id":"release:1.0.0-rc.1","kind":"reference","section":"Release notes","text":"V1 release candidate - Security: - Imports: - MCP: still 46 tools. The only interface change is one new optional argument, on_unresolved_link.","title":"Release 1.0.0-rc.1","url":"release-notes.html#v1-0-0-rc-1"},{"id":"release:1.0.0-rc.10","kind":"reference","section":"Release notes","text":"safe email links, approval emails, connected apps Changed (compatibility) - decide_in changes from a relative path to an absolute URL. The relative path stays available in the new field decide_in_path. Clients that joined decide_in to a base URL should read decide_in_path instea…","title":"Release 1.0.0-rc.10","url":"release-notes.html#v1-0-0-rc-10"},{"id":"release:1.0.0-rc.11","kind":"reference","section":"Release notes","text":"password accounts, two-step sign-in, hosted dashboards, discovery Added: password accounts - Password rules: 12 to 256 characters, not the email address, not one repeated character, not a common password. - Forgot password at /app/forgot-password and /app/reset-password: same an…","title":"Release 1.0.0-rc.11","url":"release-notes.html#v1-0-0-rc-11"},{"id":"release:1.0.0-rc.12","kind":"reference","section":"Release notes","text":"public-surface hardening, 1.0 operations checks","title":"Release 1.0.0-rc.12","url":"release-notes.html#v1-0-0-rc-12"},{"id":"release:1.0.0-rc.13","kind":"reference","section":"Release notes","text":"custom dashboards, app.agentdb.link, docs portal, index advice, scaling prep Custom dashboards on their own domain - Four sharing modes: only_me (the owning account), people (invited by email), password, and link (anyone with the link; approved per version by a person). Sign-in…","title":"Release 1.0.0-rc.13","url":"release-notes.html#v1-0-0-rc-13"},{"id":"release:1.0.0-rc.2","kind":"reference","section":"Release notes","text":"V1 release candidate (feature freeze) - Imports: - Docs: - MCP:","title":"Release 1.0.0-rc.2","url":"release-notes.html#v1-0-0-rc-2"},{"id":"release:1.0.0-rc.3","kind":"reference","section":"Release notes","text":"V1 release candidate - Security: - Operations: - Docs:","title":"Release 1.0.0-rc.3","url":"release-notes.html#v1-0-0-rc-3"},{"id":"release:1.0.0-rc.4","kind":"reference","section":"Release notes","text":"import normalization fix - Fix (real-user report): an imports_run dry run rejected enum values like Prospect and PROSPECT without suggesting prospect.","title":"Release 1.0.0-rc.4","url":"release-notes.html#v1-0-0-rc-4"},{"id":"release:1.0.0-rc.5","kind":"reference","section":"Release notes","text":"email Reply-To, development policy - Policy: the V1 feature freeze is lifted. Justified, tested and versioned improvements are allowed; production deploys still need explicit authorization.","title":"Release 1.0.0-rc.5","url":"release-notes.html#v1-0-0-rc-5"},{"id":"release:1.0.0-rc.6","kind":"reference","section":"Release notes","text":"full ecosystem pack (15 prompts), human explorer, security hardening Release notes draft: 1.0.0-rc.6 - Data model: 17 new field types incl. exact decimal/currency, status with transitions, formula, file, user_ref/agent_ref, recurrence (02, 03, 05, 07). - Files and media: audio/v…","title":"Release 1.0.0-rc.6","url":"release-notes.html#v1-0-0-rc-6"},{"id":"release:1.0.0-rc.7","kind":"reference","section":"Release notes","text":"workspace delete fix, CLI output fix","title":"Release 1.0.0-rc.7","url":"release-notes.html#v1-0-0-rc-7"},{"id":"release:1.0.0-rc.8","kind":"reference","section":"Release notes","text":"discovery, one normalization, explorer completion, self-delete, re-import, media worker, security and real-agent fixes Added - Workspace import. A data export (GET /export?format=bundle, or the .ndjson) becomes a NEW workspace in your account; nothing is merged. REST POST /v1/wo…","title":"Release 1.0.0-rc.8","url":"release-notes.html#v1-0-0-rc-8"},{"id":"release:1.0.0-rc.9","kind":"reference","section":"Release notes","text":"authenticated human approvals, email logo, rollback docs Changed (compatibility) - Keys that used to approve under the default rule or an existing policy now get human_session_required. Owners who want keys to keep deciding set human_only: false on the policy. - approvals_get /…","title":"Release 1.0.0-rc.9","url":"release-notes.html#v1-0-0-rc-9"},{"id":"tpl:agent_crm","kind":"reference","section":"Templates and app packages","text":"AgentCRM: organizations (company), contacts, leads, deals with a pipeline, notes, activities (calls, meetings, e-mails with direction, linked to Inbox conversations), follow-up tasks and deal documents. Extends the crm template. Objects: company, contact, lead, pipeline, deal, n…","title":"Template agent_crm","url":"reference/app-packages.html#tpl-agent_crm"},{"id":"tpl:agent_kanban","kind":"reference","section":"Templates and app packages","text":"AgentKanban: boards over AgentTodos tasks (columns = status values, order = position, WIP limits per column). No separate data model. Objects: task","title":"Template agent_kanban","url":"reference/app-packages.html#tpl-agent_kanban"},{"id":"tpl:agent_projects","kind":"reference","section":"Templates and app packages","text":"AgentProjects: projects, milestones, deliverables, dependencies (cycle-checked), team assignments and progress roll-ups over shared tasks. Objects: project, milestone, deliverable, project_member, task","title":"Template agent_projects","url":"reference/app-packages.html#tpl-agent_projects"},{"id":"tpl:agent_todos","kind":"reference","section":"Templates and app packages","text":"AgentTodos: tasks, subtasks, priorities, human or agent assignees, due dates, dependencies (cycle-checked), recurrence and completion. Objects: task","title":"Template agent_todos","url":"reference/app-packages.html#tpl-agent_todos"},{"id":"tpl:assets","kind":"reference","section":"Templates and app packages","text":"AgentAssets: equipment register, assignment (user_ref/agent_ref), warranties with expiry reminders, repair and maintenance history, and maintenance plans (recurrence field + scheduler sweep). Objects: equipment, equipment_warranty, equipment_repair, maintenance_plan, equipment_r…","title":"Template assets","url":"reference/app-packages.html#tpl-assets"},{"id":"tpl:cms","kind":"reference","section":"Templates and app packages","text":"AgentCMS: pages and posts with Markdown bodies, SEO fields, locales and translations, assets as file fields, and an editorial status. Configure delivery with cms_configure. Objects: cms_page, cms_post","title":"Template cms","url":"reference/app-packages.html#tpl-cms"},{"id":"tpl:content","kind":"reference","section":"Templates and app packages","text":"AgentContent: campaigns, posts per channel (social, email, blog) with media, an approval-ready status, publishing dates and manual or imported performance metrics. Nothing is posted to external networks. Objects: content_campaign, content_post, content_metric","title":"Template content","url":"reference/app-packages.html#tpl-content"},{"id":"tpl:crm","kind":"reference","section":"Templates and app packages","text":"Companies, contacts and deals with a pipeline status, plus views for open deals and recent contacts. Objects: company, contact, deal","title":"Template crm","url":"reference/app-packages.html#tpl-crm"},{"id":"tpl:forms","kind":"reference","section":"Templates and app packages","text":"AgentForms: an inquiry object for public website forms (forms_create maps inputs to it), with a triage status and views. Objects: form_inquiry","title":"Template forms","url":"reference/app-packages.html#tpl-forms"},{"id":"tpl:inventory","kind":"reference","section":"Templates and app packages","text":"AgentInventory: products and variants (unique SKU), locations, suppliers, an append-only stock ledger with decimal quantities, stock on hand as a query-time roll-up, and replenishment that drafts purchase orders below the reorder point. Objects: product, product_variant, warehou…","title":"Template inventory","url":"reference/app-packages.html#tpl-inventory"},{"id":"tpl:property","kind":"reference","section":"Templates and app packages","text":"AgentProperty: properties (address + geo), owners, tenants, listings (currency rent/price), leases (dates, contract file), photos (files), maintenance requests (status, priority, assignment) and monthly rent reminders. Objects: property, property_owner, tenant, property_listing,…","title":"Template property","url":"reference/app-packages.html#tpl-property"},{"id":"tpl:recruit","kind":"reference","section":"Templates and app packages","text":"AgentRecruit: candidates, vacancies, applications (stage transitions), interviews (calendar events), evaluations (scorecards) and résumés as files, with privacy defaults: interviewer field rules, consent and a retention sweep. Objects: vacancy, candidate, application, interview,…","title":"Template recruit","url":"reference/app-packages.html#tpl-recruit"},{"id":"tpl:support","kind":"reference","section":"Templates and app packages","text":"AgentSupport: tickets (status transitions, priority, channel), customers, SLA targets with due dates set on create and breach sweeps, escalations, response history linked to Inbox conversations, suggested knowledge articles and CSAT. Objects: support_customer, sla_policy, ticket…","title":"Template support","url":"reference/app-packages.html#tpl-support"}],"version":"1.0.0-rc.13"}
