Support

The Support module manages workspace support queues, customer tickets, public conversations, internal notes, assignments, priorities, and SLA targets.

What it does

Support is an app-plane module. It stores business support state inside the same tenant and workspace boundary as CRM, Tasks, Assets, Activity Log, CMS, and analytics data.

Use Support when a customer issue needs to become structured operational state:

  • Create queues or inboxes for product, billing, onboarding, or VIP support.
  • Create support tickets with status, priority, source, category, tags, assignee, owner, and SLA due dates.
  • Link tickets to contacts, companies, deals, leads, invoices, related tasks, related assets, and activity records.
  • Add public ticket messages for customer conversations.
  • Add internal ticket comments for private triage notes.
  • Query custom_fields JSON for workspace-specific routing, customer segment, environment, or product area.

Resource model

Core resources:

ResourcePurpose
support_queuesQueue or inbox configuration, default priority, default assignee, and response or resolution targets.
support_ticketsThe case record for a customer issue, request, incident, or escalation.
support_ticket_messagesCustomer-visible or internal conversation messages with direction, visibility, channel, author, and timestamp.
support_ticket_commentsInternal notes for triage, investigation, escalation, or handoff.

Ticket statuses:

  • new
  • open
  • pending
  • waiting_on_customer
  • resolved
  • closed

Ticket priorities:

  • low
  • normal
  • high
  • urgent

Tickets can store customer and revenue links through contact_id, company_id, deal_id, lead_id, and invoice_id. Related tasks, assets, and activities link from their own related_resource_type and related_resource_id fields using support_ticket.

REST surface

Support REST endpoints live under /v1/support/...:

  • GET /v1/support/queues
  • POST /v1/support/queues
  • GET /v1/support/tickets
  • POST /v1/support/tickets
  • PATCH /v1/support/tickets/{ticket_id}
  • GET /v1/support/tickets/{ticket_id}/messages
  • POST /v1/support/tickets/{ticket_id}/messages
  • GET /v1/support/tickets/{ticket_id}/comments
  • POST /v1/support/tickets/{ticket_id}/comments

All routes require the Support module to be enabled for the workspace before scope checks can succeed.

Permissions

Use support:read to list queues, tickets, messages, and comments. Use support:write to create queues, create or update tickets, add customer-visible messages, and add internal comments.

Recommended scoped agent credentials for support handoff:

support:read
support:write
crm:read
tasks:write
assets:read
activity:write

Add crm:write only when the agent is allowed to create or update contacts, companies, leads, deals, invoices, payments, or accounting records while handling support work.

Example workflow

Prompt:

A customer reported that their April invoice is wrong. Create an urgent billing support ticket, add the customer email as the first message, add an internal note for finance, create an owner task, link the invoice and screenshot asset, and log the handoff.

Expected operations:

  1. list_support_queues to find the billing queue.
  2. create_support_ticket with priority: urgent, invoice or customer links, tags, SLA due dates, and custom_fields.
  3. add_support_ticket_message with the inbound customer message.
  4. add_support_ticket_comment with private finance context.
  5. create_task linked to the support ticket.
  6. search_assets or create_asset_upload_intent for the screenshot or invoice attachment.
  7. log_activity linked to the support ticket or company.

Audit and usage

Support writes create audit events and usage events with request IDs. Use the request ID to connect a REST or MCP call to the ticket change, internal comment, task, asset link, activity log entry, and billing meter event.

Tenant and workspace isolation applies to every support read and write. A token for one workspace cannot list another workspace's tickets, even if the same WorkOS user belongs to both Teams.

MCP tools

create_support_queue

Create a support queue or inbox with default assignment and SLA targets.

MVP
Idempotent writesNo dry runStrict schema
Required scopes
support:write
API equivalent
POST /v1/support/queues

Example prompt

Create a priority support inbox with a two hour first response target.

Input schema

PropertyTypeRequiredDescription
keystringYesNo description yet.
namestringYesNo description yet.
descriptionstringNoNo description yet.
statusstring · active | paused | archivedNoNo description yet.
default_assignee_idstringNoNo description yet.
default_prioritystring · low | normal | high | urgentNoNo description yet.
first_response_target_minutesinteger · min 0NoNo description yet.
next_response_target_minutesinteger · min 0NoNo description yet.
resolution_target_minutesinteger · min 0NoNo description yet.
custom_fieldsobjectNoUser-defined queryable JSON fields.
idempotency_keystringNoNo description yet.

Additional properties are rejected.

Example input

{
  "key": "priority",
  "name": "Priority Support",
  "first_response_target_minutes": 120
}

Example response

{
  "queue": {
    "id": "queue_123",
    "key": "priority"
  },
  "request_id": "req_300"
}

Common errors

The token does not include the scope required for this operation.

The request payload failed schema validation.

The idempotency key was reused with a different request body.

list_support_queues

List support queues by status, search text, or custom field.

MVP
Read operationNo dry runStrict schema
Required scopes
support:read
API equivalent
GET /v1/support/queues

Example prompt

List active support queues.

Input schema

PropertyTypeRequiredDescription
querystringNoNo description yet.
statusstring · active | paused | archivedNoNo description yet.
custom_field_keystringNoNo description yet.
custom_field_valuestringNoNo description yet.
limitinteger · min 1 · max 100NoNo description yet.
cursorstringNoNo description yet.

Additional properties are rejected.

Example input

{
  "status": "active",
  "limit": 10
}

Example response

{
  "queues": [
    {
      "id": "queue_123",
      "name": "Priority Support"
    }
  ],
  "request_id": "req_301"
}

Common errors

The token does not include the scope required for this operation.

The request payload failed schema validation.

create_support_ticket

Create a support ticket linked to customers, CRM records, invoices, and SLA targets.

MVP
Idempotent writesNo dry runStrict schema
Required scopes
support:write
API equivalent
POST /v1/support/tickets

Example prompt

Create an urgent support ticket for a billing issue.

Input schema

PropertyTypeRequiredDescription
ticket_numberstringNoNo description yet.
subjectstringYesNo description yet.
descriptionstringNoNo description yet.
statusstring · new | open | pending | waiting_on_customerNoNo description yet.
prioritystring · low | normal | high | urgentNoNo description yet.
sourcestring · manual | email | chat | phone | web | api | mcp | slack | otherNoNo description yet.
categorystringNoNo description yet.
tagsarrayNoNo description yet.
queue_idstringNoNo description yet.
assignee_idstringNoNo description yet.
owner_idstringNoNo description yet.
contact_idstringNoNo description yet.
company_idstringNoNo description yet.
deal_idstringNoNo description yet.
lead_idstringNoNo description yet.
invoice_idstringNoNo description yet.
external_referencestringNoNo description yet.
first_response_due_atstring · date-timeNoNo description yet.
next_response_due_atstring · date-timeNoNo description yet.
resolution_due_atstring · date-timeNoNo description yet.
custom_fieldsobjectNoUser-defined queryable JSON fields.
idempotency_keystringNoNo description yet.

Additional properties are rejected.

Example input

{
  "subject": "Customer cannot download invoice",
  "priority": "urgent",
  "category": "billing"
}

Example response

{
  "ticket": {
    "id": "ticket_123",
    "subject": "Customer cannot download invoice",
    "status": "new"
  },
  "request_id": "req_302"
}

Common errors

The token does not include the scope required for this operation.

The request payload failed schema validation.

The requested resource does not exist in this workspace.

The idempotency key was reused with a different request body.

list_support_tickets

List support tickets by status, priority, queue, owner, customer links, search text, or custom field.

MVP
Read operationNo dry runStrict schema
Required scopes
support:read
API equivalent
GET /v1/support/tickets

Example prompt

Show urgent open support tickets.

Input schema

PropertyTypeRequiredDescription
querystringNoNo description yet.
statusstring · new | open | pending | waiting_on_customer | resolved | closedNoNo description yet.
prioritystring · low | normal | high | urgentNoNo description yet.
sourcestring · manual | email | chat | phone | web | api | mcp | slack | otherNoNo description yet.
categorystringNoNo description yet.
queue_idstringNoNo description yet.
assignee_idstringNoNo description yet.
contact_idstringNoNo description yet.
company_idstringNoNo description yet.
deal_idstringNoNo description yet.
lead_idstringNoNo description yet.
invoice_idstringNoNo description yet.
custom_field_keystringNoNo description yet.
custom_field_valuestringNoNo description yet.
limitinteger · min 1 · max 100NoNo description yet.
cursorstringNoNo description yet.

Additional properties are rejected.

Example input

{
  "status": "open",
  "priority": "urgent",
  "limit": 10
}

Example response

{
  "tickets": [
    {
      "id": "ticket_123",
      "priority": "urgent"
    }
  ],
  "request_id": "req_303"
}

Common errors

The token does not include the scope required for this operation.

The request payload failed schema validation.

update_support_ticket

Update support ticket status, priority, queue, assignment, tags, category, SLA targets, or custom fields.

MVP
Idempotent writesNo dry runStrict schema
Required scopes
support:write
API equivalent
PATCH /v1/support/tickets/{ticket_id}

Example prompt

Assign ticket_123 to the priority queue and mark it open.

Input schema

PropertyTypeRequiredDescription
ticket_idstringYesNo description yet.
statusstring · new | open | pending | waiting_on_customer | resolved | closedNoNo description yet.
prioritystring · low | normal | high | urgentNoNo description yet.
queue_idstringNoNo description yet.
assignee_idstringNoNo description yet.
owner_idstringNoNo description yet.
categorystringNoNo description yet.
tagsarrayNoNo description yet.
first_response_due_atstring · date-timeNoNo description yet.
next_response_due_atstring · date-timeNoNo description yet.
resolution_due_atstring · date-timeNoNo description yet.
custom_fieldsobjectNoNo description yet.
idempotency_keystringNoNo description yet.

Additional properties are rejected.

Example input

{
  "ticket_id": "ticket_123",
  "status": "open",
  "queue_id": "queue_123"
}

Example response

{
  "ticket": {
    "id": "ticket_123",
    "status": "open"
  },
  "request_id": "req_304"
}

Common errors

The token does not include the scope required for this operation.

The request payload failed schema validation.

The requested resource does not exist in this workspace.

add_support_ticket_message

Add an inbound, outbound, or internal message to a support ticket conversation.

MVP
Idempotent writesNo dry runStrict schema
Required scopes
support:write
API equivalent
POST /v1/support/tickets/{ticket_id}/messages

Example prompt

Add the customer's latest email to ticket_123.

Input schema

PropertyTypeRequiredDescription
ticket_idstringYesNo description yet.
directionstring · inbound | outbound | internalNoNo description yet.
visibilitystring · public | internalNoNo description yet.
channelstring · manual | email | chat | phone | web | api | mcp | slack | otherNoNo description yet.
subjectstringNoNo description yet.
bodystringYesNo description yet.
author_namestringNoNo description yet.
author_emailstringNoNo description yet.
external_message_idstringNoNo description yet.
occurred_atstring · date-timeNoNo description yet.
custom_fieldsobjectNoNo description yet.
idempotency_keystringNoNo description yet.

Additional properties are rejected.

Example input

{
  "ticket_id": "ticket_123",
  "direction": "inbound",
  "channel": "email",
  "body": "I still cannot access the invoice."
}

Example response

{
  "message": {
    "id": "msg_123",
    "ticket_id": "ticket_123"
  },
  "request_id": "req_305"
}

Common errors

The token does not include the scope required for this operation.

The request payload failed schema validation.

The requested resource does not exist in this workspace.

The idempotency key was reused with a different request body.

list_support_ticket_messages

List conversation messages for a support ticket.

MVP
Read operationNo dry runStrict schema
Required scopes
support:read
API equivalent
GET /v1/support/tickets/{ticket_id}/messages

Example prompt

Show the conversation for ticket_123.

Input schema

PropertyTypeRequiredDescription
ticket_idstringYesNo description yet.
querystringNoNo description yet.
custom_field_keystringNoNo description yet.
custom_field_valuestringNoNo description yet.
limitinteger · min 1 · max 100NoNo description yet.
cursorstringNoNo description yet.

Additional properties are rejected.

Example input

{
  "ticket_id": "ticket_123",
  "limit": 25
}

Example response

{
  "messages": [
    {
      "id": "msg_123",
      "body": "I still cannot access the invoice."
    }
  ],
  "request_id": "req_306"
}

Common errors

The token does not include the scope required for this operation.

The request payload failed schema validation.

The requested resource does not exist in this workspace.

add_support_ticket_comment

Add an internal note or pinned comment to a support ticket.

MVP
Idempotent writesNo dry runStrict schema
Required scopes
support:write
API equivalent
POST /v1/support/tickets/{ticket_id}/comments

Example prompt

Add an internal note to ticket_123 that finance is checking the invoice.

Input schema

PropertyTypeRequiredDescription
ticket_idstringYesNo description yet.
bodystringYesNo description yet.
pinnedbooleanNoNo description yet.
custom_fieldsobjectNoNo description yet.
idempotency_keystringNoNo description yet.

Additional properties are rejected.

Example input

{
  "ticket_id": "ticket_123",
  "body": "Finance is checking the invoice export.",
  "pinned": true
}

Example response

{
  "comment": {
    "id": "comment_123",
    "pinned": true
  },
  "request_id": "req_307"
}

Common errors

The token does not include the scope required for this operation.

The request payload failed schema validation.

The requested resource does not exist in this workspace.

The idempotency key was reused with a different request body.

list_support_ticket_comments

List internal comments and notes for a support ticket.

MVP
Read operationNo dry runStrict schema
Required scopes
support:read
API equivalent
GET /v1/support/tickets/{ticket_id}/comments

Example prompt

Show internal notes for ticket_123.

Input schema

PropertyTypeRequiredDescription
ticket_idstringYesNo description yet.
querystringNoNo description yet.
custom_field_keystringNoNo description yet.
custom_field_valuestringNoNo description yet.
limitinteger · min 1 · max 100NoNo description yet.
cursorstringNoNo description yet.

Additional properties are rejected.

Example input

{
  "ticket_id": "ticket_123",
  "limit": 25
}

Example response

{
  "comments": [
    {
      "id": "comment_123",
      "body": "Finance is checking the invoice export."
    }
  ],
  "request_id": "req_308"
}

Common errors

The token does not include the scope required for this operation.

The request payload failed schema validation.

The requested resource does not exist in this workspace.

Was this page helpful?