# AgencyTitan API Version: 1.0.0 The AgencyTitan public REST API is organized around resource-oriented URLs and standard HTTP verbs. It accepts JSON request bodies, returns JSON responses, and uses conventional HTTP status codes. The base URL for all endpoints is `https://api.agencytitan.com`. Authenticate with either OAuth 2.0 or an API key (equal first-class paths — see Authentication). For external AI agents, AgencyTitan hosts an MCP server (**External AI via MCP**); see the MCP guide. ## Guides ### Authentication All `/v1` endpoints (except `/v1/openapi.json` and `/v1/llms.txt`) authenticate with a bearer token, sent as an `Authorization: Bearer ` header. Two credential types are **equal first-class paths**: - **OAuth 2.0 access tokens** — issued through the OAuth authorization flow. Preferred by Claude.ai, ChatGPT, and other MCP hosts that discover OAuth automatically. - **API keys** — start with `at_`, created under **Settings → System → API & MCP**. Preferred by Cursor, Claude Code, and clients that set request headers. Each API key is assigned to a **service account**; every request executes as that service account, with its permissions, not as the person who created the key. OAuth 2.0 tokens act as the authenticated user instead. Keep credentials secret: never expose them in client-side code or public repositories. Send the token as an `Authorization` header on every request: ```bash curl https://api.agencytitan.com/v1/clients \ -H "Authorization: Bearer at_your_api_key_here" ``` ```javascript const res = await fetch("https://api.agencytitan.com/v1/clients", { headers: { Authorization: "Bearer at_your_api_key_here" }, }); const data = await res.json(); ``` ```python import requests res = requests.get( "https://api.agencytitan.com/v1/clients", headers={"Authorization": "Bearer at_your_api_key_here"}, ) data = res.json() ``` ```php $ch = curl_init("https://api.agencytitan.com/v1/clients"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer at_your_api_key_here"]); $data = json_decode(curl_exec($ch), true); ``` ```ruby require "net/http" require "json" uri = URI("https://api.agencytitan.com/v1/clients") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer at_your_api_key_here" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) } data = JSON.parse(res.body) ``` A missing, invalid, expired, or revoked token returns `401` with an OAuth-style body: ```json { "error": "invalid_token", "error_description": "The access token is invalid." } ``` ### Requests Send requests to the base URL `https://api.agencytitan.com` over HTTPS. The API is resource-oriented and uses standard verbs: `GET` to read, `POST` to create, `PUT` to set a desired state, `PATCH` to update, and `DELETE` to remove. Request bodies are JSON. Send a `Content-Type: application/json` header on `POST`, `PUT`, and `PATCH` requests. Path parameters are described by each operation. Requests are **strictly validated**: unknown query parameters or body properties, and out-of-range values, are rejected with a `400` (see Errors). Send only the documented fields. ```bash curl -X POST https://api.agencytitan.com/v1/clients \ -H "Authorization: Bearer at_your_api_key_here" \ -H "Content-Type: application/json" \ -d '{ "name": "Acme Co", "profile_id": "123e4567-e89b-12d3-a456-426614174000" }' ``` ```javascript const res = await fetch("https://api.agencytitan.com/v1/clients", { method: "POST", headers: { Authorization: "Bearer at_your_api_key_here", "Content-Type": "application/json", }, body: JSON.stringify({ name: "Acme Co", profile_id: "123e4567-e89b-12d3-a456-426614174000", }), }); const data = await res.json(); ``` ```python import requests res = requests.post( "https://api.agencytitan.com/v1/clients", headers={"Authorization": "Bearer at_your_api_key_here"}, json={"name": "Acme Co", "profile_id": "123e4567-e89b-12d3-a456-426614174000"}, ) data = res.json() ``` ### Responses Every response is JSON wrapped in a `data` envelope. Single-item endpoints return the object directly under `data`. List endpoints return an array under `data` alongside a `pagination` object (see Pagination). The examples show each shape. **Single item** ```json { "data": { "id": "123e4567-e89b-12d3-a456-426614174000", "name": "Acme Co" } } ``` **List** ```json { "data": [ { "id": "123e4567-e89b-12d3-a456-426614174000", "name": "Acme Co" } ], "pagination": { "total": 120, "limit": 50, "offset": 0 } } ``` Successful reads and writes return `200`. Failures use conventional HTTP status codes and a consistent error body (see Errors). ### Errors The API uses conventional HTTP status codes: `2xx` for success, `4xx` for a problem with the request, and `5xx` for an error on our side. Requests are strictly validated: unknown or out-of-range query parameters and body properties are rejected with a `400`. Most errors return the standard envelope, whose `type` field you can branch on. The `type` is one of `validation_error`, `permission_denied`, `not_found`, `conflict`, `rate_limited`, or `internal`. Authentication failures (`401`) use an OAuth-style shape instead. Both shapes are shown alongside. **Error envelope** ```json { "error": { "type": "validation_error", "message": "Human-readable description." } } ``` **Authentication error (401)** ```json { "error": "invalid_token", "error_description": "..." } ``` **Status codes:** `400` validation failed, `401` missing or invalid token, `403` insufficient permission, `404` not found, `409` conflict, `429` rate limited, `500` internal error. ### Pagination List endpoints use offset pagination via the `limit` (1-200, default 50) and `offset` (default 0) query parameters, alongside `sort` and `order`. Request the next page by advancing `offset` by `limit`. ```bash curl "https://api.agencytitan.com/v1/clients?limit=50&offset=0" \ -H "Authorization: Bearer at_your_api_key_here" ``` ```javascript const res = await fetch( "https://api.agencytitan.com/v1/clients?limit=50&offset=0", { headers: { Authorization: "Bearer at_your_api_key_here" } }, ); const data = await res.json(); ``` ```python import requests res = requests.get( "https://api.agencytitan.com/v1/clients", params={"limit": 50, "offset": 0}, headers={"Authorization": "Bearer at_your_api_key_here"}, ) data = res.json() ``` A list response carries the `data` array plus a `pagination` object with the `total` count. Single-item endpoints return `{ "data": { ... } }` with no `pagination`. **Pagination response** ```json { "data": [ ... ], "pagination": { "total": 120, "limit": 50, "offset": 0 } } ``` ### Sorting List endpoints accept a `sort` and an `order` parameter. `sort` selects the field to order by. The allowed values differ per resource, so check the `sort` parameter on each list endpoint. `order` is either `asc` or `desc` (defaults to `desc`). ```bash curl "https://api.agencytitan.com/v1/clients?sort=name&order=asc" \ -H "Authorization: Bearer at_your_api_key_here" ``` ```javascript const res = await fetch( "https://api.agencytitan.com/v1/clients?sort=name&order=asc", { headers: { Authorization: "Bearer at_your_api_key_here" } }, ); const data = await res.json(); ``` ```python import requests res = requests.get( "https://api.agencytitan.com/v1/clients", params={"sort": "name", "order": "asc"}, headers={"Authorization": "Bearer at_your_api_key_here"}, ) data = res.json() ``` ### Filtering List endpoints support filtering. Where a `search` parameter is available it performs a free-text match (for example over a client's name and email). Resource-specific filters (such as `status`, `priority_level`, `tags`, or `profile_id`) are documented on each list endpoint. Array filters accept multiple values: **repeat the parameter** to match any of several values (logical OR). Different query parameters are AND. On tasks and task-stages, first-class filters are also AND-merged with `filter_group` when both are sent. ```bash curl "https://api.agencytitan.com/v1/clients?search=acme&status=active_client&status=lead" \ -H "Authorization: Bearer at_your_api_key_here" ``` ```javascript const params = new URLSearchParams({ search: "acme" }); params.append("status", "active_client"); params.append("status", "lead"); const res = await fetch( `https://api.agencytitan.com/v1/clients?${params}`, { headers: { Authorization: "Bearer at_your_api_key_here" } }, ); const data = await res.json(); ``` ```python import requests res = requests.get( "https://api.agencytitan.com/v1/clients", params={"search": "acme", "status": ["active_client", "lead"]}, headers={"Authorization": "Bearer at_your_api_key_here"}, ) data = res.json() ``` ## Task FilterGroup (`filter_group`) `GET /v1/tasks` and `GET /v1/task-stages` also accept an advanced `filter_group` for nested AND/OR trees and custom fields. Prefer first-class params (`priority_level`, `tags`, `status_scope`, assignees, dates) when they are enough; those are AND-merged with `filter_group` when both are sent. Pass `filter_group` as **one URL-encoded JSON string**: ```json { "logical_operator": "AND", "conditions": [ { "field": "priority_level", "operator": "in_list", "value": ["high", "urgent"] }, { "field": "field_values.budget", "operator": "greater_than", "value": "5000" } ], "groups": [] } ``` ```bash FILTER='{"logical_operator":"AND","conditions":[{"field":"field_values.budget","operator":"greater_than","value":"5000"}],"groups":[]}' curl -G "https://api.agencytitan.com/v1/tasks" \ -H "Authorization: Bearer at_your_api_key_here" \ --data-urlencode "filter_group=${FILTER}" ``` ```javascript const filterGroup = { logical_operator: "AND", conditions: [ { field: "field_values.budget", operator: "greater_than", value: "5000" }, ], groups: [], }; const params = new URLSearchParams(); params.set("filter_group", JSON.stringify(filterGroup)); const res = await fetch( `https://api.agencytitan.com/v1/tasks?${params}`, { headers: { Authorization: "Bearer at_your_api_key_here" } }, ); ``` System fields include `status`, `priority_level`, `tags`, `assigned_to`, `client_id`, `process_definition_id`, `department_id`, and date fields (`due_date`, `created_at`, and related). Custom fields use `field_values.` (discover keys with [`GET /v1/fields`](/docs/tag/fields/GET/v1/fields)). Option values come from [`GET /v1/tasks/options`](/docs/tag/tasks/GET/v1/tasks/options) / [`GET /v1/tenant-context`](/docs/tag/tenant_context/GET/v1/tenant-context). See the `filter_group` parameter on [`GET /v1/tasks`](/docs/tag/tasks/GET/v1/tasks) and [`GET /v1/task-stages`](/docs/tag/task_stages/GET/v1/task-stages) for the full operator list. ### Rate limits Requests are rate limited per tenant to **600 requests per minute** across all `/v1` REST endpoints. Exceeding the limit returns a `429` response; the `Retry-After` header indicates how many seconds to wait before retrying. ### Activity Permissioned tenant audit activity, field history, and application events. ### Activity Events Application lifecycle events for currently readable resources. ### Agency Fields Tenant-global custom-field values for the agency. ### AI Memory Explicit agency and personal information used to tailor AI responses. ### AI Presets AI preset discovery, canonical detail reads, and approval-gated deletion. ### AI Requests Prompt-free AI request metadata, costs, status, and safe errors. ### API Request Logs Credential-bound, payload-free public API request observability. ### Assignment Feedback Rules Tenant-wide AI assignment feedback rules. ### Assignment History Task and ticket assignment decisions and governed reruns. ### Attachments Metadata and short-lived download access for files attached to readable tenant entities. ### Auth Events Bounded authentication security events without raw network identifiers. ### Authoring Catalogs Read-only field, layout, icon, field-layout-template, and shortcode catalogs for typed authoring clients. ### Automation Authoring Automation authoring catalogs and graph lifecycle operations for creating, editing, organizing, and publishing automations. ### Automation Execution Items Step-level automation execution outcomes. ### Automation Executions Individual runs of an automation, with status and timing. ### Automation Tests Governed direct-step probes, durable full automation test runs, progress, results, and safe sample hydration. ### Automations Automations are event-driven flows that run actions for you. ### Billing Read-only tenant billing truth: credit balance and status, transactions, client credits, and masked payment-method metadata. ### Billing Payment Methods Approval-ready management of client-owned payment methods; tenant platform-charge methods are excluded. ### Billing Payment Providers Approval-ready client-payment processor selection, capabilities, and allowlisted metadata. ### Billing Payment Settings Wallet and method-type presentation settings for client checkout. ### Billing Settings Tenant auto-reload and billing contact settings, excluding platform charge-method replacement. ### Builder Sessions Durable, creator-owned planning, validation, review, and apply sessions for typed builder workflows. ### Certificate Templates Certificate templates issued for completed training and learning paths. ### Chat Channels Tenant chat channels, direct messages, unread state, notification preferences, and membership. ### Chat Messages ACL-scoped tenant chat messages, threads, reactions, read state, and governed message sending. ### Checklist Progress Caller-owned completion state for interactive SOP checklists. ### Client Billing Settings Per-client billing behavior and financial-notification recipients. ### Client Note Folders Folders that organize notes within one client record. ### Client Notes Notes logged on client records. ### Client Profile Folders Folders that organize client profiles for settings and authoring workflows. ### Client Profiles Client profiles group your clients and define their custom fields and status options. A profile id is required when creating a client. ### Client Program Processes Processes attached to a client program, including effective schedules and exclusion state. ### Client Program Schedules Automatic task-generation schedules attached to processes within program definitions. ### Client Programs Program enrollments: which programs each client is enrolled in, and their status. ### Client Services Approval-gated bulk management of the service catalog: adding services to a category and deleting service categories. ### Clients Your agency's client records, including custom field values. ### Cloud Files Server-side import of cloud-provider files into persistent tenant storage without exposing file payloads. ### Comments Threaded discussion comments attached to supported client, work, knowledge, training, and marketplace entities. ### Custom Object Folders Folders that organize custom object definitions, including governed rehome-on-delete behavior. ### Custom Object Links Authorized incoming and outgoing links between custom-object records and supported core entities. ### Custom Object Record Links Directed links between records of agency-defined custom object types. ### Custom Object Records Records of your agency-defined custom object types, including field values. ### Custom Object Relationships Relationship definitions between custom object types, used to create record links. ### Custom Objects Custom object definitions: the shape (fields) of your agency-defined record types. ### Department Levels Levels within an agency department, including order and explicit permission assignments. ### Department Members Active and pending members assigned to agency departments and levels. ### Departments Your agency's departments and their configured levels. ### Email Delivery Logs Operational email-delivery metadata and explicitly permissioned content. ### Employee Compensation Effective-dated pay records for agency members. New records trim prior ones so pay history stays intact. ### Employee Schedules Working schedules for agency members: one schedule per member covering days, hours, and timezone. ### Entity Layouts Read-only layout structures for task stages, client profiles, views, modals, and forms. ### Entity Pins Personal and tenant-wide pins for visible tenant entities. ### Escalation Settings Tenant routing, notification, and visibility settings for escalations. ### Escalations Operational escalations, their lifecycle actions, participants, and follow-up next steps. ### Field Folders Folders that organize custom field definitions. ### Field History Clean field-level history for currently readable resources. ### Fields Custom field definitions that shape client (and other entity) data. ### Form Submissions Submitted form responses, including the submitted field values. ### Forms Form definitions used to collect structured data. ### Images Non-destructive crop and resize operations over tenant-owned raster images. ### Integration Catalogs Credential-safe integration, endpoint, scope, and AI configuration catalogs. ### Invoices Client invoices: drafts, line items, status transitions, and recorded payments. ### Knowledge Base Self-scoped knowledge-base engagement statistics. ### Layouts Atomic, revision-safe patching and publication of canonical entity layouts. ### Learning Paths Ordered training paths, their courses, and completion requirements. ### Learning Progress Current-user training progress, certifications, and dashboard summaries. ### Managed Uploads Managed multipart uploads for escalation recordings and comment attachments. ### Marketplace Items Marketplace item actions with explicit destination-tenant and visibility enforcement. ### Marketplace Payout Settings Marketplace seller earnings destination and automatic-transfer preferences. ### Modals Modal definitions, resolved layouts, presentation settings, and actions. ### My Day The caller's own My Day plan and oversight snapshot: read-only primitives an agent can consult when the day plan or process exceptions matter. ### Navigation Tenant-configurable navigation items, destinations, visibility, hierarchy, and ordering. ### Notification Templates Tenant notification-template validation and test delivery. ### Notifications Self-scoped notification inbox and explicit read-state commands. ### Permissions Effective user permissions, access scopes, and the permission definitions catalog. ### Platform Feedback Bug, feature, and support feedback submitted to the platform team. ### Process Definition Tools Compatibility operations for finding and managing process definitions. ### Process Definitions Process blueprints that tasks are created from. ### Process Instances Running instances of process definitions and their field values. ### Program Definitions Recurring service packages (programs) your agency offers. ### Programs Compatibility operations for recurring service program definitions. ### Service Categories Discoverable client-service categories and their tenant-scoped catalog details. ### Service Folders Folders that organize the tenant client-service category catalog. ### Shared Sections Reusable read-only sections embedded in entity layouts. ### Signatures Tenant and user signatures available for ticket replies. ### Sop Feedback Authenticated user feedback on visible standard operating procedures. ### Sop Folders Folders used to organize standard operating procedures. ### Sop Outdated Flags User reports and administrative resolution of outdated SOP content. ### Sop Ratings Caller-owned SOP ratings and tenant-safe aggregate rating statistics. ### Sop Reviews Advisory reviewer queues and durable SOP review decisions. ### Sop Tags Tenant-defined tags used to categorize and filter standard operating procedures. ### Sop Views Caller-owned SOP viewing sessions and progress. ### Sops Standard operating procedures: your agency knowledge base. ### Stage Tools Compatibility operations for process stage definitions and ordering. ### Status Options Reusable status templates plus the scoped status, tag, and priority options used by tenant entities. ### Task Audit Tenant task audit history clipped by task permissions, scope, privacy, and definition access. ### Task Auto Assignment Read-only task auto-assignment configuration. ### Task Stages Stages (and substages) of a running task, showing where the work currently sits. ### Tasks Tasks are running instances of your processes. ### Tenant AI Settings Tenant-wide AI availability and monthly spend controls. ### Tenant Context One bootstrap call returning the reference data (profiles, users, client and task statuses/tags, status scopes, programs, processes) needed to ground ids before acting. ### Ticket Auto Assignment Effective ticket assignment routing and tenant configuration. ### Ticket Blacklist Rules Rules that block or review matching inbound ticket messages. ### Ticket Communications Permissioned ticket communication delivery history. ### Ticket Correspondents Deliberately authorized additional recipients for a ticket thread. ### Ticket Dashboards Read-only ticket KPIs, time series, breakdowns, SLA breaches, and AI activity reports. ### Ticket Drafts Internal ticket reply drafts and read-only manager-review queue information. ### Ticket Inboxes Inbound and outbound ticket endpoints, access controls, and delivery defaults. ### Ticket Intake Audit Ticket intake decisions and sanitized sender previews. ### Ticket Messages Chronological ticket conversations, including external messages and internal notes. ### Ticket Reply Templates Reusable tenant ticket reply templates and usage tracking. ### Ticket Review Queue Blocked inbound messages awaiting ticket intake review. ### Ticket Routing Rules Ordered rules that route inbound tickets between inboxes. ### Ticket Settings Tenant-wide ticket AI, review, auto-close, and intake defaults. ### Ticket Style Profile Tenant ticket writing-style guidance used by drafting tools. ### Ticket Whitelist Rules Rules that allow matching inbound messages to bypass intake blocks. ### Tickets Support and work tickets. ### Time Entries Manual and automatically tracked work time, with task and entity attribution. ### Training Assessments Redacted assessment runtime and server-graded learner attempts. ### Training Certifications Issued training certificates visible through progress-reporting policy. ### Training Courses Training courses, their lifecycle, and folder placement. ### Training Enrollments Self-service learner enrollment and restart actions. ### Training Folders Folders used to organize training content. ### Training Lesson Blocks Ordered authored content blocks within training lessons. ### Training Lessons Lessons contained in training course modules. ### Training Manager Reviews Advisory manager-review queues and durable review decisions. ### Training Modules Ordered modules within training courses. ### Training Quiz Attempts Immutable, server-graded lesson quiz attempts. ### Training Settings Tenant training behavior and completion settings. ### Training Video Progress Caller-owned absolute video playback progress. ### User Certifications Training certifications earned by tenant users. ### Users Your agency's members. Resolve assigned_to and created_by ids here. ### View Folders Folders that organize saved views. ### Views Saved dashboards and data presentations, including their scope and display configuration. ### Webhook Deliveries Inbound and outbound webhook delivery observability and governed redelivery. ### MCP **External AI via MCP** — AgencyTitan hosts a [Model Context Protocol](https://modelcontextprotocol.io) server so an external model (Claude, ChatGPT, Gemini, Grok, Cursor, Claude Code, or any MCP-capable host) can work with your agency data. The host model thinks; AgencyTitan returns a router-selected internal tool pack plus instructions/knowledge, then executes allowlisted tools and public REST as the authenticated identity. Every call is **tenant-pinned** and runs with that identity's permissions. This is not AgencyTitan calling a tenant's external MCP server. Server URL (Streamable HTTP): ### `https://api.agencytitan.com/v1/mcp` ## Authentication OAuth and API keys are **equal first-class paths** for MCP. Use whichever your client supports: | Path | Best for | How | |---|---|---| | **OAuth 2.0** | Claude.ai, ChatGPT, and other hosts that discover OAuth | Paste the MCP URL; the host runs discovery → authorize → token | | **API key (bearer)** | Cursor, Claude Code, VS Code, and clients that set request headers | `Authorization: Bearer at_live_…` (or an OAuth access token) | Both resolve to `{ userId, tenantId }` and work on every `/v1` surface (REST and MCP). Create keys and manage sessions under **Settings → System → API & MCP**. ## Connect to AgencyTitan's MCP server ### Cursor Add the following to your `.cursor/mcp.json` file (or Settings → MCP): ```json { "mcpServers": { "agency-titan": { "url": "https://api.agencytitan.com/v1/mcp", "headers": { "Authorization": "Bearer at_live_YOUR_KEY_HERE" } } } } ``` ### Claude Code ```bash claude mcp add --transport http agency-titan https://api.agencytitan.com/v1/mcp \ --header "Authorization: Bearer at_live_YOUR_KEY_HERE" ``` ### ChatGPT / Claude.ai Paste the MCP URL into the host's custom connector UI: ```text https://api.agencytitan.com/v1/mcp ``` Use **OAuth** as the connection mechanism. Unauthenticated requests return `401` with `WWW-Authenticate` pointing at protected-resource metadata. The host then: 1. Fetches `/.well-known/oauth-protected-resource/v1/mcp` 2. Fetches `/.well-known/oauth-authorization-server` 3. Registers a public client via `POST /oauth/register` (Dynamic Client Registration) 4. Opens AgencyTitan's authorize page (PKCE) so you pick which agency to grant 5. Exchanges the code at `POST /oauth/token` and calls MCP with the access token No API key paste is required for this path. ### VS Code Add the following to your `.vscode/mcp.json` file in your workspace: ```json { "servers": { "agency-titan": { "type": "http", "url": "https://api.agencytitan.com/v1/mcp", "headers": { "Authorization": "Bearer at_live_YOUR_KEY_HERE" } } } } ``` ### Custom / Other MCP is an open protocol supported by many clients. Use the server URL `https://api.agencytitan.com/v1/mcp` and OAuth when the client supports it. If your client does not support OAuth, pass an API key in the `Authorization` header as a Bearer token: ```json { "mcpServers": { "agency-titan": { "url": "https://api.agencytitan.com/v1/mcp", "headers": { "Authorization": "Bearer at_live_YOUR_KEY_HERE" } } } } ``` ## Rate limits MCP calls are limited to **240 requests per minute per agency**, plus **120 requests per minute per subject** (API key or OAuth client), separately from the REST budget. Exceeding either limit returns a JSON-RPC error with a `Retry-After` header. ### Tools The AgencyTitan MCP server advertises a fixed namespaced set of meta-tools (`agencytitan_*`). Internal tools from the start pack are **not** listed individually in `tools/list`; call them through `agencytitan_call_tools`. ## Typical flow **Every conversation must start with `agencytitan_start`.** Do not begin with `agencytitan_call_api`. ```text agencytitan_start │ ▼ agencytitan_call_tools ←── execute tools from the returned pack (concurrent OK) │ ▼ agencytitan_request_additional_tools ←── when the pack is insufficient │ ▼ agencytitan_call_tools ←── call newly added tools ``` Optional helpers at any time after start: - `agencytitan_get_tool_deep_guidance` — extended authoring details for one pack tool - `agencytitan_investigate` — read-only nested investigation digest (prefer over paging fat REST lists) - `agencytitan_call_api` — **last-resort** public `/v1` REST pass-through when pack tools cannot do the job For `agencytitan_call_api`, never invent paths or query params. Look up the contract at `https://www.agencytitan.com/docs/` or `/v1/openapi.json`. If instructions/knowledge are insufficient, call `agencytitan_start` again with a refined prompt and the same `conversation_id` to refresh the pack. ## agencytitan_start **Required first call** for every conversation (new or continued). Send the user prompt (or your summary). Returns a router-selected internal tool pack, curated instructions/knowledge, identity, and `conversation_id`. Do normal work with `agencytitan_call_tools` after this. | Param | Type | Required | Description | |---|---|---|---| | `prompt` | string | yes | Natural-language request or summarized intent | | `client_model` | string | yes | External model id for logging (e.g. `gpt-5.5`, `claude-sonnet-5`) | | `conversation_id` | string | no | Prior `conversation_id` to continue the same session | | `client_provider` | string | no | Provider if known (`openai`, `anthropic`, `google`, …) | | `client_id` | string | no | Optional client UUID to ground the request | | `task_id` | string | no | Optional task UUID to ground the request | | `ticket_id` | string | no | Optional ticket UUID to ground the request | | `enable_rag` | boolean | no | When true (default), include tenant knowledge retrieval | ## agencytitan_call_tools Execute one or more AgencyTitan internal tools from the pack returned by `agencytitan_start`. Supports concurrent calls. Only tools in the current session allowlist (plus control tools) are permitted. | Param | Type | Required | Description | |---|---|---|---| | `conversation_id` | string | yes | From `agencytitan_start` | | `calls` | array | yes | Non-empty list of `{ name, arguments? }` | Each call item: | Field | Type | Required | Description | |---|---|---|---| | `name` | string | yes | Internal tool name from the start pack | | `arguments` | object | no | Arguments for that tool | ## agencytitan_request_additional_tools Ask AgencyTitan to expand the selected tool pack when current tools are insufficient. Returns newly added tool schemas; then call them via `agencytitan_call_tools`. | Param | Type | Required | Description | |---|---|---|---| | `conversation_id` | string | yes | From `agencytitan_start` | | `reason` | string | yes | Why the current tools are insufficient and what you still need | | `missing_capabilities` | string[] | no | Short list of missing capabilities | | `suggested_tool_names` | string[] | no | Candidate internal tool names | ## agencytitan_get_tool_deep_guidance Fetch extended authoring guidance for a specific internal tool from the current pack. | Param | Type | Required | Description | |---|---|---|---| | `conversation_id` | string | yes | From `agencytitan_start` | | `tool_name` | string | yes | Internal tool name | ## agencytitan_investigate Run a read-only nested investigation against AgencyTitan data and return a concise digest. | Param | Type | Required | Description | |---|---|---|---| | `conversation_id` | string | yes | From `agencytitan_start` | | `prompt` | string | yes | What to investigate | | `focus_topics` | string[] | no | Optional focus topics | ## agencytitan_call_api **Last-resort** pass-through to the AgencyTitan public REST API (`/v1`). Provide method, path, and optional query/body. Executes as the authenticated MCP user through the same facades as OpenAPI. Prefer `agencytitan_call_tools` / `agencytitan_request_additional_tools` / `agencytitan_investigate` first. Do not invent paths or params — use `https://www.agencytitan.com/docs/` or `/v1/openapi.json`. | Param | Type | Required | Description | |---|---|---|---| | `method` | string | yes | `GET`, `POST`, `PUT`, `PATCH`, or `DELETE` | | `path` | string | yes | Public API path, e.g. `/v1/clients` or `/v1/tickets/{id}` | | `query` | object | no | Query string parameters | | `body` | object | no | JSON body for `POST`/`PUT`/`PATCH` | | `path_params` | object | no | Explicit path params if not embedded in `path` | ### Webhooks AgencyTitan can POST tenant events to your HTTPS endpoint when enabled events occur. Configure outbound webhooks from **Settings -> System -> Webhooks** with one global endpoint, per-event enable toggles, optional per-event override URLs, a signing secret, a ping test, and a delivery log with manual redelivery. Every delivery uses this JSON envelope. The top-level `id` is unique per event and should be used for idempotency on your side: ```json { "id": "123e4567-e89b-12d3-a456-426614174000", "event_type": "client.created", "created_at": "2026-07-08T07:26:37.000Z", "tenant_id": "123e4567-e89b-12d3-a456-426614174001", "data": { "...": "event-specific fields" } } ``` Each delivery is an HTTPS `POST` with these headers: - `Content-Type: application/json` - `User-Agent: AgencyTitan-Webhooks/1.0` - `X-AT-Signature: t=,v1=` - `X-AT-Event: ` - `X-AT-Delivery-Id: ` - `X-AT-Event-Id: ` The signature is computed as `hex(HMAC_SHA256(secret, `${t}.${rawBody}`))`, where the secret is the tenant webhook signing secret (`whsec_...`). Verify the **raw request body** before you parse JSON, reject stale timestamps (recommended: 5 minutes), and use a constant-time comparison. ```javascript import { createHmac, timingSafeEqual } from 'node:crypto'; export function verifyAgencyTitanWebhook({ rawBody, signatureHeader, secret, toleranceSeconds = 300 }) { const pairs = Object.fromEntries( signatureHeader.split(',').map((part) => { const [key, value] = part.split('='); return [key, value]; }), ); const timestamp = Number(pairs.t); const received = pairs.v1; if (!Number.isFinite(timestamp) || !received) return false; const ageSeconds = Math.abs(Math.floor(Date.now() / 1000) - timestamp); if (ageSeconds > toleranceSeconds) return false; const expected = createHmac("sha256", secret) .update(`${timestamp}.${rawBody}`) .digest('hex'); if (received.length !== expected.length) return false; return timingSafeEqual( Buffer.from(received, 'utf8'), Buffer.from(expected, 'utf8'), ); } ``` ```text Generic verification flow: 1. Parse `X-AT-Signature` into `t` and `v1`. 2. Reject the request if `t` is older than your replay window. 3. Compute HMAC-SHA256 over `${t}.${rawBody}` with your signing secret. 4. Constant-time compare the computed digest to `v1`. 5. Only then trust the JSON payload. ``` Any `2xx` response counts as delivered. Respond within **30 seconds**; timeouts, network failures, and any non-`2xx` response are retried up to **8 total attempts** with backoff after each failed delivery: **30 seconds**, **2 minutes**, **10 minutes**, **30 minutes**, **2 hours**, **6 hours**, and **12 hours**. After **50 consecutive failures**, AgencyTitan auto-disables the endpoint until it is saved as active again. ### Available events | Category | Event | Description | |----------|-------|-------------| | client | `client_note.created` | Triggers when a new note is added to a client | | client | `client_note.updated` | Triggers when a client note is modified | | client | `client.bank_authorization_required` | Triggers when a saved bank (ACH) payment method needs client authorization before it can be charged (e.g. imported from a PSP without a usable mandate) | | client | `client.created` | Triggers when a new client is created. Fires only for initial client creation; prefer client.updated for later tracked field changes. | | client | `client.deleted` | Triggers when a client is deleted | | client | `client.merged` | Triggers when a client is merged into a surviving client | | client | `client.updated` | Triggers when a client is updated. Fires for tracked field changes after creation and carries _changed_fields; prefer client.created for initial creation. | | client_program | `client_program.added` | Triggers when a client is subscribed to a program | | client_program | `client_program.billing_changed` | Triggers when billing frequency, amount, or pricing override changes | | client_program | `client_program.cancelled` | Triggers when a client manually cancels their program subscription. Cancellation is a churn event: recovery / win-back / retention follow-ups belong here as well as on client_program.suspended. | | client_program | `client_program.completed` | Triggers when a program reaches its end date and completes | | client_program | `client_program.paused` | Triggers when an active client program is paused by user | | client_program | `client_program.resumed` | Triggers when a paused or suspended client program is resumed | | client_program | `client_program.started` | Triggers when a program actually starts (status = active AND start date arrived) | | client_program | `client_program.suspended` | Triggers when a client program is suspended due to payment failure | | custom_object | `custom_object_record.created` | Triggers when a new custom object record is created | | custom_object | `custom_object_record.deleted` | Triggers when a custom object record is deleted | | custom_object | `custom_object_record.updated` | Triggers when a custom object record is updated | | escalation | `escalation.comment_added` | Triggers when a comment is added to an escalation | | escalation | `escalation.created` | Triggers when a new escalation is created. Fires only for initial escalation creation; prefer escalation.updated for later detail changes. | | escalation | `escalation.reassigned` | Triggers when an escalation is assigned to a different user | | escalation | `escalation.status_changed` | Triggers when an escalation transitions between statuses | | escalation | `escalation.updated` | Triggers when escalation details change. Fires for detail changes after creation and carries _changed_fields; for a specific-field-changed intent, filter _changed_fields for that field, and prefer escalation.created for initial creation. | | forms | `form.submission_ready` | Fires when a submission is finalized and ready to act on. Prefer form.submission for pre-review handling immediately on arrival. | | forms | `form.submission_rejected` | Fires after a reviewer rejects a held submission. | | manual | `manual.button` | Triggers when a button or action link is clicked by a user | | sop | `sop.archived` | Triggers when an SOP is archived | | sop | `sop.feedback_received` | Triggers when feedback is submitted on an SOP (ratings, comments) or when an SOP is flagged as outdated | | sop | `sop.published` | Triggers when an SOP goes live (new or draft→published) | | sop | `sop.updated` | Triggers when an SOP is updated (content, steps, or metadata) | | task | `process.instance_completed` | Triggers when a task is completed (also fires task updated) | | task | `process.instance_created` | Triggers when a new task is created. Fires only for initial task creation; prefer process.instance_updated for changes to an existing task. | | task | `process.instance_deleted` | Triggers when a task is deleted | | task | `process.instance_updated` | Triggers when any task field changes (status, assignee, stage, custom fields, etc.). Fires for task changes after creation and carries _changed_fields; prefer process.instance_created for initial task creation. | | task | `process.merged` | Triggers when a task is merged into another | | task | `process.stage_changed` | Triggers when a task moves to a new stage (also fires task updated) | | ticket | `ticket.all_linked_processes_completed` | Triggers when a linked task completes and all remaining non-deleted, non-reference-only task links on the ticket point to completed tasks | | ticket | `ticket.assigned` | Triggers when one or more agents are assigned to a ticket | | ticket | `ticket.created` | Triggers when a new ticket is opened (inbound, portal, manual, or workflow). Fires on every ticket creation regardless of source; for message-driven intake (the first inbound message opening a ticket), prefer ticket.message_received with the is_new_ticket boolean filter. | | ticket | `ticket.draft_review_approved` | Triggers when a pending draft review is approved and the message proceeds to send | | ticket | `ticket.draft_review_rejected` | Triggers when a pending draft review is rejected or revisions are requested | | ticket | `ticket.draft_review_requested` | Triggers when an outbound ticket draft is queued for manager review | | ticket | `ticket.linked_process_attached` | Triggers when an existing task is linked to a ticket | | ticket | `ticket.linked_process_created` | Triggers when a task is created and linked from a ticket | | ticket | `ticket.merged` | Triggers when a ticket is merged into another | | ticket | `ticket.message_received` | Triggers on an inbound customer message on a ticket. In a task (process) automation it runs once per live linked task of that process type. Fires for every inbound customer message, including the first message that opens a ticket; use the is_new_ticket boolean filter to limit it to first-message intake, and prefer ticket.created for creations from any source. | | ticket | `ticket.message_sent` | Triggers on an outbound agent message on a ticket (including auto-send) | | ticket | `ticket.moved` | Triggers when a ticket is moved to a different inbox | | ticket | `ticket.priority_changed` | Triggers when a ticket priority is updated | | ticket | `ticket.sla_at_risk` | Triggers when a ticket enters the at-risk SLA window (first response or resolution) | | ticket | `ticket.sla_breached` | Triggers when a ticket breaches an SLA deadline (first response or resolution) | | ticket | `ticket.spam_marked` | Triggers when a ticket (or the sender behind it) is marked as spam | | ticket | `ticket.status_changed` | Triggers when a ticket transitions between statuses | | ticket | `ticket.unassigned` | Triggers when agents are removed from a ticket (all or partial) | | ticket | `ticket.updated` | Triggers when ticket fields change (subject, tags, inbox, client, etc.). Does not fire for pure status, priority, or assignment changes - use the dedicated triggers for those. Fires only for changes after creation and carries _changed_fields; prefer ticket.created for initial creation or the dedicated change trigger for status, priority, or assignment changes. | | training | `training.assessment_failed` | Triggers when a user fails a training assessment | | training | `training.assessment_passed` | Triggers when a user passes a training assessment | | training | `training.assessment_submitted` | Triggers when a user submits a training assessment | | training | `training.course_completed` | Triggers when a user completes a training course | | training | `training.course_failed` | Triggers when a user fails a training course | | user | `user.invited` | Triggers when a new user is invited. Fires at invitation time, before the user has accepted or completed setup; prefer user.setup_completed for automations that act on a ready account (training assignments, workspace provisioning). | | user | `user.setup_completed` | Triggers when a user finishes the in-app user setup flow for an agency. The user's account is ready for in-app work from this point; prefer user.invited for pre-acceptance messaging. | ## Endpoints - GET /v1/activity — List client-related activity - GET /v1/activity-events — List ticket activity events - GET /v1/agency-fields — Get agency field values - PATCH /v1/agency-fields — Update agency field values - PATCH /v1/agency-fields/value — Update an agency field value - GET /v1/ai-config-options — Get AI preset configuration options - GET /v1/ai-memory — List explicit AI memories - POST /v1/ai-memory — Add or edit explicit AI memory - POST /v1/ai-memory/dream — Refresh AI memory - GET /v1/ai-memory/profile/{scope} — Get the rendered explicit AI memory profile - DELETE /v1/ai-memory/{id} — Retract an AI memory - GET /v1/ai-presets — List AI presets - DELETE /v1/ai-presets — Delete AI presets - GET /v1/ai-presets/details — Get AI preset details - GET /v1/ai-requests — List AI requests - GET /v1/ai-requests/{id} — Get an AI request summary - GET /v1/api-request-logs — List API request logs - GET /v1/api-request-logs/{id} — Get an API request log - POST /v1/assignment-feedback-rules — Create an assignment feedback rule - GET /v1/assignment-history — List assignment history - POST /v1/assignment-history/{id}/rerun — Rerun a task assignment - GET /v1/attachments — List attachments for an entity - GET /v1/attachments/chat-files/{id}/content — Read the full text of an AI chat file attachment - DELETE /v1/attachments/note/{id} — Delete a note attachment - GET /v1/attachments/{id} — Get attachment metadata - POST /v1/attachments/{id}/download-url — Issue a short-lived attachment download URL - GET /v1/auth-events — List authentication events - POST /v1/authoring-catalogs/element-config-schema/query — Get an element configuration schema - POST /v1/authoring-catalogs/field-entity-types/query — Get field entity types - POST /v1/authoring-catalogs/field-layout-details/query — Get field layout template details - POST /v1/authoring-catalogs/field-layouts/query — List field layout templates - POST /v1/authoring-catalogs/field-type-details/query — Get field type details - POST /v1/authoring-catalogs/field-types/query — Get field types - POST /v1/authoring-catalogs/form-layout-capabilities/query — Get form layout capabilities - POST /v1/authoring-catalogs/icons/query — Search the icon catalog - POST /v1/authoring-catalogs/layout-containers/query — Get layout container types - POST /v1/authoring-catalogs/layout-elements/query — Get layout element types - POST /v1/authoring-catalogs/layout-item-types/query — Get layout item types - POST /v1/authoring-catalogs/layout-widgets/query — Get layout widget types - POST /v1/authoring-catalogs/shortcodes/query — List shortcodes for an authoring scope - POST /v1/authoring-catalogs/widget-config-schema/query — Get a widget configuration schema - GET /v1/automation-authoring/automations — List automations for authoring - POST /v1/automation-authoring/automations — Create an automation - PATCH /v1/automation-authoring/automations — Update an automation - DELETE /v1/automation-authoring/automations — Delete an automation - POST /v1/automation-authoring/automations/duplicate — Duplicate an automation - POST /v1/automation-authoring/automations/move — Move an automation to a folder - POST /v1/automation-authoring/automations/publish — Publish an automation - GET /v1/automation-authoring/folders — List automation folders - POST /v1/automation-authoring/folders — Create an automation folder - PATCH /v1/automation-authoring/folders/{id} — Update an automation folder - DELETE /v1/automation-authoring/folders/{id} — Delete an empty automation folder - DELETE /v1/automation-authoring/folders/{id}/contents — Delete automation-folder contents - POST /v1/automation-authoring/folders/{id}/move-contents — Move automation-folder contents - GET /v1/automation-execution-items — List automation execution items - GET /v1/automation-executions — List automation executions - POST /v1/automation-executions — Run an automation - GET /v1/automation-executions/{id} — Get an automation execution - POST /v1/automation-executions/{id}/cancel — Cancel an automation execution - POST /v1/automation-executions/{id}/rerun — Rerun an automation execution - POST /v1/automation-executions/{id}/respond — Respond to a paused orchestration - POST /v1/automation-executions/{id}/resume — Resume a failed automation execution - POST /v1/automation-executions/{id}/start — Start a pending automation execution - GET /v1/automation-test-runs/{id}/progress — Get automation test progress - GET /v1/automation-test-runs/{id}/result — Get an automation test result - GET /v1/automations — List automations - POST /v1/automations/bulk-disable — Disable automations in bulk - POST /v1/automations/bulk-enable — Enable automations in bulk - GET /v1/automations/{id} — Get an automation - GET /v1/automations/{id}/config — Get automation configuration - POST /v1/automations/{id}/disable — Disable an automation - POST /v1/automations/{id}/enable — Enable an automation - GET /v1/automations/{id}/execution-analytics — Get automation execution analytics - GET /v1/automations/{id}/full — Get a full automation - GET /v1/automations/{id}/inbound-webhooks — Get an inbound webhook - POST /v1/automations/{id}/inbound-webhooks — Create an inbound webhook - PATCH /v1/automations/{id}/inbound-webhooks — Update an inbound webhook - DELETE /v1/automations/{id}/inbound-webhooks — Delete an inbound webhook - POST /v1/automations/{id}/inbound-webhooks/apply-sample — Apply an inbound webhook sample - GET /v1/automations/{id}/inbound-webhooks/deliveries — List inbound webhook deliveries - POST /v1/automations/{id}/inbound-webhooks/rotate-secret — Rotate inbound webhook credentials - POST /v1/automations/{id}/inbound-webhooks/sample-listen — Start or stop inbound webhook sample listening - GET /v1/automations/{id}/pricing — Get automation pricing summary - GET /v1/automations/{id}/pricing/history — Get recent automation pricing history - GET /v1/automations/{id}/schedule/health — Get automation schedule health - POST /v1/automations/{id}/schedule/sync — Synchronize an automation schedule - POST /v1/automations/{id}/steps/{node_id}/test — Test one automation step - POST /v1/automations/{id}/test-runs — Start a full automation test run - GET /v1/automations/{id}/test-sample — Select a safe automation sample record - GET /v1/automations/{id}/versions — List automation versions - GET /v1/automations/{id}/versions/get — Get an automation version - POST /v1/automations/{id}/versions/restore — Restore an automation version as draft - POST /v1/billing-payment-methods/manage — Manage a client payment method - POST /v1/billing-payment-providers/manage — Manage a client payment provider - PATCH /v1/billing-payment-settings — Update client checkout payment settings - PATCH /v1/billing-settings — Update tenant billing settings - GET /v1/billing/balance — Get AI credit balance - GET /v1/billing/client-addresses — List client billing addresses - GET /v1/billing/client-credits — List client credits - GET /v1/billing/client-credits/{id}/balance — Get client credit balance - GET /v1/billing/client-history — List client billing history - POST /v1/billing/clients/{client_id}/addresses — Create a client billing address - GET /v1/billing/clients/{client_id}/addresses/{id} — Get a client billing address - PATCH /v1/billing/clients/{client_id}/addresses/{id} — Update a client billing address - DELETE /v1/billing/clients/{client_id}/addresses/{id} — Delete a client billing address - GET /v1/billing/clients/{id}/metrics — Get client billing metrics - GET /v1/billing/clients/{id}/payment-terms — Get client payment terms - PATCH /v1/billing/clients/{id}/payment-terms — Update client payment terms - GET /v1/billing/clients/{id}/recipients — Get client billing recipients - GET /v1/billing/clients/{id}/tax-exemption — Get client tax exemption - PATCH /v1/billing/clients/{id}/tax-exemption — Update client tax exemption - GET /v1/billing/payment-methods — List payment methods by owner - GET /v1/billing/status — Get billing status - GET /v1/billing/tax-rates — List tax rates - GET /v1/billing/transactions — List billing transactions - GET /v1/builder-sessions — List builder sessions - POST /v1/builder-sessions — Create a builder session draft - POST /v1/builder-sessions/prepare — Prepare and validate a builder session - GET /v1/builder-sessions/{id} — Get a builder session - DELETE /v1/builder-sessions/{id} — Archive a builder session - POST /v1/builder-sessions/{id}/apply — Apply a validated builder session - POST /v1/builder-sessions/{id}/cancel — Cancel a builder session - PATCH /v1/builder-sessions/{id}/intent — Replace builder session intent - GET /v1/builder-sessions/{id}/result — Get a builder session result - GET /v1/builder-sessions/{id}/review — Get a builder session review - POST /v1/builder-sessions/{id}/validate — Validate a builder session - GET /v1/certificate-templates — List certificate templates - POST /v1/certificate-templates — Create a certificate template - PATCH /v1/certificate-templates/{id} — Update a certificate template - DELETE /v1/certificate-templates/{id} — Remove a certificate template - GET /v1/chat-channels — List chat channels - POST /v1/chat-channels — Create a chat channel - POST /v1/chat-channels/client-channels — Ensure a client chat channel - POST /v1/chat-channels/department-channels — Ensure a department chat channel - POST /v1/chat-channels/direct-messages — Get or create a direct message - GET /v1/chat-channels/member-candidates — List chat member candidates - GET /v1/chat-channels/unread-summary — Get chat unread totals - GET /v1/chat-channels/{id} — Get a chat channel - PATCH /v1/chat-channels/{id} — Update a chat channel description - GET /v1/chat-channels/{id}/members — List chat channel members - POST /v1/chat-channels/{id}/members — Add chat channel members - DELETE /v1/chat-channels/{id}/members/{user_id} — Remove or leave a chat channel - POST /v1/chat-channels/{id}/read — Mark a chat channel read - PUT /v1/chat-channels/{id}/watch-state — Set chat channel watch state - GET /v1/chat-messages — List chat messages - POST /v1/chat-messages — Send a chat message - GET /v1/chat-messages/{id} — Get a chat message - PATCH /v1/chat-messages/{id} — Edit a chat message - DELETE /v1/chat-messages/{id} — Permanently delete chat message content - GET /v1/chat-messages/{id}/context — Get chat message context - PUT /v1/chat-messages/{id}/reactions — Set a chat message reaction - GET /v1/chat-messages/{id}/thread — List a chat message thread - PUT /v1/checklist-blocks/{id}/items/{itemId} — Set checklist item state - GET /v1/checklist-blocks/{id}/progress — Get my checklist progress - GET /v1/client-billing-settings — Get client billing settings - PATCH /v1/client-billing-settings — Update client billing preferences or recipients - GET /v1/client-integration-accounts — List mapped client integration accounts - POST /v1/client-integration-accounts — Map a provider account to a client - GET /v1/client-note-folders — List client note folders - POST /v1/client-note-folders — Create a client note folder - PATCH /v1/client-note-folders/{id} — Update a client note folder - DELETE /v1/client-note-folders/{id} — Delete a client note folder - GET /v1/client-notes — List client notes - POST /v1/client-notes — Create a client note - GET /v1/client-notes/{id} — Get a client note - PATCH /v1/client-notes/{id} — Update a client note - DELETE /v1/client-notes/{id} — Delete a client note - PATCH /v1/client-notes/{id}/favorite — Set client note favorite state - PATCH /v1/client-notes/{id}/pin — Set client note pin state - GET /v1/client-profile-folders — List client-profile folders - POST /v1/client-profile-folders — Create a client-profile folder - PATCH /v1/client-profile-folders/{id} — Rename a client-profile folder - DELETE /v1/client-profile-folders/{id} — Delete a client-profile folder - POST /v1/client-profile-folders/{id}/move — Move a client-profile folder - POST /v1/client-profile-folders/{id}/move-contents — Move client-profile folder contents - GET /v1/client-profiles — List client profiles - POST /v1/client-profiles — Create a client profile - POST /v1/client-profiles/bulk/delete — Bulk delete client profiles in a folder - POST /v1/client-profiles/names/suggestion — Generate an unused client-profile name - GET /v1/client-profiles/{id} — Get a client profile - PATCH /v1/client-profiles/{id} — Update a client profile - DELETE /v1/client-profiles/{id} — Delete a client profile - GET /v1/client-profiles/{id}/details — Get client-profile details and layout - POST /v1/client-profiles/{id}/duplicate — Duplicate a client profile - POST /v1/client-profiles/{id}/move — Move a client profile - GET /v1/client-program-processes — List client program processes - POST /v1/client-program-schedules/manage — Manage a client-program schedule - GET /v1/client-programs — List client programs - GET /v1/client-programs/available — List programs available to a client - POST /v1/client-programs/manage — Enroll, activate, or cancel a client program - GET /v1/client-programs/subscribers — List subscribers for a program - GET /v1/client-programs/{id} — Get a client program - PATCH /v1/client-programs/{id} — Activate or cancel a client program - PATCH /v1/client-programs/{id}/billing — Update client-program billing - PATCH /v1/client-programs/{id}/tax-rate — Update client-program tax rate - POST /v1/client-programs/{id}/transition — Transition a client program - GET /v1/client-service-categories — List client-service categories - POST /v1/client-service-categories — Create a client-service category - PATCH /v1/client-service-categories — Update a service category - DELETE /v1/client-service-categories — Delete a service category - POST /v1/client-service-categories/move — Move a service category - GET /v1/client-service-categories/services — List services in a category - POST /v1/client-service-categories/services — Add services to a category - GET /v1/client-service-categories/{id} — Get a client-service category - GET /v1/client-service-folders — List client-service folders - POST /v1/client-service-folders — Create a client-service folder - GET /v1/client-service-folders/{id} — Get a client-service folder - PATCH /v1/client-service-folders/{id} — Rename a client-service folder - DELETE /v1/client-service-folders/{id} — Delete a client-service folder - POST /v1/client-service-folders/{id}/move — Reparent a client-service folder - POST /v1/client-service-folders/{id}/move-contents — Move a client-service folder contents - GET /v1/client-services — List client services - PATCH /v1/client-services — Update a client service - DELETE /v1/client-services — Delete a client service - POST /v1/client-services/bulk/add — Bulk add services to a category - POST /v1/client-services/bulk/delete-categories — Bulk delete service categories in a folder - POST /v1/client-services/reorder — Reorder client services - GET /v1/client-services/{id} — Get a client service - GET /v1/clients — List clients - POST /v1/clients — Create a client - POST /v1/clients/bulk/delete — Bulk delete clients - POST /v1/clients/bulk/update — Bulk update clients - GET /v1/clients/by-slug — Resolve a client slug - GET /v1/clients/contact-matching-settings — Get client contact-matching settings - PATCH /v1/clients/contact-matching-settings — Update client contact-matching settings - GET /v1/clients/grouping-options — Get client grouping options - GET /v1/clients/list-preferences — Get client list preferences - PATCH /v1/clients/list-preferences — Update client list preferences - POST /v1/clients/lookup — Lookup a client with related context - POST /v1/clients/manage — Create or update a client - POST /v1/clients/migrate-profile — Migrate clients to another profile - POST /v1/clients/pins/read — Get client pin states - GET /v1/clients/search — Search clients - POST /v1/clients/service-selections/replace — Replace client service selections - GET /v1/clients/table-column-catalog — Get the client table-column catalog - GET /v1/clients/{id} — Get a client - PATCH /v1/clients/{id} — Update a client - DELETE /v1/clients/{id} — Delete a client - GET /v1/clients/{id}/contacts — Get client contact email addresses - PATCH /v1/clients/{id}/pin — Update a personal client pin - GET /v1/clients/{id}/service-selections — List a client service-selection matrix - PATCH /v1/clients/{id}/slug — Update a client slug - GET /v1/clients/{id}/ticket-ai-overrides — Get client ticket AI overrides - PATCH /v1/clients/{id}/ticket-ai-overrides — Upsert client ticket AI overrides - DELETE /v1/clients/{id}/ticket-ai-overrides — Clear client ticket AI overrides - POST /v1/cloud-files/import — Import a Google Drive file into tenant storage - GET /v1/comments — List comments - POST /v1/comments — Create a comment - GET /v1/comments/activity — List escalation comment activity - POST /v1/comments/add — Add a comment with thread context - PATCH /v1/comments/{id} — Update a comment - DELETE /v1/comments/{id} — Delete a comment - POST /v1/comments/{id}/attachments — Attach a managed file to a comment - DELETE /v1/comments/{id}/attachments/{attachment_id} — Remove a managed comment attachment - POST /v1/comments/{id}/pin — Toggle comment pin - PUT /v1/comments/{id}/pin — Set comment pin state - POST /v1/comments/{id}/reactions — Toggle comment reaction - PUT /v1/comments/{id}/reactions/{emoji} — Add a comment reaction - DELETE /v1/comments/{id}/reactions/{emoji} — Remove a comment reaction - GET /v1/custom-object-folders — List custom object folders - POST /v1/custom-object-folders — Create a custom object folder - PATCH /v1/custom-object-folders/{id} — Rename a custom object folder - DELETE /v1/custom-object-folders/{id} — Delete a custom object folder - POST /v1/custom-object-folders/{id}/move — Move a custom object folder - GET /v1/custom-object-links — List anchored custom object links - POST /v1/custom-object-links — Create a custom object link - POST /v1/custom-object-links/records/search — Search linked custom object records - PATCH /v1/custom-object-links/{id} — Reorder or set a primary custom object link - DELETE /v1/custom-object-links/{id} — Unlink a custom object record - GET /v1/custom-object-record-links — List links from a custom object record - POST /v1/custom-object-record-links — Create a custom object record link - DELETE /v1/custom-object-record-links/{id} — Remove a custom object record link - GET /v1/custom-object-records — List custom object records - POST /v1/custom-object-records — Create a custom object record - POST /v1/custom-object-records/find — Find one custom object record - POST /v1/custom-object-records/manage — Create or update a custom object record - POST /v1/custom-object-records/query — Query custom object records - POST /v1/custom-object-records/search — Search custom object records - GET /v1/custom-object-records/{id} — Get a custom object record - PATCH /v1/custom-object-records/{id} — Update a custom object record - DELETE /v1/custom-object-records/{id} — Delete a custom object record - POST /v1/custom-object-records/{id}/archive — Archive a custom object record - POST /v1/custom-object-records/{id}/duplicate — Duplicate a custom object record - POST /v1/custom-object-records/{id}/transition — Transition a custom object record lifecycle - POST /v1/custom-object-records/{id}/unarchive — Unarchive a custom object record - GET /v1/custom-object-relationships — List custom object relationship definitions - GET /v1/custom-objects — List custom objects - POST /v1/custom-objects — Create a custom object definition - POST /v1/custom-objects/bulk/delete — Bulk delete custom objects in a folder - POST /v1/custom-objects/details — Get custom object details in a batch - GET /v1/custom-objects/{id} — Get a custom object - PATCH /v1/custom-objects/{id} — Update a custom object - DELETE /v1/custom-objects/{id} — Delete a custom object - PATCH /v1/custom-objects/{id}/definition — Replace a custom object definition - POST /v1/custom-objects/{id}/duplicate — Duplicate a custom object - POST /v1/custom-objects/{id}/move — Move a custom object to a folder - POST /v1/department-levels — Create a department level - PATCH /v1/department-levels — Update a department level - DELETE /v1/department-levels — Delete a department level - POST /v1/department-levels/permissions/replace — Update department-level permissions - POST /v1/department-levels/reorder — Reorder department levels - GET /v1/department-levels/{id}/permissions — Get department-level permissions - GET /v1/department-members — List department members - GET /v1/departments — List departments - POST /v1/departments — Create a department - PATCH /v1/departments — Update a department - DELETE /v1/departments — Delete a department - GET /v1/departments/{id} — Get a department - GET /v1/email-delivery-logs — List email delivery logs - GET /v1/email-delivery-logs/{id} — Get an email delivery log - POST /v1/employees/{user_id}/compensation — Set an employee's compensation - PUT /v1/employees/{user_id}/schedule — Set an employee's schedule - GET /v1/entity-layouts — List entity layouts - GET /v1/entity-layouts/{id} — Get an entity layout - POST /v1/entity-layouts/{id} — Create and publish an initial entity layout - GET /v1/entity-layouts/{id}/details — Get canonical layout details - POST /v1/entity-layouts/{id}/patch — Atomically patch and publish an entity layout - POST /v1/entity-pins — Pin an entity - DELETE /v1/entity-pins — Unpin an entity - GET /v1/escalation-settings — Get escalation routing settings - PATCH /v1/escalation-settings — Patch escalation routing settings - GET /v1/escalations — List escalations - POST /v1/escalations — Create an escalation - GET /v1/escalations/counts — Get escalation counts - GET /v1/escalations/next-steps — List escalation next steps - GET /v1/escalations/participants — List escalation participants - GET /v1/escalations/{id} — Get an escalation - PUT /v1/escalations/{id}/ai-summary — Replace a saved escalation summary - POST /v1/escalations/{id}/ai-summary/generate — Generate and save an escalation summary - PATCH /v1/escalations/{id}/assignee — Reassign an escalation - POST /v1/escalations/{id}/next-steps — Create an escalation next step - PATCH /v1/escalations/{id}/next-steps — Update an escalation next step - DELETE /v1/escalations/{id}/next-steps — Delete an escalation next step - POST /v1/escalations/{id}/participants — Add an escalation participant - DELETE /v1/escalations/{id}/participants — Remove an escalation participant - GET /v1/escalations/{id}/recommendations — List escalation recommendations - PUT /v1/escalations/{id}/selected-recommendation — Select an escalation recommendation - PATCH /v1/escalations/{id}/status — Transition escalation status - PUT /v1/escalations/{id}/tags — Replace escalation tags - GET /v1/escalations/{id}/task-links — List tasks linked to an escalation - PUT /v1/escalations/{id}/task-links/{task_id} — Link a task to an escalation - DELETE /v1/escalations/{id}/task-links/{task_id} — Unlink a task from an escalation - GET /v1/field-folders — List field folders - POST /v1/field-folders — Create a field folder - GET /v1/field-folders/{id} — Get a field folder - PATCH /v1/field-folders/{id} — Rename a field folder - DELETE /v1/field-folders/{id} — Delete a field folder - POST /v1/field-folders/{id}/move — Move a field folder - GET /v1/field-history — List field history - GET /v1/fields — List custom field definitions - POST /v1/fields — Create a custom field definition - POST /v1/fields/actions/get-details — Get batched field definition details - POST /v1/fields/actions/list — List field definitions for a legacy scope - POST /v1/fields/bulk/delete — Delete field definitions - POST /v1/fields/bulk/replace-choice — Bulk replace a field choice value - GET /v1/fields/composite-types — List composite field types - GET /v1/fields/composite-types/{id} — Get a composite field type - POST /v1/fields/manage — Create or update a custom field definition (upsert) - POST /v1/fields/rename-key — Rename a field shortcode - POST /v1/fields/reorder — Reorder custom fields - GET /v1/fields/{id} — Get a custom field definition - PATCH /v1/fields/{id} — Update a custom field definition - DELETE /v1/fields/{id} — Delete a custom field definition - GET /v1/fields/{id}/usage — Get field usage - GET /v1/form-submissions — List form submissions - GET /v1/form-submissions/{id} — Get a form submission - GET /v1/forms — List forms - POST /v1/forms — Create a draft form - GET /v1/forms/{id} — Get a form - PATCH /v1/forms/{id} — Update top-level form settings - DELETE /v1/forms/{id} — Delete a form - POST /v1/forms/{id}/analytics — Get form submission analytics - GET /v1/forms/{id}/full — Get a full form - POST /v1/forms/{id}/publish — Publish a draft form version - POST /v1/forms/{id}/republish — Republish an inactive form - PATCH /v1/forms/{id}/settings — Update form settings - POST /v1/forms/{id}/unpublish — Unpublish a form - POST /v1/images/crop — Crop a tenant image - POST /v1/images/resize — Resize a tenant image - GET /v1/integration-credentials — Get credential-safe integration connections - GET /v1/integration-credentials/{id}/subaccounts — List provider subaccounts - GET /v1/integration-endpoint-details — Get integration endpoint details - GET /v1/integration-endpoints — List integration endpoints - POST /v1/integration-endpoints/call — Execute an integration endpoint - POST /v1/integration-resources/query — Browse integration resources - GET /v1/integrations — Get supported integration types - GET /v1/integrations/connected — Get tenant-usable integrations - GET /v1/invoice-settings — Get invoice settings - GET /v1/invoices — List invoices - POST /v1/invoices — Create an invoice - POST /v1/invoices/manage — Create, update, set status, send, or record a payment on an invoice - GET /v1/invoices/{id} — Get an invoice - PATCH /v1/invoices/{id} — Update an invoice - DELETE /v1/invoices/{id} — Delete an invoice - GET /v1/knowledge-base/stats — Get knowledge-base statistics - GET /v1/learning-paths — List learning paths - POST /v1/learning-paths — Create a learning path - GET /v1/learning-paths/{id} — Get a learning path - PATCH /v1/learning-paths/{id} — Update a learning path - DELETE /v1/learning-paths/{id} — Remove a learning path - POST /v1/learning-paths/{id}/courses/replace — Replace learning path course membership and order - POST /v1/managed-uploads — Create a managed upload session - POST /v1/managed-uploads/{session_id}/complete — Complete a managed upload - POST /v1/managed-uploads/{session_id}/parts — Create a managed upload part URL - GET /v1/map-layers — List map layers - POST /v1/map-layers — Create a map layer - POST /v1/map-layers/geocode-cache — Write geocode cache - POST /v1/map-layers/geocode-cache/query — Read geocode cache - PATCH /v1/map-layers/{id} — Update a map layer - DELETE /v1/map-layers/{id} — Delete a map layer - GET /v1/marketplace-categories — List Marketplace categories - GET /v1/marketplace-items — Search Marketplace items - POST /v1/marketplace-items/download — Acquire a Marketplace item - GET /v1/marketplace-items/downloads — List my Marketplace downloads - GET /v1/marketplace-items/downloads/{download_id}/import-preview — Preview importing an acquired Marketplace download - POST /v1/marketplace-items/imports/apply — Import an acquired Marketplace download - GET /v1/marketplace-items/{slug} — Get Marketplace item details - PATCH /v1/marketplace-payout-settings — Update marketplace seller payout settings - GET /v1/mcp-connections — List accessible MCP connections - GET /v1/mcp-connections/{id}/tools — List tools exposed by an MCP connection - GET /v1/modals — List modals - POST /v1/modals — Create a modal - GET /v1/modals/{id} — Get a modal - PATCH /v1/modals/{id} — Update a modal - DELETE /v1/modals/{id} — Delete a modal - POST /v1/modals/{id}/duplicate — Duplicate a modal - POST /v1/modals/{id}/move-to-folder — Move a modal to a folder - GET /v1/my-day — Get my day - GET /v1/my-day/oversight — Get my oversight - POST /v1/navigation/items — Create a navigation item - PATCH /v1/navigation/items — Update a navigation item - DELETE /v1/navigation/items — Delete a navigation item - POST /v1/navigation/items/details/query — Get navigation item details - POST /v1/navigation/items/hide — Hide a system navigation item - POST /v1/navigation/items/query — List navigation items - POST /v1/navigation/items/reposition — Reposition a navigation item - POST /v1/navigation/items/unhide — Unhide a system navigation item - GET /v1/notification-deliveries — List tenant notification deliveries - POST /v1/notification-templates/send-test — Send a test notification email - GET /v1/notifications — List my notifications - POST /v1/notifications/read-all — Mark all notifications read - POST /v1/notifications/reminders — Create a reminder for myself - GET /v1/notifications/unread-count — Get my unread notification count - POST /v1/notifications/{id}/read — Mark a notification read - GET /v1/permissions/definitions — List permission definitions - GET /v1/permissions/{id} — Get a user's effective permissions - POST /v1/platform-feedback — Submit platform feedback - GET /v1/process-definition-tools — List process definitions - DELETE /v1/process-definition-tools — Delete process definitions - GET /v1/process-definition-tools/details — Get process definition details - GET /v1/process-definitions — List process definitions - POST /v1/process-definitions/bulk/delete — Bulk delete process definitions in a folder - GET /v1/process-definitions/{id} — Get a process definition - GET /v1/process-definitions/{id}/full — Get a full process definition - GET /v1/process-definitions/{id}/stage-tools — List stage definitions - POST /v1/process-definitions/{id}/stage-tools — Create a stage definition - POST /v1/process-definitions/{id}/stage-tools/actions/reorder — Reorder sibling stage definitions - PATCH /v1/process-instances/{id} — Update a process instance - GET /v1/program-definitions — List program definitions - POST /v1/program-definitions/manage — Create or update a program definition - GET /v1/program-definitions/{id} — Get a program definition - GET /v1/programs — List programs - POST /v1/programs — Create a program - PATCH /v1/programs — Update a program - GET /v1/programs/definition-details — Get program definition details - POST /v1/programs/duplicate — Duplicate a program - GET /v1/scope-types — Get entity scope types - GET /v1/shared-sections — List shared layout sections - GET /v1/shared-sections/{id} — Get a shared layout section - GET /v1/signatures — List available signatures - DELETE /v1/sop-content-blocks — Remove SOP content blocks sequentially (non-atomic batch) - PATCH /v1/sop-content-blocks/{id} — Update one SOP content block with an expected revision - POST /v1/sop-feedback — Submit SOP feedback - GET /v1/sop-folders — List SOP folders - POST /v1/sop-folders — Create an SOP folder - GET /v1/sop-folders/{id} — Get an SOP folder - PATCH /v1/sop-folders/{id} — Update an SOP folder - DELETE /v1/sop-folders/{id} — Delete an SOP folder - POST /v1/sop-folders/{id}/move — Move an SOP folder - POST /v1/sop-folders/{id}/move-contents — Move SOP folder contents - DELETE /v1/sop-folders/{id}/with-items — Delete an SOP folder and its SOPs - GET /v1/sop-outdated-flags — List outdated SOP flags - PUT /v1/sop-outdated-flags/{id}/status — Update an outdated flag - DELETE /v1/sop-prerequisites — Remove SOP prerequisites sequentially (non-atomic batch) - GET /v1/sop-reviews — List SOP reviews - POST /v1/sop-reviews/{id}/decision — Decide an SOP review - DELETE /v1/sop-steps — Remove SOP steps sequentially (non-atomic batch) - PATCH /v1/sop-steps/{id} — Update one SOP step with an expected revision - POST /v1/sop-steps/{id}/content-blocks — Create SOP content blocks sequentially (non-atomic batch) - POST /v1/sop-steps/{id}/content-blocks/order — Atomically reorder SOP content blocks with an expected revision - GET /v1/sop-tags — List SOP tags - PUT /v1/sop-tags/by-name/{name} — Upsert an SOP tag - PUT /v1/sop-views/{id} — Update an SOP view - GET /v1/sops — List SOPs - POST /v1/sops — Create an SOP - GET /v1/sops/authoring — List SOPs for authoring - GET /v1/sops/recent — List recently viewed SOPs - GET /v1/sops/search — Search SOPs - GET /v1/sops/{id} — Get an SOP - PATCH /v1/sops/{id} — Update an SOP - DELETE /v1/sops/{id} — Remove an SOP - GET /v1/sops/{id}/authoring — Get SOP authoring details - GET /v1/sops/{id}/content — Get SOP content - POST /v1/sops/{id}/folder — Move an SOP to a folder - GET /v1/sops/{id}/full — Get a full SOP - POST /v1/sops/{id}/outdated-flags — Flag an SOP as outdated - GET /v1/sops/{id}/outdated-flags/mine — List my outdated flags - GET /v1/sops/{id}/prerequisites — List SOP prerequisites - POST /v1/sops/{id}/prerequisites — Add SOP prerequisites sequentially (non-atomic batch) - GET /v1/sops/{id}/rating — Get an SOP rating - PUT /v1/sops/{id}/rating — Set an SOP rating - POST /v1/sops/{id}/steps — Add SOP steps sequentially (non-atomic batch) - POST /v1/sops/{id}/steps/order — Atomically reorder SOP steps with an expected revision - GET /v1/sops/{id}/versions — List SOP versions - GET /v1/sops/{id}/versions/{versionId} — Get an SOP version - POST /v1/sops/{id}/versions/{versionId}/restore — Restore an SOP version - POST /v1/sops/{id}/views — Start an SOP view - GET /v1/sops/{id}/views/mine — List my SOP views - POST /v1/stage-tools/actions/get-details — Get stage definition details - DELETE /v1/stage-tools/{id} — Delete a stage definition - PATCH /v1/stage-tools/{id}/definition — Replace a stage definition shell - GET /v1/status-options/custom-objects — List aggregate custom object status options - PATCH /v1/status-options/entities — Set entity status options - POST /v1/status-options/entities/read — Get entity status options - POST /v1/status-options/stages/effective — Get effective stage status options - PATCH /v1/status-options/tag-priority — Upsert a tag or priority option - DELETE /v1/status-options/tag-priority — Delete a tag or priority option - POST /v1/status-options/tag-priority/archive — Archive a tag or priority option - POST /v1/status-options/tag-priority/read — Get tag or priority option pools - POST /v1/status-options/tag-priority/restore — Restore a tag or priority option - PATCH /v1/status-options/templates — Save a status template - DELETE /v1/status-options/templates — Delete a status template - POST /v1/status-options/templates/list — List status templates - GET /v1/task-audit — List tenant task audit - GET /v1/task-settings/auto-assignment — Get task auto-assignment settings - GET /v1/task-stages — List task stages - POST /v1/task-stages/bulk/update — Bulk update task stages - GET /v1/task-stages/group-counts — Count task-stage groups - POST /v1/task-stages/manage — Manage a task stage - GET /v1/task-stages/my-work — List my assigned work - GET /v1/task-stages/my-work/counts — Get my work counts - GET /v1/task-stages/my-work/pinned — List my pinned work - GET /v1/task-stages/overflow — List overflow task stages - POST /v1/task-stages/retry-overflow-assignment — Retry overflow task-stage assignments - POST /v1/task-stages/substages/{id}/complete — Complete a task substage - POST /v1/task-stages/substages/{id}/reopen — Reopen a task substage - GET /v1/task-stages/{id}/dependencies — Get stage dependency state - GET /v1/tasks — List tasks - POST /v1/tasks — Create a task - GET /v1/tasks/actions/count-by-client — Count tasks by client - POST /v1/tasks/bulk/delete — Bulk delete tasks - POST /v1/tasks/bulk/update — Bulk update tasks - GET /v1/tasks/group-counts — Count task groups - POST /v1/tasks/link-ticket — Link a task to a ticket - POST /v1/tasks/manage — Manage a task - POST /v1/tasks/merge — Merge two tasks - POST /v1/tasks/merge/preview — Preview a task merge - GET /v1/tasks/options — Get task filter options - GET /v1/tasks/references — List task references - GET /v1/tasks/saved-views — List saved task views - GET /v1/tasks/saved-views/{id}/execute — Execute a saved task view - GET /v1/tasks/ticket-links — List task-ticket links - POST /v1/tasks/transition-stage — Transition a task to another stage - POST /v1/tasks/unlink-ticket — Unlink a task from a ticket - POST /v1/tasks/update-fields — Update task fields - GET /v1/tasks/{id} — Get a task - DELETE /v1/tasks/{id} — Delete a task - GET /v1/tasks/{id}/activity — List task activity - GET /v1/tasks/{id}/delete-preview — Preview task deletion - GET /v1/tasks/{id}/dependency-graph — Get task dependency graph - GET /v1/tasks/{id}/details — Get task details and field values - GET /v1/tasks/{id}/full — Get a full task - POST /v1/tasks/{id}/jump-to-stage — Make a task stage current - GET /v1/tasks/{id}/merge-redirect — Get task merge redirect - POST /v1/tasks/{id}/privacy — Set task privacy - GET /v1/tasks/{id}/process-instance-details — Get process instance details - POST /v1/tasks/{id}/restore — Restore a deleted task - GET /v1/tasks/{id}/ticket-link-candidates — Search ticket link candidates - GET /v1/tasks/{id}/watchers — List task watchers - POST /v1/tasks/{id}/watchers — Replace task watchers - GET /v1/tenant-ai-settings — Get tenant AI access settings - PATCH /v1/tenant-ai-settings — Update tenant AI access settings - GET /v1/tenant-context — Get tenant context - GET /v1/ticket-blacklist-rules — List ticket blacklist rules - POST /v1/ticket-blacklist-rules — Create a ticket blacklist rule - PATCH /v1/ticket-blacklist-rules/{id} — Update a ticket blacklist rule - DELETE /v1/ticket-blacklist-rules/{id} — Delete a ticket blacklist rule - GET /v1/ticket-communications — List ticket communications - GET /v1/ticket-communications/{id} — Get a ticket communication - POST /v1/ticket-dashboards/ai-activity — Get ticket AI activity series - POST /v1/ticket-dashboards/auto-close — Get ticket auto-close metrics - POST /v1/ticket-dashboards/breakdowns — Get ticket dashboard breakdown - POST /v1/ticket-dashboards/response-times — Get ticket response-time series - POST /v1/ticket-dashboards/sla-breaches — Get ticket SLA breaches - POST /v1/ticket-dashboards/summary — Get ticket dashboard summary - POST /v1/ticket-dashboards/throughput — Get ticket throughput series - GET /v1/ticket-drafts — List ticket drafts - GET /v1/ticket-drafts/review-users — List ticket draft review users - GET /v1/ticket-drafts/reviewers — List eligible ticket draft reviewers - GET /v1/ticket-drafts/reviews — List ticket draft reviews - PATCH /v1/ticket-drafts/reviews/{id} — Edit a pending ticket draft as a reviewer - POST /v1/ticket-drafts/reviews/{id}/decision — Decide a pending ticket draft review - POST /v1/ticket-drafts/save — Save a ticket draft - DELETE /v1/ticket-drafts/{id} — Delete a ticket draft - GET /v1/ticket-inboxes — List ticket inboxes - POST /v1/ticket-inboxes — Create a ticket inbox - GET /v1/ticket-inboxes/assignable — List assignable ticket inboxes - GET /v1/ticket-inboxes/move-targets — List ticket move targets - GET /v1/ticket-inboxes/{id} — Get a ticket inbox - PATCH /v1/ticket-inboxes/{id} — Update a ticket inbox - DELETE /v1/ticket-inboxes/{id} — Delete a ticket inbox - GET /v1/ticket-intake-audit — List ticket intake audit - GET /v1/ticket-messages — List a ticket conversation - POST /v1/ticket-messages — Queue an outbound reply on a ticket - GET /v1/ticket-messages/{id} — Get a ticket conversation item - GET /v1/ticket-reply-templates — List ticket reply templates - POST /v1/ticket-reply-templates — Create a ticket reply template - PATCH /v1/ticket-reply-templates/{id} — Update a ticket reply template - DELETE /v1/ticket-reply-templates/{id} — Delete a ticket reply template - POST /v1/ticket-reply-templates/{id}/usage — Record ticket reply-template usage - GET /v1/ticket-review-queue — List the ticket review queue - POST /v1/ticket-review-queue/bulk/delete — Count or delete matching review-queue items - GET /v1/ticket-review-queue/{id}/resolution-preview — Preview a review-queue resolution - POST /v1/ticket-review-queue/{id}/resolve — Resolve one ticket review-queue item - GET /v1/ticket-routing-rules — List ticket routing rules - POST /v1/ticket-routing-rules — Create a ticket routing rule - POST /v1/ticket-routing-rules/reorder — Reorder ticket routing rules - PATCH /v1/ticket-routing-rules/{id} — Update a ticket routing rule - DELETE /v1/ticket-routing-rules/{id} — Delete a ticket routing rule - GET /v1/ticket-settings — Get ticket settings - PATCH /v1/ticket-settings — Update ticket settings - GET /v1/ticket-settings/auto-assignment — Get ticket auto-assignment settings - PATCH /v1/ticket-settings/auto-assignment — Update ticket auto-assignment settings - PUT /v1/ticket-settings/review-users/{user_id} — Set a user’s draft-review requirement - GET /v1/ticket-settings/style-profile — Get the ticket writing-style profile - PUT /v1/ticket-settings/style-profile — Update the ticket writing-style profile - GET /v1/ticket-whitelist-rules — List ticket whitelist rules - POST /v1/ticket-whitelist-rules — Create a ticket whitelist rule - PATCH /v1/ticket-whitelist-rules/{id} — Update a ticket whitelist rule - DELETE /v1/ticket-whitelist-rules/{id} — Delete a ticket whitelist rule - GET /v1/tickets — List tickets - POST /v1/tickets — Create a ticket - POST /v1/tickets/bulk/delete — Delete multiple tickets - POST /v1/tickets/bulk/move — Move multiple tickets to another inbox - POST /v1/tickets/bulk/update — Bulk update tickets - GET /v1/tickets/counts — Get ticket sidebar counts - POST /v1/tickets/manage — Create a ticket, update it, or add an internal note - POST /v1/tickets/notes — Add an internal ticket note - POST /v1/tickets/resolve-numbers — Resolve ticket numbers - POST /v1/tickets/search — Search tickets - GET /v1/tickets/{id} — Get a ticket - PATCH /v1/tickets/{id} — Update a ticket - DELETE /v1/tickets/{id} — Delete a ticket - GET /v1/tickets/{id}/activity — List ticket activity - GET /v1/tickets/{id}/ai-interactions — List ticket AI interactions - GET /v1/tickets/{id}/ai-settings — Get effective ticket AI settings - POST /v1/tickets/{id}/assign — Assign a ticket - POST /v1/tickets/{id}/assign/preflight — Preflight ticket assignment - GET /v1/tickets/{id}/assignment-history — List ticket assignment history - POST /v1/tickets/{id}/correspondents — Deliberately add a ticket correspondent - GET /v1/tickets/{id}/draft-review — Get a ticket draft-review context - GET /v1/tickets/{id}/duplicate-suggestions — List duplicate-ticket suggestions - POST /v1/tickets/{id}/duplicate-suggestions/{sid}/dismiss — Dismiss a duplicate-ticket suggestion - POST /v1/tickets/{id}/merge — Merge a ticket into another ticket - POST /v1/tickets/{id}/merge/preview — Preview a ticket merge - POST /v1/tickets/{id}/move — Move a ticket to another inbox - PUT /v1/tickets/{id}/privacy — Set ticket privacy - GET /v1/tickets/{id}/process-links — List a ticket’s process links - POST /v1/tickets/{id}/read — Mark a ticket read - DELETE /v1/tickets/{id}/read — Mark a ticket unread - GET /v1/tickets/{id}/reply-senders — List outbound identities for a ticket - GET /v1/time-entries — List time entries - POST /v1/time-entries — Create a manual time entry - POST /v1/time-entries/timer/start — Start a timer - GET /v1/time-entries/{id} — Get a time entry - PATCH /v1/time-entries/{id} — Update a manual time entry - GET /v1/time-entries/{id}/audit — List a time entry audit trail - POST /v1/training-assessments/{id}/attempts — Submit an assessment attempt - GET /v1/training-assessments/{id}/runtime — Get a runtime assessment - GET /v1/training-certifications — List issued training certifications - GET /v1/training-courses — List training courses - POST /v1/training-courses — Create a training course - GET /v1/training-courses/search — Search training courses - GET /v1/training-courses/{id} — Get a training course - PATCH /v1/training-courses/{id} — Update a training course - DELETE /v1/training-courses/{id} — Remove a training course - GET /v1/training-courses/{id}/authoring-content — Get training authoring content - GET /v1/training-courses/{id}/content — Get learner training content - POST /v1/training-courses/{id}/enrollment — Start a training course - POST /v1/training-courses/{id}/folder — Move a training course to a folder - POST /v1/training-courses/{id}/modules — Add training modules - GET /v1/training-courses/{id}/progress — Get my course progress - POST /v1/training-courses/{id}/restart — Restart a certified training course - GET /v1/training-folders — List training folders - POST /v1/training-folders — Create a training folder - GET /v1/training-folders/{id} — Get a training folder - PATCH /v1/training-folders/{id} — Update a training folder - DELETE /v1/training-folders/{id} — Delete a training folder - POST /v1/training-folders/{id}/move — Move a training folder - POST /v1/training-folders/{id}/move-contents — Move training folder contents - POST /v1/training-lesson-blocks/bulk-delete — Remove training lesson blocks - PATCH /v1/training-lesson-blocks/{id} — Update a training lesson block - POST /v1/training-lessons/batch — Add training lessons - POST /v1/training-lessons/bulk-delete — Remove training lessons - PATCH /v1/training-lessons/{id} — Update a training lesson - GET /v1/training-lessons/{id}/authoring — Get a training lesson for authoring - POST /v1/training-lessons/{id}/blocks — Create training lesson blocks - POST /v1/training-lessons/{id}/blocks/order — Reorder training lesson blocks - PUT /v1/training-lessons/{id}/completion — Set lesson completion - GET /v1/training-lessons/{id}/quiz-attempts — List my lesson quiz attempts - POST /v1/training-lessons/{id}/quiz-attempts — Submit a lesson quiz attempt - GET /v1/training-manager-reviews — List manager reviews - POST /v1/training-manager-reviews/{id}/decision — Decide a manager review - POST /v1/training-modules/bulk-delete — Remove training modules - PATCH /v1/training-modules/{id} — Update a training module - GET /v1/training-progress/completed — List my completed training - GET /v1/training-progress/dashboard — Get the current user training dashboard - GET /v1/training-progress/required — List my required training - GET /v1/training-settings — Get training settings - PATCH /v1/training-settings — Update training settings - GET /v1/training-video-progress — Get my video progress - PUT /v1/training-video-progress — Set my video progress - GET /v1/users — List users - POST /v1/users/invite — Invite an agency member - POST /v1/users/update-fields — Update user fields - GET /v1/users/{id} — Get a user - GET /v1/users/{id}/training-certifications — Check a user certification status - GET /v1/view-folders — List view folders - GET /v1/views — List views - POST /v1/views — Create a view - PATCH /v1/views — Update a view - DELETE /v1/views — Delete a view - POST /v1/views/bulk/delete — Bulk delete views in a folder - POST /v1/views/duplicate — Duplicate a view - POST /v1/views/move — Move a view to a folder - GET /v1/views/{id} — Get a view configuration - GET /v1/webhook-deliveries/inbound — List inbound webhook deliveries - GET /v1/webhook-deliveries/inbound/{id} — Get an inbound webhook delivery - GET /v1/webhook-deliveries/outbound — List outbound webhook deliveries - GET /v1/webhook-deliveries/outbound/{id} — Get an outbound webhook delivery - POST /v1/webhook-deliveries/outbound/{id}/redeliver — Redeliver an outbound webhook - POST /v1/workflow-catalogs/action-config-schema/query — Get an action configuration schema - POST /v1/workflow-catalogs/actions/query — Query automation actions - POST /v1/workflow-catalogs/control-flow-schema/query — Get an automation control-flow configuration schema - POST /v1/workflow-catalogs/integration-action-guidance/query — Get integration action guidance - GET /v1/workflow-catalogs/manual-trigger-buttons — List eligible manual-trigger buttons - POST /v1/workflow-catalogs/node-types/query — Get automation node types - GET /v1/workflow-catalogs/tenant-signatures — List tenant signatures for automation authoring - POST /v1/workflow-catalogs/trigger-config-schema/query — Get an automation trigger configuration schema - POST /v1/workflow-catalogs/trigger-filter-schema/query — Get an automation trigger filter schema - POST /v1/workflow-catalogs/triggers/query — Query automation triggers Full machine-readable spec: /v1/openapi.json Interactive reference: https://www.agencytitan.com/docs/