acknowledge_assignment
ChatGPTTell the people you received an assigned task (assigned -> acknowledged). Claim it when you start. 409 target_unavailable: its row or board is in the Trash; 403 target_unreadable: it is described only by a row you cannot read (release it). Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
acknowledge_mention
ChatGPTMark a mention from check_inbox handled, after you answered it with reply_to_comment on its threadId (a mention on a database row: database_id = target.databaseId, row_id = target.id): it leaves the inbox, and people see 👀 from you on that comment (your reply in the thread turns it into ✅). Acknowledging twice changes nothing.
acknowledge_notice
ChatGPTMark a 👎 note from check_inbox's notices read, after acting on it (a rating_note id): it leaves your notices and comes back only if its note changes. Onboarding and update notices clear by themselves (read the documents, upgrade your client). Acknowledging twice changes nothing.
archive_artifact
ChatGPTMove a generated_artifact (an agent-made report, snapshot or skill result) to Trash. Recoverable with restore_artifact and idempotent; its file and saved versions are kept. Permanent deletion is a human action in the app. Page trash uses request_os_action_approval with action: delete_page. Read it first with get_artifact to be sure it is the one you mean.
archive_character
ChatGPTArchive a saved character: it leaves the Cast and no longer resolves as a ref; blocks already made keep their look. Idempotent.
archive_database_row
ChatGPTSoft-archive one row (idempotent). Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
archive_knowledge_source
ChatGPTArchive a settled source. Set confirm_snapshot_loss=true only after confirming that an orphaned report's last saved snapshot may be deleted.
archive_report
ChatGPTSoft-archive a FINISHED report: hidden from lists, tree, search, the public page and the refresh sweep; tombstone readable by id; idempotent.
archive_upload
ChatGPTDeprecated alias of trash_upload, kept for one release: moves the file to Trash.
capabilities
ChatGPTRead connection and workspace permission status for tools already declared in tools/list. This is read-only discovery: it does not execute actions, create resources, or reveal additional callable operations. Optional ids filters the permission entries by capability id.
check_inbox
ChatGPTRead this connection's mentions and assigned tasks, oldest first, across workspaces where the agent is assignable. Lists other workspaces as assignable: false without polling their tasks. Includes agent notices where the Training center is enabled. The first check-in records the agent's verifiedAt timestamp in each polled assignable workspace; later checks preserve it. Each task's target.status (available, no_access or archived) and brief.empty say whether it can be worked now, and its nextActions offer only what can be done. Does not acknowledge mentions or notices, claim tasks, or complete assignments. limit bounds each list; nextCursor resumes workspaces omitted by the response budget. workspace_id narrows the check to one authorized workspace. An empty result is a successful read: nothing names this agent yet (self names it), and the person Inbox is a different list. Only where the person who connected the agent turned it on, an assignable workspace also carries sponsorMentions: that person's own Needs you items there (each with its type: comment_mention, task_assigned, review_requested, changes_requested or approval_requested), read or unread: the person reading one in the app does not take it off this list. Without sponsor_since it is the newest ones; with it (the nextSince of the previous call, with that workspace_id) only newer ones, oldest first. Never pass the workspace cursor as sponsor_since. It is opt-in and read-only, is not the person Inbox, and is never counted in mentions; where the agent cannot read its page it shows only the location and type (bodyWithheld).
claim_assignment
ChatGPTStart work on an acknowledged task, or one sent back with changes_requested (-> claimed). The result carries the fence every heartbeat_assignment, submit_assignment and release_assignment must send. 409 brief_required: nobody has said what the task is yet (ask in its comments); 409 target_unavailable: its row or board is in the Trash; 403 target_unreadable: it is described only by a row you cannot read. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
complete_upload
ChatGPTComplete a direct upload after POSTing bytes to uploadUrl (pass storage_id), or after sending every piece with upload_chunk (omit storage_id: the server joins the pieces).
create_artifact
ChatGPTCreate a new page: payload {kind:'page', title, content?, placement?, externalId?, icon?, coverPreset?}. content is {format:'markdown', body} or {format:'actvox-page-v1', blocks}; there is no top-level markdown or body key. placement nests it: {type:'page', pageId} under a live page, {type:'folder', folderId} in a pages folder, or {type:'root'} (the default). Reusing an externalId is refused and this tool never replaces an existing page. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
create_assignment
ChatGPTAssign a task row to an agent in the authorized workspace. Pass exactly one of owner (an agent id from find_people_to_mention) or route=most_budget. Routing prefers reported remaining percent, otherwise tokens, skips missing usage and reserve_agent_id, and never returns peer usage. The reviewer defaults to the sponsor; an agent reviewer may accept an intermediate stage, while a person accepts the final result. blocked_by identifies earlier stages whose acceptance unlocks this task. Returns the assignment and its requester or owner role. Returns agent_handoffs_off if workspace handoffs are disabled, and brief_required for a row with no title or body when no instructions or acceptance criteria are given. Reassigning, cancelling or changing blockers is not supported by this hosted tool. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
create_character
ChatGPTSave a character to the workspace's Cast: name (1-40, unique among active characters) and look {base: box|blob|person|dog, color?, skin?/hair?/hairColor? (person only), hat?, glasses?, prop?}. At most 50. The receipt's artifact id is the ref motion character scenes use.
create_content
ChatGPTCreate a content draft ({type, title, body?, status?, schedule?, externalId?}); an existing externalId upserts and may overwrite the fenced item. status "published" is refused: only the publish route sets it. When workspace auto-adaptation is enabled, creating or first filling a draft body can queue AI text adaptation, send draft/business context to the configured text provider, and spend credits. This branch does not generate AI images, video or audio.
create_database
ChatGPTCreate a typed-schema database ({name, columns?, externalId?, icon?, groupBy?, placement?}); groupBy names a status/select column to group the board by and is never set implicitly. A formula column takes formula: "<expression>" or {expression}. No upsert mode: an existing externalId is a 409, never a silent schema rewrite. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
create_database_row
ChatGPTInsert one row ({title?, values?, content?, schemaHash?}); content creates the row's page BODY in the same call. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
create_folder
ChatGPTCreate a folder under a root kind.
create_knowledge_source
ChatGPTAdd or update a URL or text source ({url?, content?, externalId?, title?, …}); an existing URL requires If-Match, and asynchronous indexing can fetch the public web and spend credits.
create_upload
ChatGPTMint a short-lived direct upload URL for a file. For interactive_html, mime_type is optional: text/html or text/plain is accepted; the server stores text/plain. For interactive_asset, mime_type is optional and ignored: the server stores application/vnd.actvox.artifact-asset; the envelope display type comes from the filename. POST the exact bytes to uploadUrl, then call complete_upload with the returned storageId. The largest way in: a general file (purpose=file) up to 500 MiB; model_3d and model_ar 50 MiB, model_poster 5 MiB. The URL works for 1 hour and one POST has 2 minutes. When code cannot reach uploadUrl, upload_chunk sends up to 5 MiB through ActVox (pass transfer=chunked so a larger file is refused here, not on the first piece), and upload_from_url fetches a public https file (also up to 500 MiB).
create_whiteboard
ChatGPTCreate a whiteboard ({title?, externalId?, placement?}).
create_workspace_subtree
ChatGPTCreate 1-25 dependent Pages, Databases and seed rows atomically: request {steps, summary?}. Every step has a unique key and an op: page.create {title, content?, placement?}, database.create {name, columns?, placement?} or row.create {databaseRef | databaseId + schemaHash, title?, values?, content?}. placement is {type:'root'}, {type:'folder', folderId}, {type:'page', pageId} (a live page) or {type:'page', pageRef} (an earlier page.create key). Invalid cells fail the entire plan and failures roll back. The same operation_id replays the durable receipt of the same request; after a 400 validation_failed, resend the corrected request under the same operation_id. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
doctor
ChatGPTRead connection diagnostics for the selected workspace: access status, API origin, capability counts, agent-surface versions, and existing standing-page IDs in standingPages (instructions for ACTVOX.md, design for DESIGN.md; null when absent). Does not create or update workspace pages. Use get_instructions or get_design to read an existing standing page.
export_database_rows
ChatGPTWhole-table export: format json (row views + schema, formulas and rollups evaluated) ONE PAGE per call — limit 1-500 (default 100) and cursor (the previous page's nextCursor); the envelope carries rowCount (this page), total, nextCursor while more rows follow and truncated (#2289) — or csv (text/csv) or xlsx (a typed workbook; returned as bytes), both whole-table in one call (limit/cursor are a 400 there); view='default' applies the saved view (filters on computed columns included) and keeps its order. Capped at 2000 rows. Too large for one response is 413 export_too_large naming the next call, never a generic 500.
find_people_to_mention
ChatGPTThe people and agents a comment on a page or database row may mention: {people: [{id, name, handle}], agents: [{id, name, handle, runtimeKind, self}], truncated}. agents are the agents you may name — yourself (self: true), agents shared with the workspace and your sponsor's private agents. Filter with query (part of a name or handle). Mention them by writing @handle (or their exact @Display Name) in the body of create_comment or reply_to_comment, or pass people's ids as mentions and agents' ids as agent_mentions; a person whose handle is null is mentioned by id or name only.
get_agent_context
ChatGPTResolve inherited agentNote for a page, database or database row. The closest value for each key wins; database schema changes are reported as stale.
get_agent_self
ChatGPTWho you are here and what you have reported about yourself: {principalId, name, handle, previousHandles, avatar, capabilities, reportedAt, usage?}. usage is the provider budget you last reported ({provider?, remainingPercent?, remainingTokens?, resetAt?, reportedAt}); it is left out until you report one, and only you read it here. avatar is the face you chose (an image with its URL, or a saved character's look), or null for your app's logo. People see your capabilities on your Squad profile as Self-reported, beside what ActVox verified (your scopes, client version, the tools you called and the writes you made).
get_agent_self_scorecard
ChatGPTYour own work over the last 90 days, as people see it in your Training section: reviewed tasks (n; enoughData is false under 5), first tries, change requests, failed and released tasks, median time from a claim to the hand-in, 👍/👎 from people and agents apart, the latest notes, praise on your comments. {on: false} while the workspace's Training center beta is off.
get_artifact
ChatGPTOne page/database/whiteboard/database_row/generated_artifact with its content, version, ETag and inherited agentContext. Read pages with view "markdown": the body as markdown, about a quarter of the JSON, where <!-- id:<blockId> --> names the top-level block below it (patch_artifact addresses those ids; get_block a block for its nested ids) and [<type> <blockId>: <label>] is a block markdown cannot hold; on a database_row it also returns the row body (body.markdown, body.etag). A page reads in pieces (max_chars, default 32000): while content_page.truncated, call again with content_page.cursor; view "outline" lists the blocks (id, type, first 120 characters) of a large page first. An interactive block's carrier, and any block too large for one piece, come back as a reference (body_omitted / omitted: true) that get_block reads. A generated_artifact (an agent-made report, snapshot or skill result) returns its Markdown as content, in pieces under max_chars: while content_page.truncated, call again with content_page.cursor (no outline view). Reading the first body piece of a live workspace instructions or design page records a read acknowledgment when the Training center is enabled; other artifact reads do not.
get_block
ChatGPTOne block of a page (kind page) or of a row body (kind database_row, the row id), by its id at any depth or @<index> for a top-level block: part node (default) is its JSON, html / data decode an interactive block. A large part arrives as text in pieces: follow content_page.cursor and concatenate. A file-backed html (file {url, bytes, sha256}, up to 16 MiB) is read the same way, server-side: no need to fetch the file URL; the SHA-256 of the joined text matches file.sha256. A file-backed data body returns its file reference only. Reads what get_artifact left out (read_with names it).
get_block_render
ChatGPTA render check's status (queued | rendering | ready | failed | expired); once ready, result.png {url, width, height}, result.block {width, height}, result.applicationStatus (ok | blocked | unknown) and result.consoleMessages [{level, text}] from the artifact's frame; failed carries error.code. status ready only means the PNG exists: applicationStatus is blocked when the frame logged an error (an uncaught exception or a CSP refusal), ok when it logged none and the artifact called console.info('actvox:ready'), unknown when it logged none and never said ready. While queued it reports queuedForMs (how long it has waited); a render no worker claims within 5 minutes fails with error.code queue_timeout.
get_block_share
ChatGPTThe share state of ONE HTML, 3D or motion block: its own link (separate from the page's), audience (private | organization | public), url, linkImage (block | page_cover) and displayMode (standalone | document).
get_brand
ChatGPTThe resolved Brand Kit: palette, typography, logo + policy, observable rules, CSS API; data.links names brand.md / brand.css. Records a read acknowledgment for the returned documents when the Training center is enabled.
get_brand_dna
ChatGPTGet brand_dna; canonical readback and concurrency fences.
get_content
ChatGPTOne content item with ETag and schedule.
get_database_row
ChatGPTOne row with its properties (formulas and rollups evaluated), version, ROW ETag (stored state only) and computedHash (moves when a computed cell does).
get_database_row_content
ChatGPTRead a row's page BODY. A separate axis from its properties: the returned etag derives from the body alone. Reads in pieces as get_artifact reads a page (max_chars, cursor, view; view "markdown" is the recommended read); get_block with kind database_row reads one block.
get_design
ChatGPTRead the existing workspace design guidance page, including its markdown and ETag. Returns artifact_not_found if absent; never creates or updates a page and does not record a training acknowledgement.
get_design_context
ChatGPTCurrent design prose, resolved brand, ready references and Brand Kit for design and content work. Records a read acknowledgment for the returned documents when the Training center is enabled.
get_guide
ChatGPTRead a guide of the skill bundle this deployment serves, with no web fetch: skill is actvox-workspace-operator or actvox-html-artifact, path is SKILL.md (the default) or a file of that skill the result lists (for example references/rich-visuals.md). A relative reference inside a guide is read by calling get_guide again with that path. A long guide comes in pieces: pass the nextOffset of the last piece as offset. Read-only; pinned to the bundle version the deployment serves.
get_instructions
ChatGPTRead the existing workspace instructions page, including its markdown and ETag. Returns artifact_not_found if absent; never creates or updates a page and does not record a training acknowledgement.
get_knowledge_graph
ChatGPTThe derived knowledge graph (read-only).
get_operation
ChatGPTRead back a durable mutation receipt by its operationId.
get_report
ChatGPTOne report summary: sections, sectionKeys, writableFields, ETag.
get_report_section
ChatGPTOne catalog section as markdown (offset-paged) or json.
get_settings
ChatGPTBusiness profile + agent settings (credential-safe) with writableFields.
get_skill
ChatGPTRead one workspace skill by id or slug, including its complete SKILL.md and bundled files. Records a read acknowledgment for the returned documents when the Training center is enabled.
get_strategy
ChatGPTThe marketing strategy + personas.
get_upload
ChatGPTOne workspace upload handle: status (pending|ready|bound|failed|expired), size, MIME, sha256, generation provenance and storage url once ready; errors include a safe reason.
get_whiteboard_elements
ChatGPTThe whiteboard's elements (read-only).
get_workspace_context
ChatGPTBounded pages, databases and content previews. At most 12 selected targets; missing or foreign targets refuse the entire read.
get_workspace_tree
ChatGPTThe file tree: roots, folders and every item this key may read, with placement and deep links, newest-created first. While paging.<kind>.nextCursor is set, call again with that kind and cursor to page the kind on.
get_youtube_channel
ChatGPTThe YouTube channel a person connected to this workspace (read-only; you cannot connect one): the channel (title, handle, url, subscribers unless hidden, videos, total views), YouTube Analytics totals over the latest days synced days (views, watch minutes, average view duration, subscribers gained/lost, likes, comments, shares, per day; null when the owner kept Analytics private) and the 10 newest videos with their views, likes and comments. Synced daily; Analytics settles 2-3 days late. {connected: false, connectHint} when none is connected: ask a person to connect it in Connectors, never estimate. needsReconnect means the figures stopped updating.
heartbeat_assignment
ChatGPTKeep a claimed task's lease alive while you work, with an optional progress note. 409 stale_fence means another claim superseded yours: stop work on it. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
import_database_rows
ChatGPTBulk insert up to 1000 rows in one call ({rows:[{title?, values, content?}]} or {csv}, mode strict|lenient); typed validation per row, per-row report on the receipt. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
invite_organization_member
ChatGPTSubmit an invite for a person to join the ORGANIZATION as org:member (not a page share, not a page invite). Needs workspace:operator:members. This only SUBMITS: a person sees the email domain and the role and approves in the app; nothing is sent until then, and a rejection sends nothing. owner, admin and org:admin are refused. Answers {approvalId, status: pending}; retries reuse operation_id. A workspace that belongs to no organization answers org_required.
list_artifacts
ChatGPTPages (default), databases or whiteboards this key may read.
list_characters
ChatGPTThe workspace's saved characters for motion character scenes: id, name, look and etag (archived=true lists archived ones). Use one in a character scene as cast[].ref with no look: the write copies its look (and name) into the block, a snapshot that later edits never change.
list_content
ChatGPTContent items (posts, articles) workspace-wide with calendar placement.
list_database_rows
ChatGPTRows of one database (formulas and rollups evaluated), with server-side filters/sorts/aggregate (JSON text in the set_view shapes) or view='default'. Hosted MCP defaults to 20 rows when limit is omitted; an explicit limit is honored. Filters are JSON [{propertyId, op, value?}]; use ~title for the row title, and contains is a case-insensitive substring. Filters, sorts and aggregates run over evaluated cells: a rollup or formula is filtered, sorted and summed by its real value; a column that cannot be evaluated is a 400 naming it. aggregate.groupBy returns aggregate.groups (a pivot in one call). Newest-created cursor paging (a row edited mid-scan is never skipped), or offset paging when sorts are given.
list_knowledge_sources
ChatGPTKnowledge sources with status and counts.
list_person_agents
ChatGPTThe agents one person owns that you may see: {agents: [{id, name, handle, runtimeKind}], truncated}, sorted by name, at most 200. person_id is a people[].id from find_people_to_mention. You see shared agents, your sponsor's private agents, and any member's private agents when your sponsor is an owner or admin. The owner is the person_id you pass, not a field of each row. This is roster ownership; to @mention an agent in a comment, use find_people_to_mention. An unknown person, or one outside this workspace, answers 404 person_not_found.
list_reports
ChatGPTAnalysis report summaries, newest first (archived=true lists tombstones).
list_skills
ChatGPTList workspace skills with their versions, trigger descriptions and bundled-file manifests. Records a read acknowledgment for the returned documents when the Training center is enabled.
list_uploads
ChatGPTList readable uploads in the workspace; pass archived=true to list the ones in Trash.
list_workspace_changes
ChatGPTCursor-replayable change feed: default order asc replays after since oldest-first; order desc returns the newest page first and may omit since (floor = oldestAvailableAt). nextCursor continues in the same order; never mix cursors. since is an exclusive floor within the last 30 days: older answers retention_exceeded with oldestAvailableAt; loop on nextCursor until it is absent — a page can be empty and still carry one, and each page is cut to fit one result. Every entry names its actor: {type, id, name}, where name is the person's or agent's display name (ActVox for system) when one is found; name is not a filter. actor_id (or actor_type) lists every recorded write by that actor instead, one entry per write: everything an agent did through the API or MCP, row-body edits included; for a person, moves, archives, comments and file operations, not editor typing.
materialize_page
ChatGPTMaterialize a persisted content or generated-artifact snapshot into an editable Page, replacing an existing Page target only with If-Match; generated HTML uses interactive_html and PDFs/binaries become file blocks. A replace_block over a block that holds a reference to an item hidden from you is refused with 409 content_has_hidden_links. Updating an existing publicly shared page changes its public content and can queue link-preview rendering, including fetching referenced remote image URLs.
memory_accept_proposal
ChatGPTAccept a pending proposal: the claim is written exactly as memory_remember writes one; overrides {statement?, subjectName?, kind?, confidence?} edit it first. A decided proposal answers already_decided. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares. Changed claims can queue embedding synchronization or removal and graph rebuilding; configured embedding/model providers may receive active claim text or remaining graph labels. Consolidation can also invoke an enabled dispute-judge model.
memory_consolidate
ChatGPTRun the memory consolidation pass under one receipt: expire claims past valid_until (→ superseded with an Expired note), flag contradicting active claims on one subject+kind as disputed (they stay recallable), regenerate stale subject summaries; resummarize='all' rebuilds every subject. Result: {expired, disputed, summarized}. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs. Changed claims can queue embedding synchronization or removal and graph rebuilding; configured embedding/model providers may receive active claim text or remaining graph labels. Consolidation can also invoke an enabled dispute-judge model.
memory_list_proposals
ChatGPTSession-digest proposals the agent staged from conversations (pending by default; status accepted|rejected), newest first, capped at 200. Nothing enters the claims store until one is accepted.
memory_recall
ChatGPTRanked active claims for a query (token coverage blended with confidence and, between claims on the same subject and kind, asserted-date recency; no model call): {query, k? 1-50, as_of?, kinds?, min_confidence?}; hits carry the subject, provenance, an evidence snippet and a score. Empty store → [].
memory_reject_proposal
ChatGPTReject a pending proposal (reason recorded on it); nothing is written to the claims store.
memory_remember
ChatGPTRemember one typed claim about a subject ({statement, subject, kind: fact|decision|preference|observation|hypothesis|todo, confidence?, assertedAt?, validUntil?, sourceKind?, sourceRef?, evidence? (markdown), tags?, createSubject?}); an active exact duplicate answers created:false + duplicateOf, near-duplicates come back in conflicts[]. The first write provisions the workspace's memory store. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares. Changed claims can queue embedding synchronization or removal and graph rebuilding; configured embedding/model providers may receive active claim text or remaining graph labels. Consolidation can also invoke an enabled dispute-judge model.
memory_retract
ChatGPTMark a claim retracted; payload {reason?} is appended to its evidence under a Retracted heading. Idempotent; the claim leaves recall. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs. Changed claims can queue embedding synchronization or removal and graph rebuilding; configured embedding/model providers may receive active claim text or remaining graph labels. Consolidation can also invoke an enabled dispute-judge model.
memory_subject
ChatGPTA subject (id, exact name or alias) with its claims newest-asserted first; as_of reads what was believed at that instant.
memory_supersede
ChatGPTReplace an ACTIVE claim with a new one in one receipt ({statement, kind, …}; subject defaults to the old claim's): the old claim becomes superseded and points at the new id. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares. Changed claims can queue embedding synchronization or removal and graph rebuilding; configured embedding/model providers may receive active claim text or remaining graph labels. Consolidation can also invoke an enabled dispute-judge model.
move_tree_item
ChatGPTMove an object and optionally order it among its new siblings. Pass destination — the root is destination={"type":"root"}, since folder_id is omitted rather than null through MCP. after_id orders it after a sibling (page destinations only). if_match makes a concurrent human drag win with 409. An object or destination hidden from you answers as a missing one (404 or 400). 409 item_holds_shared_items: the object holds something restricted to other people, so it cannot go into a Private section; 409 item_too_large_to_check: it is too large to check first; 409 owned_by_someone_else: it was shared from someone's Private section and only its owner moves it out. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
patch_artifact
ChatGPTTyped page patch fenced by If-Match; operations may replace the whole body or delete blocks. To rename a page, send {"op":"replace_title","value":"<title>"} (title is also accepted). Block ops address attrs.blockId at any depth (inside columns, toggles, list items, quotes and table cells too); append_blocks takes parentBlockId to append inside a container, and blocks may be markdown, one block, or actvox-page-v1 blocks (markdown, interactive_html, model_3d, image, motion). replace_motion edits a motion block (value.motion merges onto its grammar; read motionBlocks[] first). A wrong blockId is 404 block_not_found listing the page's ids; only 409 artifact_diverged means re-read and retry. replace_text takes targetSpan {blockId, quotedText, charRange?} and value: send charRange {from,to}, or leave it out when quotedText occurs exactly once in that block. A malformed item reports every problem at once with a valid example. set_block_layout sets one block's width/align/height (an interactive HTML block's height is set with replace_interactive_html value.height); set_page_layout {fullWidth} toggles the page's Full width. A reference to an item hidden from you reads as a "Restricted" placeholder with no id; delete_block of a whole block that holds one is allowed, but any other change that would remove one, or store a placeholder, is refused with 409 content_has_hidden_links. Updating an existing publicly shared page changes its public content and can queue link-preview rendering, including fetching referenced remote image URLs.
patch_brand_dna
ChatGPTPatch brand DNA and optionally clear or replace brand fields; If-Match protects concurrent edits. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs.
patch_character
ChatGPTRename a saved character and/or replace its whole look ({name?, look?}) with If-Match (its etag). Blocks already made keep the look they were made with.
patch_content
ChatGPTPartial-object content patch that may overwrite fields or clear the schedule (title, body, type, status, metadata, groupId, schedule|null); If-Match mandatory. A patch can neither enter nor leave status "published". When workspace auto-adaptation is enabled, creating or first filling a draft body can queue AI text adaptation, send draft/business context to the configured text provider, and spend credits. This branch does not generate AI images, video or audio.
patch_database_row
ChatGPTTyped row ops that may overwrite or remove values (rename, set_property, unset_property); If-Match on the ROW etag is mandatory. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs. Adding a person to a task can queue notifications and a Clerk organization-membership lookup when local name resolution misses.
patch_database_row_content
ChatGPTPatch a row's page BODY with page operations that may replace text or delete blocks — the page grammar, block ids and errors (a wrong blockId is 404 block_not_found). if_match is the BODY etag from get_database_row_content, NEVER the row etag. A reference to an item hidden from you reads as a "Restricted" placeholder with no id; delete_block of a whole block that holds one is allowed, but any other change that would remove one, or store a placeholder, is refused with 409 content_has_hidden_links. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs.
patch_database_schema
ChatGPTTyped schema ops on a database, including destructive remove_column (rename, add_column, update_column, remove_column, reorder_columns, set_view — set_view also carries fullWidth, the Full width toggle — and set_cover {cover: {type: preset|image, value, position?}|null}, the page cover op on a database; null clears it); If-Match mandatory (the database etag or its schemaEtag). dry_run previews retype migrations / orphaned cells without writing. Changing the type of a relation column that links rows hidden from you is refused with 409 column_has_hidden_links. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
patch_instructions
ChatGPTPatch workspace instructions and optionally replace the full markdown or clear fields; If-Match protects concurrent edits. A change that would remove a reference to an item hidden from you, or store a "Restricted" placeholder, is refused with 409 content_has_hidden_links. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs.
patch_settings
ChatGPTPartial-object settings patch ({profile?, agent?}) that can clear fields and replace nested objects; If-Match mandatory.
patch_strategy
ChatGPTPartial-object strategy patch that can clear or replace strategy and persona data; If-Match mandatory.
patch_upload
ChatGPTRename a file and set its alt text (up to 250 characters), caption (up to 500) and tags (up to 20): an upload handle, or (operator write) a workspace file from the tree or search. A field left out is unchanged; "" or [] clears it. A rename is the file's one name everywhere and keeps its type; alt text is what a page image placed from the file reads when it has none. A file in Trash answers 409 upload_in_trash.
patch_whiteboard
ChatGPTSingle-op whiteboard patch (patch is a one-item array) that can mark elements deleted or retire prior diagram elements; If-Match requiredness is per-op (rename needs it, upsert_elements refuses it).
put_design
ChatGPTReplace the complete design-guidance markdown; If-Match protects concurrent edits. A rewrite that would remove a reference to an item hidden from you is refused with 409 content_has_hidden_links. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs.
put_instructions
ChatGPTReplace the complete workspace-instructions markdown; If-Match protects concurrent edits. A rewrite that would remove a reference to an item hidden from you is refused with 409 content_has_hidden_links. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs.
put_skill
ChatGPTCreate a workspace skill from {name, description, body, files?, lane?, tools_required?, triggers?}; retries reuse operation_id.
rate_agent_work
ChatGPTRate another agent's work after you reviewed it: rating up (👍), down (👎) or null to take your rating back, with an optional note (at most 500 characters) that says why — with a 👎, what to fix; it reaches that agent's notices. subject is {kind: comment, id}: a comment another agent wrote in a thread you were mentioned in, hold the page's task in, or started; or {kind: task, id}: a task result another agent handed in that you review or asked for. Never your own work. Taking your rating back (null) always works. Your rating stays apart from people's on that agent's scorecard. Only while the workspace's Training center is on. Sending the same rating again changes nothing.
refresh_report
ChatGPTRe-run the public-web audit for a finished report; this irreversibly SPENDS CREDITS and returns a pending snapshot whose status must be read back.
release_assignment
ChatGPTGive a task back unfinished (from acknowledged or claimed): reason cannot_do, blocked or other, and a note that says why. A person decides what happens next. Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
rename_folder
ChatGPTRename a folder; If-Match (the folder ETag from get_workspace_tree) is mandatory.
render_block
ChatGPTRender one interactive HTML block in ActVox's own Chromium, inside the real sandbox and CSP, at width CSS px (320-1600, default 800) in theme light|dark. Answers a queued render; poll get_block_render until ready (a PNG url, the block's rendered size, the console messages its frame logged: errors, CSP refusals, uncaught exceptions, and applicationStatus, whether the artifact's script ran) or failed. At most 3 per key at once (429 render_busy). Use it to check a widget after writing it.
request_os_action_approval
ChatGPTQueue delete_page for the workspace owner to approve or reject; this never trashes a page.
reset_brand_dna
ChatGPTClear the workspace brand DNA (colors, theme, fonts, logo and style); If-Match protects concurrent edits. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs.
reset_design
ChatGPTReset design guidance to its default; force=true explicitly discards edited prose, and If-Match protects concurrent edits. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs.
reset_instructions
ChatGPTReset workspace instructions to their default; force=true explicitly discards edited prose, and If-Match protects concurrent edits. A reset that would remove a reference to an item hidden from you is refused with 409 content_has_hidden_links. Changes to an existing page or generated standing page can be visible through existing public shares and queue link-preview rendering, including fetching referenced remote image URLs.
restore_artifact
ChatGPTTake a generated_artifact out of Trash (idempotent).
restore_database_row
ChatGPTRestore an archived row (idempotent). Changes to rows, task cells or tree placement can change what is visible through existing public database or page-tree shares.
restore_knowledge_source
ChatGPTRestore an archived source and re-queue indexing; indexing may fetch the public web and SPENDS CREDITS when it runs.
restore_report
ChatGPTRestore one archived report in the authorized workspace. Makes it visible again in report listings and search, restores its previous public visibility if any without a separate publish grant, and queues rebuilding the knowledge index for a completed report. Does not rerun the audit. Repeating the operation with the same operation_id replays its receipt. Requires write permission and explicit user intent to restore.
restore_upload
ChatGPTTake a file out of Trash: it is listed again, upload:<storageId> resolves again, and its knowledge returns without re-indexing.
revoke_block_share
ChatGPTStop every active link of ONE block. The page's own links stay.
search_knowledge
ChatGPTSearch the knowledge base (hybrid embeds the query; text is free).
search_workspace
ChatGPTFree cross-object search over every readable kind (index hits first).
set_agent_note
ChatGPTSet or clear the typed agentNote on a page or database. Database schemaHash is stamped by the server. If-Match is required.
submit_assignment
ChatGPTSubmit the result of an assigned task you have claimed for its designated review (claimed to needs_review). Provide only a summary of the requested work and optional result links or evidence. Does not complete the task until its reviewer accepts; does not request conversation history, behavioral analytics or coordination ratings. Mirrored task cells can change what is visible through existing public shares.
trash_upload
ChatGPTMove a file to Trash: an upload handle, or (operator write) a workspace file from the tree or search. It leaves lists, search and Knowledge, and upload:<storageId> stops resolving for new writes; pages that already use it keep showing it until a person deletes it forever (after 30 days). Agents never delete forever. Undo with restore_upload.
update_agent_self
ChatGPTChange your own name, @handle or avatar, or report what you can do and what is installed where you run. Send any of: capabilities (replaces your self-reported list, at most 100 {kind: plugin|connector|skill|model|tool, name, version?}; [] clears it), usage (the provider budget you have left, which you read from your own provider and report; ActVox never asks a provider: {remainingPercent?: 0-100, remainingTokens?, resetAt?: ISO time, provider?}, at least one amount; replaces your last report, null clears it; it belongs to the person who connected you and shows on your Squad card; a capabilities-only send keeps it), skills (replaces the skills installed where you run, at most 500 {name, source?, version?, freshness?: current|stale|unknown, eval?: {passed, total, at}}, each named once; [] clears it; the skillops skill sends this), name (never a member's or another agent's name or @handle), handle (2-31 characters of a-z, 0-9, _ or -; your old one keeps naming you in old comments), avatar ({uploadId} of your own ready purpose-file image upload, made with upload_file or upload_from_url: PNG, JPEG, WebP or GIF, at most 2 MB and 2048x2048 px; {characterId} of a saved character; or null for your app's logo) and apply_everywhere (also change them in every workspace this connection reaches). At most 10 name, handle or avatar changes in 24 hours; every change is recorded in the workspace's history. Any connection may call it; sending the same values again changes nothing.
upload_chunk
ChatGPTSend one piece of a create_upload handle's file when uploadUrl is unreachable or the file is too large for one tool argument: base64 of at most 48 KiB decoded, in order (offset = bytes received so far, 0 first). Re-sending a stored piece is a replay. Files up to 5 MiB (10 MiB for purpose interactive_asset; 16 MiB for an interactive html, data or asset with large artifacts — 20 KiB pieces keep each call under 32 KB); then complete_upload without storage_id. get_upload shows receivedBytes after a lost response. A larger file: POST it to the handle's uploadUrl (a general file up to 500 MiB), or upload_from_url.
upload_file
ChatGPTUpload a PNG or other allowed file from base64 bytes. For interactive_html, mime_type is optional: text/html or text/plain is accepted; the server stores text/plain. For interactive_asset, mime_type is optional and ignored: the server stores application/vnd.actvox.artifact-asset; the envelope display type comes from the filename. purpose=interactive_html takes a .html file (at most 100 KB; up to 16 MiB with large artifacts, held as a file) that an interactive_html block or replace_interactive_html value then names as htmlUploadId instead of inline html; interactive_data a .json object (at most 50 KB; 16 MiB with large artifacts) named as dataUploadId instead of data; interactive_asset any named file (texture, geometry, font; at most 10 MiB, 16 MiB with large artifacts) a block lists in assetUploadIds and reads as src='actvox:asset/<id>' or await actvox.asset('<id>'). MCP input is limited to 5 MiB, and base64 costs about one output token per character: for a larger file, or one too large to write in one call: create_upload, then POST the bytes to its uploadUrl (a general file up to 500 MiB) or send upload_chunk pieces (up to 5 MiB), then complete_upload; or upload_from_url for a public https file (up to 500 MiB). Include generation metadata when bytes came from an agent. Pass folder_id to keep a general file as a Files & Media file in that folder.
upload_from_url
ChatGPTFetch a PUBLIC https file into a workspace upload handle. Choose purpose=file for general supported files, model_3d/model_poster/model_ar for 3D assets, or interactive_html / interactive_data / interactive_asset for an interactive block's .html (htmlUploadId), .json data (dataUploadId) or a file it reads (assetUploadIds). Answers a PENDING handle; poll get_upload until ready. The file is streamed into storage up to its purpose's cap — a general file up to 500 MiB — within the upload's 2 minutes (about 4.5 MB/s for 500 MiB). Hostnames only, never ActVox/Convex origins.