Languages: every operation supports cURL, Node.js (TypeScript), Python, Go, Ruby, and PHP. The first 15 operations on this page show all six languages; the remaining 168 show cURL and TypeScript — the two most-used.
Agents API
Create and manage AI agents, invoke conversations, and retrieve interaction history Base path:/api/v1/agents
Endpoint count: 183
title: “Worked request and response samples” description: “Worked samples for the most-asked agent operations: create an agent with a model and knowledge-base binding, send a user turn, and the error to expect when a knowledge-base id is detached.”
Worked request and response samples
Copy a request body as written, substitute your own ids, and compare the response envelope. Successful writes return{ data, meta }; failures return Devotel Orbit’s { error, meta } envelope, shown once below under Error envelope.
Create an agent
POST /api/v1/agents/name is required. Everything else — type, model, system_prompt, generation settings, tools, knowledge_base_ids — falls back to tenant defaults. Bind the agent to one or more knowledge bases with knowledge_base_ids and it grounds its answers on that content; every id is checked against your workspace at create time.
Request
Converse with the agent
POST /api/v1/agents/{id}/chatmessage is required. Pass the conversationId from a previous reply to keep the thread going — omit it and a new conversation is created for you, its id returned on the response. When the agent grounds an answer on a bound knowledge base, the reply carries matching citations naming the documents it quoted.
Request
Error envelope
Most write failures return422 with the offending field named in message. Creating or updating an agent re-checks every knowledge_base_ids entry against your workspace, so a detached id — one that was deleted, or copied from another tenant — fails fast here instead of silently weakening the agent’s answers.
422
List agents
GET /api/v1/agents/string
Opaque cursor for the next page (from previous response meta.pagination.cursor)
integer
Number of items per page (1–200, default 25)
string
Sort field; prefix with ’-’ for descending (e.g. ‘-created_at’). Defaults to newest first.
string (enum: active|draft|paused|archived)
Filter by agent status
string
Free-text search across the agent name
List eval datasets
GET /api/v1/agents/{agentId}/evals/datasetsrow_count, timestamps) without its rows — fetch a single dataset by id to expand the individual cases. Use this to pick a dataset to launch an eval run against.
string
required
—
integer
Maximum number of datasets to return (1–100, default 50).
Get an eval dataset
GET /api/v1/agents/{agentId}/evals/datasets/{dsId}{ input, expected_output, metadata } case so you can review or edit the golden set. Responds 404 when the dataset does not exist for this agent.
string
required
—
string
required
—
List eval runs
GET /api/v1/agents/{agentId}/evals/runsstatus (pending, running, completed, failed). Use this to track regression history or find a completed run to inspect or compare.
string
required
—
string (enum: pending|running|completed|failed)
Filter runs by lifecycle status.
integer
Maximum number of runs to return (1–100, default 50).
Get an eval run
GET /api/v1/agents/{agentId}/evals/runs/{runId}string
required
—
string
required
—
Compare two eval runs
GET /api/v1/agents/{agentId}/evals/runs/comparerun_a_id vs run_b_id) that share the same dataset, returning each run’s aggregate scores, the overall score and pass-rate deltas, and a per-row diff of scores and outputs. Use this to confirm a prompt or model change improved quality before shipping it. Both runs must belong to this agent and reference the same dataset.
string
required
—
string
required
Baseline run id.
string
required
Candidate run id compared against the baseline.
List fine-tuning jobs
GET /api/v1/agents/{agentId}/fine-tuning/jobsactive_custom_model_id, null when none). Use this to track tuning progress and see which custom model, if any, the agent is running.
string
required
—
List knowledge-base document chunks
GET /api/v1/agents/{agentId}/knowledge-base/{docId}/chunkschunks list with legacy_kb_no_chunks: true.
string
required
—
string
required
—
integer
Opaque page cursor returned as
next_cursor by a previous call.integer
Maximum chunks to return in this page (default 50, capped at 200).
List an agent’s MCP servers
GET /api/v1/agents/{agentId}/mcp-servers(created_at, id). Each entry carries its name, URL, transport, enabled flag, tool-visibility allowlist, and a has_auth_credentials boolean — the stored credentials are never returned over the wire. Use it to review which third-party tool servers an agent can reach.
string
required
—
string
Opaque keyset cursor returned as
pagination.cursor by a previous call.integer
Maximum servers to return in this page (default 100, capped at 200).
List an agent’s memory facts for a contact
GET /api/v1/agents/{agentId}/memorycontact_id), newest first. By default only fact-type entries are returned and any phone/email tokens in the fact bodies are PII-masked; owners, admins, and developers can pass reveal=true to unmask (each reveal is audit-logged). When the contact has opted out of memory the response is an empty list with memory_enabled: false.
string
required
—
string
required
Contact whose stored facts to list.
integer
Maximum facts to return (default 20, capped at 50).
boolean
When true (default) only fact-type entries are returned; false also includes summaries/preferences/goals.
string
Set to “true” to unmask PII in fact bodies (honoured only for owner/admin/developer).
List an agent’s outcome rubrics
GET /api/v1/agents/{agentId}/outcomes/rubricsstring
required
—
Get outcome pass-rate stats
GET /api/v1/agents/{agentId}/outcomes/statsdays query parameter.
string
required
—
integer
—
Get agent quality scorecard
GET /api/v1/agents/{agentId}/quality-scorecardwindow and min_sample to tune.
string
required
—
integer
—
integer
—
Get a studio graph
GET /api/v1/agents/{agentId}/studio/graphs/{graphId}graph_json (nodes and edges), lifecycle status (draft, staging, published, or archived), version, and timestamps. Use it to load a graph into the studio canvas. Returns 404 when the graph does not exist for that agent.
string
required
—
string
required
—
Get a studio graph run
GET /api/v1/agents/{agentId}/studio/graphs/{graphId}/runs/{runId}string
required
—
string
required
—
string
required
—
Get an agent
GET /api/v1/agents/{id}string
required
—
Get an agent’s public A2A Agent Card
GET /api/v1/agents/{id}/.well-known/agent-card.jsonstring
required
—
Get an agent’s public A2A Agent Card (legacy path)
GET /api/v1/agents/{id}/.well-known/agent.jsonstring
required
—
Get an agent’s A2A card and shareable endpoint
GET /api/v1/agents/{id}/a2a/cardstring
required
—
List an agent’s A2A peers
GET /api/v1/agents/{id}/a2a/peersstring
required
—
List an agent’s A2A tasks
GET /api/v1/agents/{id}/a2a/tasksstring
required
—
Get an A2A task by id
GET /api/v1/agents/{id}/a2a/tasks/{taskId}string
required
—
string
required
—
Get A/B experiment lift attribution
GET /api/v1/agents/{id}/ab/{expId}/liftstring
required
Identifier of the agent running the experiment.
string
required
Identifier of the experiment to report lift for.
Fetch the agent’s active A/B experiment
GET /api/v1/agents/{id}/active-experimentdata payload when no experiment is active (or a referenced version was deleted), so the runtime falls back to the agent’s live configuration. Used by the agent runtime; authenticated with an internal service token.
string
required
Identifier of the agent whose active experiment to fetch.
Get aggregated analytics for an agent
GET /api/v1/agents/{id}/analyticsstring
required
Identifier of the agent to report analytics for.
Get First Contact Resolution analytics
GET /api/v1/agents/{id}/analytics/fcrstring
required
Identifier of the agent to report FCR analytics for.
integer (enum: 7|30|90)
Rolling window length in days (7, 30, or 90).
integer
Maximum number of topics to cluster (1-20).
List an agent’s conversations
GET /api/v1/agents/{id}/conversationsq to search conversation content. Powers the agent’s conversation-history tab; a not-yet-provisioned tenant returns an empty page rather than an error.
string
required
Identifier of the agent whose conversations to list.
integer
Maximum number of conversations to return per page.
string
Opaque pagination cursor from a previous response.
string
Optional case-insensitive substring to search conversation content (max 200 chars).
List messages in an agent conversation
GET /api/v1/agents/{id}/conversations/{conversationId}/messagesstring
required
Identifier of the agent that owns the conversation.
string
required
Identifier of the conversation to read messages from.
integer
Maximum number of messages to return (1-200, default 50).
Export an agent’s conversations as CSV
GET /api/v1/agents/{id}/conversations/exportstring
required
Identifier of the agent whose conversations to export.
Resolve an agent’s conversation cost cap
GET /api/v1/agents/{id}/cost-capcap_cents of null means unbounded, and source reports which layer set the value. The agent runtime reads this before every chat turn; authenticated with an internal service token.
string
required
Identifier of the agent whose cost cap to resolve.
List agent A/B experiments
GET /api/v1/agents/{id}/experimentsstring
required
Agent identifier (Devotel agent_xxx id).
string (enum: active|ended|all)
Filter by experiment state (default all).
integer
Maximum number of experiments to return (1–200, default 50).
Get A/B experiment detail
GET /api/v1/agents/{id}/experiments/{expId}string
required
Agent identifier (Devotel agent_xxx id).
string
required
Experiment id.
List an agent’s handoff events
GET /api/v1/agents/{id}/handoffsconversation_id query param to narrow the list to a single conversation. Powers the handoff divider chip in the conversation viewer.
string
required
Identifier of the agent whose handoff events to list.
string
Restrict the list to handoffs that occurred within this conversation.
integer
Maximum number of handoff events to return (1–100, default 50).
List recent agent handoffs
GET /api/v1/agents/{id}/handoffs/recentstring
required
Agent identifier (Devotel agent_xxx id).
integer
Maximum number of handoff rows to return (1–100, default 25).
List an agent’s prompt version history
GET /api/v1/agents/{id}/prompt-historystring
required
Agent identifier (Devotel agent_xxx id).
integer
Number of versions per page (1–200, default 50).
integer
Return versions with version_number below this value (for paging).
string
Restrict to a single branch name.
Get an agent’s invocation rate limits and live usage
GET /api/v1/agents/{id}/rate-limitsmax_requests_per_minute, daily_quota, monthly_quota and per-caller rpm_per_caller, invocation_quota_per_caller_per_day — together with live usage counters. For every axis, null means unlimited and 0 blocks all invocations. Pass caller_id to also include that caller’s live per-caller usage and remaining headroom (the caller identity is opaque here — the caller number on voice, or the widget session’s contact id on chat). Requires the owner or admin role.
string
required
Identifier of the agent whose rate limits to resolve.
string
Optional caller/end-user identity to also report live per-caller usage and remaining headroom for.
List an agent’s saved regression tests
GET /api/v1/agents/{id}/regression-testsstring
required
Identifier of the agent whose tests to list.
Compare a shadow agent against production
GET /api/v1/agents/{id}/shadow-comparisonstring
required
Identifier of the shadow agent to inspect.
integer
Inclusive look-back window in days (default 7).
integer
Maximum number of comparison logs to return (1-200, default 50).
Look up the squad an agent classifies
GET /api/v1/agents/{id}/squaddata payload when the agent does not front a squad. The agent runtime calls this on each inbound turn to decide whether to run squad routing before invoking the executor.
string
required
Identifier of the agent to test for squad membership.
List an agent’s recent tool calls
GET /api/v1/agents/{id}/tool-historyconversationId filter. Each row records the tool name, inputs, and outputs (PII-redacted at write time) so operators can audit what the agent actually did. Requires owner, admin, or developer role.
string
required
Identifier of the agent whose tool history to read.
string
Opaque cursor from a prior page.
integer
Maximum rows to return (1-200, default 50).
string
Restrict the history to a single conversation thread.
List an agent’s prompt versions
GET /api/v1/agents/{id}/versionsstring
required
Identifier of the agent whose versions to list.
integer
Return versions with a version_number below this value (pagination cursor).
string
Narrow the list to a single experiment branch.
Diff two agent prompt versions
GET /api/v1/agents/{id}/versions/{vid}/diffagainst query param to prev (the immediately preceding version, the default), live (the agent’s current live config), or another version id on the same agent. Powers the compare-versions view; the first version returns an all-unchanged diff with against: null.
string
required
Identifier of the agent whose versions to diff.
string
required
Identifier of the source version (the path side of the diff).
string
Comparison target:
prev, live, or another version id on the same agent.Get an agent’s voice runtime config
GET /api/v1/agents/{id}/voice-configstring
required
Identifier of the agent whose voice config to fetch.
Export the AI-turn audit log
GET /api/v1/agents/ai-turn-auditagentId, conversationId, and a from/to date range, then page by cursor until next_cursor is null. Because it surfaces the entire tenant’s decision history verbatim, this route requires an owner or admin role (stricter than the per-conversation view).
integer
Maximum number of audit rows to return (1–200, default 50).
string
Opaque pagination cursor from a previous response.
string
Restrict the export to rows produced by this agent.
string
Restrict the export to rows within this conversation.
string
ISO-8601 lower bound (inclusive) on the row timestamp.
string
ISO-8601 upper bound (exclusive) on the row timestamp.
List all agent conversations
GET /api/v1/agents/conversationsagent_id, status (active, closed, archived), a from/to date range, and the classifier-derived sentiment (positive, negative, neutral) or intent. This powers the supervisor conversation-history board. Requires an owner or admin role (the supervisor seat is also admitted).
integer
Maximum number of conversations to return per page.
string
Opaque pagination cursor from a previous response.
string
Restrict the list to conversations handled by this agent.
string (enum: active|closed|archived)
Filter conversations by lifecycle status.
string
Only include conversations started at or after this timestamp.
string
Only include conversations started before this timestamp.
string (enum: positive|negative|neutral)
Filter by the classifier-derived sentiment label.
string
Filter by the classifier-derived primary intent/topic.
Get an agent conversation
GET /api/v1/agents/conversations/{conversationId}string
required
Identifier of the agent conversation to fetch.
Get a conversation’s AI-turn audit log
GET /api/v1/agents/conversations/{conversationId}/ai-turn-auditfrom/to date range. This is a supervisor-level compliance surface (the full prompt text is included verbatim) and requires an owner, admin, or developer role.
string
required
Identifier of the agent conversation to export the audit trail for.
integer
Maximum number of audit rows to return (1–200, default 50).
string
Opaque pagination cursor from a previous response.
string
ISO-8601 lower bound (inclusive) on the row timestamp.
string
ISO-8601 upper bound (exclusive) on the row timestamp.
Get an agent conversation’s debug log
GET /api/v1/agents/conversations/{conversationId}/debug-logcursor. Requires an owner, admin, or developer role.
string
required
Agent conversation identifier.
integer
Maximum number of turns to return (1–500).
string
Opaque pagination cursor returned as meta.pagination.cursor by the previous page.
List handoffs within an agent conversation
GET /api/v1/agents/conversations/{conversationId}/handoffsstring
required
Agent conversation identifier.
Get outcome scores for a conversation
GET /api/v1/agents/conversations/{conversationId}/outcomesstring
required
Agent conversation identifier.
List supervisor notes for a conversation
GET /api/v1/agents/conversations/{conversationId}/supervisor-notesstring
required
Agent conversation identifier.
List live agent conversations
GET /api/v1/agents/conversations/liveList a tenant’s connected CRM providers
GET /api/v1/agents/crm-tools/internal/active-providersList custom agent tools
GET /api/v1/agents/custom-toolsexecutor_secret_set reports only whether one is configured.
Get a custom tool
GET /api/v1/agents/custom-tools/{id}executor_secret_set reports only whether one is configured. Use this to populate the custom-tool builder/edit UI.
string
required
—
List enabled custom tools (internal)
GET /api/v1/agents/custom-tools/internal/listList knowledge-base coverage gaps
GET /api/v1/agents/knowledge-bases/{id}/gapsstring
required
Identifier of the knowledge base to analyse.
integer
Look-back window in days (1–180, default 30).
integer
Maximum number of gap clusters to return (1–50, default 10).
string
Narrow the analysis to a single agent linked to the KB.
Get the org’s BYO LLM inference credential config
GET /api/v1/agents/llm-provider-credentialagents:read.
Browse the agent template marketplace
GET /api/v1/agents/marketplacestring
Filter to a single template category.
string
Return only templates that support this channel.
string
Case-insensitive match on name, description, or tags.
boolean
When true, return only featured templates.
integer
Maximum number of templates to return (1–100, default 50).
Get a marketplace template
GET /api/v1/agents/marketplace/{slug}string
required
Slug of the marketplace template to fetch.
List templates pending moderation
GET /api/v1/agents/marketplace/pendinginteger
Maximum number of pending templates to return (1–100, default 50).
List an agent’s MCP servers (internal)
GET /api/v1/agents/mcp-servers/internal/liststring
required
Agent whose enabled MCP servers should be returned.
List customer memory entries
GET /api/v1/agents/memorycursor. Entries are returned newest-first with PII in content masked unless an operator passes ?reveal=true.
string
Only return entries about this contact.
string
Only return entries learned by this agent.
string (enum: summary|fact|preference|goal)
Only return entries of this memory type.
string
Earliest createdAt (inclusive), ISO-8601.
string
Latest createdAt (inclusive), ISO-8601.
string
Opaque pagination cursor returned as
next_cursor on the previous page.integer
Max entries per page (1..200, default 50).
Get a customer memory entry
GET /api/v1/agents/memory/{id}?reveal=true as an owner/admin/developer), its memory type, importance weight, and scoping. Use it to inspect a row surfaced in the Customer Memory dashboard.
string
required
Memory entry id.
List curated voice-agent model presets
GET /api/v1/agents/model-presetsRetrieve a single model preset detail
GET /api/v1/agents/model-presets/{id}balanced, high_intelligence, ultra_fast, cost_saver), including its model/transcriber/voice bundle and latency/cost/quality metrics. Returns 404 when the id is not a known preset.
string
required
—
List available agent models
GET /api/v1/agents/modelsList org-scoped outcome rubrics
GET /api/v1/agents/outcomes/rubricsscope (inbox, voice, org, or all) and paginate with limit and a cursor. Returns the rubrics plus a next_cursor for the following page.
string (enum: inbox|voice|org|all)
Scope filter;
all returns inbox + voice + org rubrics.integer
—
string
Opaque cursor from a previous page’s
next_cursor.Resolve the agent for a phone number
GET /api/v1/agents/resolve-by-numberphone_number query param; the voice gateway calls this on each inbound to select the agent to run. Returns 404 when no agent is mapped to the number.
string
required
Destination phone number in E.164 format (e.g. +14155551234).
List agent squads
GET /api/v1/agents/squads/Retrieve a squad by ID
GET /api/v1/agents/squads/{id}string
required
—
List all available agent templates
GET /api/v1/agents/templatesRetrieve a single template detail
GET /api/v1/agents/templates/{id}string
required
—
List tool approval requests
GET /api/v1/agents/tool-approvals/List available tools for agents
GET /api/v1/agents/toolsRetrieve a golden set with test cases
GET /api/v1/agents/voice-eval/golden-sets/{id}string
required
—
List voice evaluation runs
GET /api/v1/agents/voice-eval/runsstring
Filter by agent ID
string
Filter by golden set ID
string
Filter by run status (e.g., pending, completed, failed)
string
Filter runs created on or after this ISO 8601 timestamp
string
Filter runs created on or before this ISO 8601 timestamp
string
Opaque cursor for pagination (from next_cursor in previous response)
integer
Number of runs to return per page
Retrieve voice evaluation run details
GET /api/v1/agents/voice-eval/runs/{id}string
required
The voice evaluation run ID
Compare run against baseline for regressions
GET /api/v1/agents/voice-eval/runs/{id}/regression-deltastring
required
The voice evaluation run ID to compare against baseline
Create an agent
POST /api/v1/agents/name is required; type, model, system_prompt, generation settings (temperature, max_tokens), and tools are optional and fall back to tenant defaults. Use this to provision a chatbot, voice, router, or workflow agent before wiring it to a channel or phone number. The agent is created in draft status unless status is supplied.
string
required
—
string
—
string (enum: custom|chatbot|router|voice|workflow)
—
string (enum: draft|active|paused|archived)
—
string
—
string
—
number
—
integer
—
Create an eval dataset
POST /api/v1/agents/{agentId}/evals/datasets{ input, expected_output } case the LLM judge scores an eval run against. A dataset must have between 1 and 1000 rows. Use this to codify the prompts and reference answers you want to regression-test the agent against before creating a run.
string
required
—
string
required
—
string
—
object[]
required
—
Start an eval run
POST /api/v1/agents/{agentId}/evals/runsdataset_id, a rubric_name (correctness, helpfulness, safety, groundedness, or custom), and optionally a rubric_prompt (required for custom), a Claude judge_model, and a pass threshold (0–100). The run is enqueued and returns immediately with status pending; poll the run by id for scored results.
string
required
—
string
required
—
string (enum: correctness|helpfulness|safety|groundedness|custom)
required
—
string
Required when
rubric_name is custom.string
Claude model id for the judge. Defaults to the agent’s judge model.
integer
—
Create a fine-tuning job
POST /api/v1/agents/{agentId}/fine-tuning/jobsprovider (openai, anthropic, or hf), the base_model being tuned, and the eval_run_id; Orbit tracks the job’s lifecycle but never runs the tuning itself — you fine-tune on your own provider account. Optionally record an upstream provider_job_id. The eval run must exist for this agent.
string
required
—
string (enum: openai|anthropic|hf)
required
—
string
required
—
string
required
—
string (enum: openai|anthropic|hf)
—
string
Optional external job id if you already submitted upstream.
Deploy a fine-tuned model to an agent
POST /api/v1/agents/{agentId}/fine-tuning/models/{modelId}/deployactive_custom_model_id. Use the paired DELETE on this path to revert the agent to its base model.
string
required
—
string
required
—
Re-chunk a knowledge-base document
POST /api/v1/agents/{agentId}/knowledge-base/{docId}/rechunkchunk_size / chunk_overlap, rebuilding its chunks and embeddings and bumping the document version so any in-flight test query can detect that its results are now stale. Runs synchronously and returns once the chunks have been rewritten. chunk_overlap must be smaller than chunk_size. Requires an operator role (owner, admin, or developer).
string
required
—
string
required
—
integer
New target chunk size in tokens. Defaults to the tenant setting when omitted.
integer
New chunk overlap in tokens; must be smaller than chunk_size.
Test a knowledge-base document query
POST /api/v1/agents/{agentId}/knowledge-base/{docId}/test-querystring
required
—
string
required
—
string
required
The natural-language query to run against the document.
integer
Top-K chunks to return.
number
Minimum similarity score for a chunk to be included.
boolean
Whether to also synthesize an answer from the retrieved chunks.
Register an MCP server for an agent
POST /api/v1/agents/{agentId}/mcp-serversname, an https:// server_url, and server_type: http_sse, optionally with a static bearer credential or an OAuth2 grant (mutually exclusive) and a tool_allowlist that scopes which tools are exposed. The URL is SSRF-validated and any credentials are encrypted at rest. Requires an operator role (owner, admin, or developer).
string
required
—
string
required
Human-readable label, unique per agent.
string
required
HTTPS URL of the MCP server (SSE transport).
string (enum: http_sse)
required
Transport type; only http_sse is supported.
string
Optional static bearer token / API key, stored encrypted. Mutually exclusive with oauth2.
string[]
Optional allowlist of tool names to expose. Absent = expose all; [] = expose none.
object
Optional free-form metadata.
boolean
Whether the server is active. Defaults to true.
Teach an agent a fact about a contact
POST /api/v1/agents/{agentId}/memorycontact_id and the free-text fact; control characters are stripped and a per-tenant facts-per-contact cap is enforced (a 409 is returned when the contact is already at the cap or has opted out). Requires an operator role (owner, admin, or developer).
string
required
—
string
required
Contact the fact is about.
string
required
The free-text fact body to remember.
string (enum: manual|conversation)
Where the fact originated; drives the dashboard badge.
number
Optional importance weight (0..1). Defaults to 0.9 for manual teaches.
Create an agent outcome rubric
POST /api/v1/agents/{agentId}/outcomes/rubricscriteria_md that an LLM judge applies to grade conversations, an optional custom evaluator_prompt, and an optional scope. A maximum of 20 rubrics per agent is enforced. Requires the agents:write scope and an operator role (owner, admin, or developer).
string
required
—
string
required
Display name for the rubric.
string
required
Markdown success criteria the LLM judge grades against.
string
Optional custom judge system prompt. Omit (or pass “default”) to use the built-in prompt.
string (enum: agent|inbox|voice|org)
Which conversations the rubric applies to. Defaults to agent.
Save a studio graph draft
POST /api/v1/agents/{agentId}/studio/graphsname and a graph_json object of nodes and edges describing the visual flow (start, LLM, tool, condition, response, and voice nodes). Use it to persist canvas edits before staging and publishing. The graph JSON payload is capped at 1 MB.
string
required
—
string
required
—
object
required
—
Publish a studio graph
POST /api/v1/agents/{agentId}/studio/graphs/{graphId}/publishstaging and pass structure validation (a single start node, at least one terminal node, no dangling edges or cycles); optional per-agent eval gates can additionally block a publish that regresses quality. This request takes no body.
string
required
—
string
required
—
Stage a studio graph
POST /api/v1/agents/{agentId}/studio/graphs/{graphId}/stagedraft can be staged; staging a graph in any other state returns 409. This request takes no body.
string
required
—
string
required
—
Test-run a studio graph
POST /api/v1/agents/{agentId}/studio/graphs/{graphId}/test-runstring
required
—
string
required
—
string
required
—
Invoke an agent over the A2A JSON-RPC endpoint
POST /api/v1/agents/{id}/a2astring
required
—
Add an A2A peer to an agent
POST /api/v1/agents/{id}/a2a/peersstring
required
—
Create an inbound A2A task
POST /api/v1/agents/{id}/a2a/tasksstring
required
—
Delegate a task to a remote A2A peer
POST /api/v1/agents/{id}/a2a/tasks/outboundstring
required
—
Resolve a sticky A/B variant assignment
POST /api/v1/agents/{id}/ab-assignmentsdry_run: true to preview the would-be variant without persisting. Requires the owner, admin, or developer role.
string
required
Identifier of the agent running the experiment.
string
required
Identifier of the contact to assign a variant to.
string
Optional conversation this assignment belongs to.
boolean
When true, return the would-be variant without persisting.
Record an A/B assignment conversion event
POST /api/v1/agents/{id}/ab-assignments/{assignmentId}/conversionstring
required
Identifier of the agent running the experiment.
string
required
Identifier of the A/B assignment to record the event against.
string (enum: reply_received|goal_completion|human_handoff_avoided|escalated)
required
The conversion signal to record.
string
Optional context for the audit trail.
Send a chat message to an agent
POST /api/v1/agents/{id}/chat{ data: { response, conversation_id, tokens_used }, meta }. Use POST /chat/stream for incremental token streaming.
string
required
Agent identifier (Devotel agent_xxx id). Path also accepts the alias :agentId for back-compat.
string
required
User message to send to the agent.
object[]
Optional conversation history to seed the agent (additive on top of any persisted state).
string
Existing conversation id to append onto. When omitted, a new conversation is created.
Stream a chat response from an agent (SSE)
POST /api/v1/agents/{id}/chat/streamdata: {token}) or a terminal payload (data: {final, conversation_id}). The connection persists until the agent completes or the rate-limit window is exhausted (20/min per tenant).
string
required
Agent identifier.
string
required
User message to send to the agent.
object[]
Optional conversation history to seed the agent (additive on top of any persisted state).
string
Existing conversation id to append onto. When omitted, a new conversation is created.
Persist an agent conversation turn
POST /api/v1/agents/{id}/conversationsescalated: true with a reason to fire the configured human-handoff action. Authenticated with an internal service token, not a public API key.
string
required
Identifier of the agent that handled the conversation.
string
required
Stable identifier for the conversation being persisted.
object[]
required
Ordered message log for the conversation.
integer
—
string
Channel the conversation ran on (defaults to “api”).
boolean
Set true when the turn tripped an escalation trigger.
string
—
string
—
Deploy an agent to a channel
POST /api/v1/agents/{id}/deploystring
required
Identifier of the agent to deploy.
string (enum: webhook|sms|whatsapp|voice|rcs)
required
Channel to deploy the agent on.
string
Destination URL for the webhook channel.
string
Phone number to bind for messaging or voice channels.
Dry-run an agent against a scripted scenario
POST /api/v1/agents/{id}/dry-runstring
required
Agent identifier (Devotel agent_xxx id).
object
required
—
boolean
Mock mutative tools during the run. Defaults to true.
Duplicate an agent
POST /api/v1/agents/{id}/duplicatestring
required
Identifier of the source agent to duplicate.
string
Optional name for the new agent. Defaults to the source agent name suffixed with (copy).
Start an agent A/B experiment
POST /api/v1/agents/{id}/experimentsstring
required
Agent identifier (Devotel agent_xxx id).
string
required
Human-readable experiment name.
string
required
Prompt version id for the control arm (A).
string
required
Prompt version id for the treatment arm (B). Must differ from A.
integer
Percentage of new contacts routed to variant B (1–99, default 50).
string (enum: reply_received|goal_completion|human_handoff_avoided)
required
The single outcome the experiment optimises for.
End an agent A/B experiment
POST /api/v1/agents/{id}/experiments/{expId}/endstring
required
Agent identifier (Devotel agent_xxx id).
string
required
Experiment id.
string (enum: a|b|tie)
Descriptive winner stamp. Does not promote anything.
string
Optional note recorded on the audit trail.
Promote an A/B experiment winner
POST /api/v1/agents/{id}/experiments/{expId}/promote-winnerstring
required
Agent identifier (Devotel agent_xxx id).
string
required
Experiment id.
string (enum: a|b)
required
Which variant to promote onto the live agent.
string
Optional note recorded on the audit trail.
Search an agent’s knowledge bases
POST /api/v1/agents/{id}/kb-searchstring
required
Agent identifier (Devotel agent_xxx id).
string
required
Natural-language search query.
string[]
required
Knowledge base ids to search. Each must be linked to this agent.
integer
Maximum number of merged results to return (1–20, default 5).
Roll an agent back to a prompt version
POST /api/v1/agents/{id}/prompt-rollback/{vid}string
required
Agent identifier (Devotel agent_xxx id).
string
required
Prompt version id to roll back to.
string
Optional note recorded on the audit trail for this rollback.
Save a regression test for an agent
POST /api/v1/agents/{id}/regression-testsexpected_outputs (contains, contains_any, excludes, or verbatim). The test is replayed whenever the prompt, model, or tools change to prove the agent still passes. Requires owner, admin, or developer role.
string
required
Identifier of the agent the test belongs to.
string
required
Human-readable name for the saved test.
string
Optional note describing what the test covers.
object[]
required
The saved conversation turns to replay.
object
Declarative assertions the replayed reply must satisfy.
Run all of an agent’s regression tests
POST /api/v1/agents/{id}/regression-tests/run-allstring
required
Identifier of the agent whose tests to replay.
Configure or clear an agent’s shadow target
POST /api/v1/agents/{id}/shadowshadow_of_agent_id to place the agent in shadow mode, so the runtime side-channels each production run and records a comparison log; set it to null to stop shadowing. Self-shadowing and shadow cycles are rejected. Requires owner, admin, or developer role.
string
required
Identifier of the agent to place in (or remove from) shadow mode.
string
required
Production agent to shadow, or null to clear shadow mode.
Promote a shadow agent to production
POST /api/v1/agents/{id}/shadow/promotestring
required
Identifier of the shadow agent being promoted.
boolean
Set true to proceed when the shadow diverged from production by more than 25 percent.
Stream an agent reply word by word (SSE)
POST /api/v1/agents/{id}/streamtext/event-stream: token events carry incremental text, a terminal done event carries totalTokens, costCents, and conversationId, and an error event carries a code and message. Use this for a typing-indicator experience when the SDK expects a streaming method. Rate limited to 20 requests per minute per tenant.
string
required
Identifier of the agent to converse with.
string
required
User message to send to the agent.
string
Existing conversation id to append onto; omit to start a new conversation.
object[]
Optional prior turns to seed the agent, additive on top of any persisted state.
Take an agent offline
POST /api/v1/agents/{id}/undeploystring
required
Identifier of the agent to take offline.
Save a new agent prompt version
POST /api/v1/agents/{id}/versionsnote, a human-readable label, or a branch name to start an experiment line. Requires an owner, admin, or developer role.
string
required
Identifier of the agent to checkpoint.
string
Optional note describing what changed in this checkpoint.
string
Optional branch label to start or continue an experiment line.
string
Optional human-readable bookmark for this version (e.g. “before Black Friday tweak”).
Branch an agent prompt version
POST /api/v1/agents/{id}/versions/{vid}/branchbranch label, and points its parent at the source. The live agent is not touched — a branch is a pre-promote draft you iterate on and later promote to go live. Requires an owner, admin, or developer role.
string
required
Identifier of the agent to branch a version for.
string
required
Identifier of the source version to fork from.
string
required
Label for the new experiment branch.
string
Optional note describing the branch.
Promote an agent prompt version
POST /api/v1/agents/{id}/versions/{vid}/promotestring
required
Identifier of the agent to promote a version for.
string
required
Identifier of the version to make live.
boolean
Records whether the operator confirmed the promotion in the UI diff dialog.
string
Optional note describing why the version was promoted.
Issue an agent authorization mandate
POST /api/v1/agents/agent-authorization-mandateactive status carrying a SHA-256 consentDigest over its immutable scope; the response is a serializable snapshot the caller stores and round-trips in each subsequent request. This is the general-purpose sibling of the payment-scoped commerce mandate. Requires the agents:write scope and an owner, admin, or developer role. This surface only decides whether an action is within a mandate — the action itself still exits through the caller’s own rails.
string
required
Opaque, caller-supplied mandate id.
string
required
The agent authorized to act (an Orbit agent id or an external A2A/MCP identity).
string
required
The principal granting consent.
array | null
Action allowlist. Omit or send empty for “any action”.
array | null
Tool allowlist. Omit or send empty for “any tool”.
array | null
Data-category allowlist. Omit or send empty for “any category”.
integer
required
Cumulative action ceiling (a positive integer).
integer | null
Epoch-ms expiry (must be in the future), or null for no expiry.
Authorize and commit an action against a mandate
POST /api/v1/agents/agent-authorization-mandate/actinvocationCount incremented, flipped to exhausted once the cap is reached) plus the authorization decision. An action outside the mandate is rejected with VALIDATION_ERROR (surfaced as 422 with the deny reason), so a caller can never act past consent. Requires the agents:write scope and an owner, admin, or developer role. The committed action is audit-logged.
any
required
—
any
required
—
Authorize and commit a delegated action
POST /api/v1/agents/agent-authorization-mandate/act-chainVALIDATION_ERROR (422) when the ancestry doesn’t hold — a revoked, expired, exhausted, or tampered hop anywhere in the lineage, or a scope that isn’t a genuine attenuation — or when the leaf action is out of scope. Requires the agents:write scope and an owner, admin, or developer role. Audit-logged with the chain depth and root/parent mandate ids.
any[]
required
The full delegation chain, ordered
[root, ..., leaf].any
required
—
Reconstruct and verify a delegation chain (audit)
POST /api/v1/agents/agent-authorization-mandate/audit-chainany[]
required
The full delegation chain to audit, ordered
[root, ..., leaf].Authorize an action against a mandate (dry-run)
POST /api/v1/agents/agent-authorization-mandate/authorizeauthorized is true only when every check passes. Read-only — never mutates the mandate.
any
required
—
any
required
—
Authorize a delegated action against its full chain (dry-run)
POST /api/v1/agents/agent-authorization-mandate/authorize-chain[root, ..., leaf] ancestry back to the principal’s root mandate — re-verifying every hop’s integrity, terminal status, expiry, ancestry link, and attenuation — then evaluates the leaf’s own scope. A revoked, expired, or exhausted mandate ANYWHERE in the lineage denies the action. No state change. chain is ordered root-first, leaf-last (the leaf is the mandate the acting agent presents).
any[]
required
The full delegation chain, ordered
[root, ..., leaf].any
required
—
Delegate an attenuated sub-agent mandate
POST /api/v1/agents/agent-authorization-mandate/delegateparent for an agent-as-tool / A2A re-delegation hop (orchestrator → sub-agent, or transitively sub-agent → sub-sub-agent). The child’s allowlists, invocation cap, and expiry are each narrowed to a subset of the parent’s — a delegated mandate can never end up with more authority than it was given — and it carries a parentMandateId + parentDigest pointer baked into its own consent digest so the ancestry link cannot be forged or repointed. Delegation is refused from a parent that is revoked, expired, exhausted, or fails its own integrity check. Requires the agents:write scope and an owner, admin, or developer role. Audit-logged.
any
required
—
string
required
Opaque, caller-supplied id for the new child mandate.
string
required
The sub-agent receiving the delegated authority.
array | null
Action allowlist to further narrow to. Omit or send empty to inherit the parent’s unchanged.
array | null
Tool allowlist to further narrow to. Omit or send empty to inherit the parent’s unchanged.
array | null
Data-category allowlist to further narrow to. Omit or send empty to inherit the parent’s unchanged.
integer | null
Invocation cap to further narrow to. Omit to inherit the parent’s cap; the effective cap is the minimum of this and the parent’s, never higher.
integer | null
Expiry to further narrow to. Omit to inherit the parent’s expiry; the effective expiry is the earlier of this and the parent’s, never later.
Revoke an agent authorization mandate
POST /api/v1/agents/agent-authorization-mandate/revokerevoked status so no further action is authorized under it (and, via the chain endpoints, none under any mandate delegated from it). Returns the revoked mandate snapshot. Re-revoking an already-revoked mandate is a VALIDATION_ERROR. Requires the agents:write scope and an owner, admin, or developer role. Audit-logged.
any
required
—
Verify a mandate’s consent digest (tamper-evidence)
POST /api/v1/agents/agent-authorization-mandate/verifyconsentDigest. intact: false means a scoped field (an allowlist, the cap, the principal/agent, the expiry, or the ancestry pointer) was altered after consent was recorded — tamper-evidence for auditors. Read-only — never mutates the mandate.
any
required
—
Record a human override on an AI turn
POST /api/v1/agents/ai-turn-audit/{auditId}/overridestring
required
Identifier (UUID) of the AI-turn audit row to override.
string
required
Why the human contested the AI decision.
Record an agent calendar event
POST /api/v1/agents/calendar-eventscreate_calendar_event tool during a conversation and fire the agent.calendar_event.created webhook so your Google Calendar or Outlook integration can pick it up. Use it to let an agent book meetings or appointments on the customer’s behalf and sync them to your own calendar of record.
string
required
Stable identifier for the event (used for idempotency and webhook correlation).
string
required
Event title.
string
Optional event description.
string
required
Event start time (ISO-8601).
string
Optional event end time (ISO-8601).
string
Optional attendee email address.
string
Conversation the event was booked from.
Escalate an agent conversation to a human
POST /api/v1/agents/conversations/{conversationId}/escalatestring
required
Agent conversation identifier.
string
Free-text reason shown to the operator who receives the handoff.
string (enum: cant_understand|policy_block|customer_request|tool_failed|escalation_threshold|manual)
Machine-readable handoff category for analytics. Inferred from the reason when omitted.
Check an agent conversation for a loop
POST /api/v1/agents/conversations/{conversationId}/loop-checkstring
required
Agent conversation identifier.
integer
How many recent turns to inspect.
number
Similarity above which two customer turns count as a re-ask.
number
Sentiment below which the window is treated as negative.
integer
Minimum customer turns required before a loop can be flagged.
Send a supervisor note to an agent
POST /api/v1/agents/conversations/{conversationId}/supervisor-notesstring
required
Agent conversation identifier.
string
required
The guidance the agent should apply on its next turn.
Dispatch a CRM agent tool action
POST /api/v1/agents/crm-tools/internal/dispatchok: false and a safe message the agent can read and react to, never as an HTTP error. Internal service-to-service endpoint, authenticated with the runtime internal token.
string (enum: hubspot|salesforce|zendesk|calendly|intercom)
required
CRM provider the action belongs to.
string
required
Registered CRM tool action to run for the provider (e.g. hubspot_create_contact).
object
Action arguments the model produced. Defaults to an empty object.
string
Optional agent identifier, recorded for audit logging.
string
Optional agent-run identifier, recorded for audit logging.
string
Optional conversation the tool call belongs to.
Create a custom agent tool
POST /api/v1/agents/custom-toolsname, a description the model reads to decide when to call it, an optional JSON-Schema for the tool’s parameters, and the HTTPS executor_url Orbit POSTs to when an agent invokes the tool. An optional executor_secret is stored encrypted and used to HMAC-sign each dispatch. Names that collide with a built-in tool are rejected, and the executor URL is SSRF-checked at write time. Requires an owner, admin, or developer role.
string
required
Lowercase snake_case identifier the model calls (e.g. lookup_order).
string
required
What the tool does — the model reads this to decide when to call it.
object
JSON-Schema for the tool’s parameters (max 32KB serialized).
string
required
HTTPS endpoint Orbit POSTs to when an agent invokes the tool.
string
Optional secret, stored encrypted, used to HMAC-sign each dispatch.
boolean
—
integer
Per-call timeout in milliseconds.
string
Whether the tool call requires operator approval before it runs.
Fire a sample request against a custom tool’s executor
POST /api/v1/agents/custom-tools/{id}/testargs, returning the live response, status, latency, and any configured spoken message — without ever persisting the call. Supports override_executor_url / override_executor_secret / override_timeout_ms so a not-yet-saved tool can be tried before it is created or patched.
string
required
—
object
Sample arguments matching the tool’s JSON-Schema, forwarded to the executor.
string
Test against this URL instead of the tool’s saved executor_url.
string
Test with this HMAC secret instead of the tool’s saved (encrypted) one.
integer
—
Dispatch a custom tool call (internal)
POST /api/v1/agents/custom-tools/internal/dispatchstring
required
Slug of the custom tool the model selected.
object
Arguments the model produced, matching the tool’s JSON-Schema.
string
required
—
string
required
—
string
—
Mark a phone or email as Do-Not-Call/Contact
POST /api/v1/agents/dncmark_dnc tool during a conversation. Adds the phone number or email to your suppression list — and, for voice and SMS, to your Do-Not-Call list — then marks any matching contact as Do-Not-Contact so it is excluded from the next campaign audience, and fires the agent.dnc.marked webhook. Idempotent — repeating the call for an already-suppressed address returns success without creating duplicates or re-firing the webhook. Requires at least one of phone or email.
string
E.164 phone number (e.g. +14155551234). At least one of phone/email is required.
string
—
string
Which channel(s) the suppression applies to. Defaults to all.
string
—
string
—
Generate a draft agent from a plain-English prompt
POST /api/v1/agents/from-prompt/status: draft and must be reviewed and promoted via POST /from-prompt/{draftId}/activate before it goes live. Rate-limited per organization.
string
required
Plain-English description of the agent to generate.
Promote a generated draft agent to active
POST /api/v1/agents/from-prompt/{draftId}/activatePOST /from-prompt (or /from-prompt/stream) to status: active so it can start handling real conversations. Fails with 409 if the agent is not currently in draft status (e.g. already activated).
string
required
—
Fetch seeded sample inputs for a draft agent
POST /api/v1/agents/from-prompt/{draftId}/sandbox-teststring
required
—
Generate a draft agent from a prompt, streamed over SSE
POST /api/v1/agents/from-prompt/streamPOST /from-prompt for the agent-builder wizard: streams incremental generation progress/tokens as the LLM drafts the agent, then a final event with the same persisted draft agent payload, so the UI can show live progress instead of a blocking spinner.
string
required
—
Record a cross-agent handoff (internal)
POST /api/v1/agents/internal/handoffstransfer_to_agent tool. It persists an idempotent row in the tenant’s agent-handoff audit table and fires the agent.handoff_occurred webhook, enforcing the source agent’s handoff_targets allowlist and refusing an off-allowlist pair with 403. Use it to keep a durable, replay-safe record of A2A routing decisions.
string
required
Caller-supplied idempotency key; a replay is a no-op.
string
required
Agent delegating the conversation.
string
required
Specialist agent receiving the conversation; must be on the source’s handoff_targets allowlist.
string
—
string
—
string
Short recap of the conversation handed to the target agent.
Tenant-wide knowledge-base semantic search
POST /api/v1/agents/kb/querykb_query tool for agents that don’t yet have a specific agent context. Pass kb_id to restrict the search to one knowledge base (it must be linked to one of the tenant’s agents unless you are owner/admin); omitting kb_id searches across every KB the tenant owns but requires an owner or admin role. Returns the top-k chunk matches ranked by vector similarity with source citations. Use POST /agents/{id}/kb-search instead when searching within a specific agent’s linked knowledge bases.
string
required
—
integer
—
string
Restrict the search to this knowledge base. Omit for a tenant-wide search (owner/admin only).
Activate a pending BYO LLM inference credential
POST /api/v1/agents/llm-provider-credential/activatepending credential active. Pass enforce=true to begin routing this tenant’s agent inference through the customer credential — self-serve, with no operator provisioning step. Requires agents:write with the owner or admin role. Writes are audit-logged.
boolean
When true, immediately route this tenant’s agent inference through the credential.
Toggle automatic fallback to Orbit’s pooled model
POST /api/v1/agents/llm-provider-credential/pooled-fallbackagents:write with the owner or admin role. Writes are audit-logged.
boolean
required
Enable (true) or disable (false) automatic degrade-to-pooled-model on repeated endpoint failures.
Revoke the BYO LLM inference credential
POST /api/v1/agents/llm-provider-credential/revokeagents:write with the owner or admin role. Writes are audit-logged.
string
Optional operational justification for the audit trail.
Rotate the BYO LLM inference credential
POST /api/v1/agents/llm-provider-credential/rotateagents:write with the owner or admin role. Writes are audit-logged.
Install a marketplace template
POST /api/v1/agents/marketplace/{slug}/installstring
required
Slug of the marketplace template to install.
string
Override the installed agent’s name (defaults to the template name).
string
Override the installed agent’s description.
Approve or reject a pending template
POST /api/v1/agents/marketplace/{slug}/moderateapproved (making it visible in the public list and installable); rejecting flips it to rejected and requires notes so the submitter has actionable feedback. Only pending templates can be moderated — a template already approved or rejected returns 409. Platform-admin only.
string
required
Slug of the pending template to moderate.
string
required
—
string
Reviewer notes; required when rejecting.
Submit a template to the marketplace
POST /api/v1/agents/marketplace/publishpending state — invisible to the public list, detail, and install endpoints — until a platform moderator approves it. A slug that collides with an existing template is rejected with 409. Returns 202 to signal the template is queued for review.
string
required
Unique kebab-case identifier (lowercased on save).
string
required
—
string
required
—
string
—
string
required
—
string
—
number
—
string[]
—
string[]
—
string
—
string[]
—
string[]
—
Add a customer memory entry
POST /api/v1/agents/memoryfact entries (a 409 is returned when the contact is at the cap). Requires an operator role (owner or admin).
string
required
Contact the memory is about.
string
required
Agent the memory is scoped to.
string (enum: summary|fact|preference|goal)
The kind of memory being stored.
string
required
The free-text memory body to store.
number
Optional importance weight (0..1). Defaults to 0.9 for manual entries.
Create a draft voice agent from a model preset
POST /api/v1/agents/model-presets/{id}/instantiatestring
required
—
string
—
string
—
Create an org-scoped outcome rubric
POST /api/v1/agents/outcomes/rubricsname, markdown criteria_md, and optionally a custom evaluator_prompt and scope. Each scope allows up to 20 rubrics. Use POST /agents//outcomes/rubrics for agent-scoped rubrics.
string
required
—
string
required
Markdown success criteria shown in the rubric editor.
string
Custom judge system prompt; omit to use the built-in judge.
string (enum: inbox|voice|org)
Where the rubric applies. Agent scope must use the agent-scoped endpoint.
Enhance an agent system prompt with AI
POST /api/v1/agents/prompts/enhanceprompt and the target agent_type; the response returns the enhanced prompt and the model that produced it. Rate-limited per tenant.
string
required
The draft system prompt to improve.
string (enum: chatbot|router|voice|workflow|custom)
The kind of agent the prompt is for; tunes the rewrite.
Create an agent squad
POST /api/v1/agents/squads/name, classifier_agent_id, and the members array; the classifier must not also be a member.
Test squad classifier routing
POST /api/v1/agents/squads/{id}/teststring
required
—
string
required
—
Create an agent from a template
POST /api/v1/agents/templates/{id}/instantiatestring
required
—
string
—
string
—
Approve a tool use request
POST /api/v1/agents/tool-approvals/{id}/approvestring
required
—
string
—
Reject a tool use request
POST /api/v1/agents/tool-approvals/{id}/rejectstring
required
—
string
required
—
Create a voice evaluation golden set
POST /api/v1/agents/voice-eval/golden-setsstring
required
—
string
—
object[]
required
—
Trigger a voice evaluation run
POST /api/v1/agents/voice-eval/runsstring
required
—
string
—
string
—
string
—
string
—
string
—
Update an agent
PUT /api/v1/agents/{id}string
required
—
Set an agent’s invocation rate limits
PUT /api/v1/agents/{id}/rate-limitsnull clears that axis (unlimited). Requires at least one axis in the body. Requires the owner or admin role; writes are audit-logged.
string
required
Identifier of the agent whose rate limits to update.
Register a BYO LLM inference credential
PUT /api/v1/agents/llm-provider-credentialpending and must be activated + enforced before inference routes through them — a self-serve flow with no operator provisioning step. Requires agents:write with the owner or admin role. Writes are audit-logged.
Update a squad
PUT /api/v1/agents/squads/{id}string
required
—
string
—
string
—
string
—
object[]
—
boolean
—
integer
—
Advance a fine-tuning job
PATCH /api/v1/agents/{agentId}/fine-tuning/jobs/{jobId}queued → running → succeeded/failed/cancelled). Record the upstream provider_job_id, the resulting fine_tuned_model (required to reach succeeded), or an error reason. On success the resulting model is auto-registered into the agent’s custom-model registry — pass model_display_name to label it. Terminal states cannot transition.
string
required
—
string
required
—
string (enum: queued|running|succeeded|failed|cancelled)
required
—
string
—
string
Required when transitioning to
succeeded.string
Failure reason when transitioning to
failed.string
Display name for the custom model auto-registered on success.
Update an outcome rubric
PATCH /api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}name, criteria_md (the markdown success criteria), evaluator_prompt (a custom LLM-judge prompt), or scope; omitted fields keep their current value. Use it to refine how conversations are graded pass or fail. Returns 404 when the rubric does not exist for that agent.
string
required
—
string
required
—
string
—
string
—
string
—
string (enum: agent|inbox|voice|org)
—
Update a custom tool
PATCH /api/v1/agents/custom-tools/{id}string
required
—
string
—
object
JSON-Schema describing the tool’s parameters, shown to the LLM.
string
HTTPS webhook the runtime POSTs to when the tool is invoked.
string
New secret rotates the HMAC key; null clears it; omit to leave unchanged.
boolean
—
integer
—
string
—
Adjust a memory entry’s importance
PATCH /api/v1/agents/memory/{id}importance (0..1) is mutable; content, type, and scoping are fixed once stored.
string
required
Memory entry id.
number
required
New retention weight in the range 0..1.
Update an outcome rubric
PATCH /api/v1/agents/outcomes/rubrics/{rubricId}name, criteria_md, evaluator_prompt, or scope; omitted fields are left unchanged. Reassigning to agent scope must use the agent-scoped endpoint. Returns the rubric id and its new updated_at.
string
required
Rubric id.
string
—
string
—
string
—
string (enum: inbox|voice|org)
—
Undeploy a fine-tuned model
DELETE /api/v1/agents/{agentId}/fine-tuning/models/{modelId}/deploymodelId is the agent’s currently active model — a stale undeploy of a model that isn’t deployed returns 409 so it cannot silently drop a newer deploy.
string
required
—
string
required
—
Remove an agent’s MCP server
DELETE /api/v1/agents/{agentId}/mcp-servers/{id}200 with deleted: 0 rather than a 404, so retries and double-clicks are safe. Requires an operator role (owner, admin, or developer).
string
required
—
string
required
—
Forget an agent memory fact
DELETE /api/v1/agents/{agentId}/memory/{itemId}string
required
—
string
required
—
204 No Content
Delete an outcome rubric
DELETE /api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}string
required
—
string
required
—
204 No Content
Delete an agent
DELETE /api/v1/agents/{id}string
required
—
204 No Content
Remove an A2A peer from an agent
DELETE /api/v1/agents/{id}/a2a/peers/{peerId}string
required
—
string
required
—
Delete a saved regression test
DELETE /api/v1/agents/{id}/regression-tests/{testId}string
required
Identifier of the agent the test belongs to.
string
required
Identifier of the regression test to delete.
Delete a custom tool
DELETE /api/v1/agents/custom-tools/{id}custom_tool_ids allowlist so no agent keeps a dangling reference. Publishes a tenant-wide cache invalidation so the runtime drops the tool on its next executor build. Returns 404 when no tool with that id exists for the tenant.
string
required
Identifier of the custom tool to delete.
Erase all memory for a contact
DELETE /api/v1/agents/memorymemory_enabled flag to false so agents stop writing new memories about them. The opt-out flag is set before the vector delete to close the race where a concurrent agent turn could re-add an entry. Requires an operator role (owner or admin).
string
required
The contact whose memory should be erased. Required so a stray call cannot wipe the whole tenant.
204 No Content
Delete a customer memory entry
DELETE /api/v1/agents/memory/{id}string
required
Memory entry id.
204 No Content
Delete an outcome rubric
DELETE /api/v1/agents/outcomes/rubrics/{rubricId}string
required
Rubric id.
204 No Content
Delete an agent squad
DELETE /api/v1/agents/squads/{id}string
required
Squad id.