---
title: "Support for your Customers"
url: /interfaces/support
---

# Support for your Customers

> Help requests on every channel with the calls attached, response promises per plan, a person one step away, and a help centre generated with the docs.

Every product answers its own Customers: a help centre generated with the docs, help requests on every channel, and a person one step away.

```mermaid title="A help request, from asked to solved"
stateDiagram-v2
  [*] --> open: a Customer asks
  open --> answered: the agent
  answered --> with_person: handed over
  with_person --> waiting: a question
  waiting --> with_person: a reply
  with_person --> resolved: solved
  answered --> resolved: enough
```

## Where a Customer asks
A help request is one thread, so its messages, its calls and its answers sit together on every channel it touches.

| The Customer uses | The request arrives |
| --- | --- |
| The portal's form or chat | With the member signed in, its org and its plan |
| An email to the address on the product's [Host](/reference/platform.md#host) | Matched to the member by its address |
| `openHelpRequest` over MCP | From a Customer's agent, under the same [Key](/reference/platform.md#key) or mandate as every call, with its state as data |

Each request carries any request id, [Action](/workflow.md#the-lifecycle), receipt or record it names, with the calls behind them one step away for whoever answers.

## Agent or person: who answers
With `help.agent`, an agent answers first, from the help centre and the asker's own records.

Find the request on the left to see who takes it.

| The request | Who answers it |
| --- | --- |
| A question the help centre answers | The agent, citing each article it used |
| A question it cannot cite an answer for | A person, from the agent's [handoff packet](/work/agents.md) |
| Anything about money, a dispute or a complaint | A person |
| An urgent request | A person |
| "Talk to a person", on any channel | A person, in one step |

The answering agent reads only; it never moves money or changes a record, and every reply it drafts is kept with the request. Your team works one queue on the [Operator plane](/trust/planes.md), each request with its calls, its clock and the agent's packet, through `HelpRequest.list`, `HelpRequest.reply` and `HelpRequest.assign`.

## The promise, and its clock
`help.respond` sets the time to a first answer per plan, from a person or from an agent that cites one.

`help.urgent` sets a shorter time for an outage or a stopped business.

### Example
The filing service answers within four hours on weekdays, within one when urgent, and hands anything it cannot cite to a paralegal.

```ts title="definition.ts"
import { define, agentic } from 'apis.dev'

/** Annual reports for each client, filed with the state once the client signs, with help a person stands behind. */
export default define({
  name: 'filings', domain: 'filings.apis.dev',
  roles: { paralegal: { see: { Filing: 'all' } } },
  Filing: {
    company: 'string', year: 'number',
    status: {
      order: [],
      sign: { in: 'ordered', floor: 'signature' },
      file: { in: 'signed', run: agentic('File the signed report with the state') },
      accept: 'filed', reject: 'filed',
    },
  },
  help: {
    channels: ['portal', 'email', 'chat', 'mcp'],
    respond: '4h', urgent: '1h', hours: 'weekdays',
    agent: true, person: 'paralegal',              // who takes over from the agent
  },
  offer: {
    'Filing.order': { price: 25, when: 'accepted', accept: 'customer',
                      acceptWithin: '7d', remedy: 'redo', grade: 'measured' },
  },
})
```

A client's agent asks why its filing waits, and the answer cites the guide.

```http title="Response"
HTTP/1.1 201 Created
Content-Type: application/json
Location: /help/requests/help_9
X-Cost: price=0, currency="USD"
X-Request-Id: req_0c5e2b97a1d84f36e7b1

{
  "id": "help_9",
  "state": "answered",
  "priority": "normal",
  "about": ["filing_3"],
  "answer": {
    "by": "agent",
    "text": "filing_3 waits on your signature at the link sent on 2026-10-26.",
    "cites": ["https://filings.apis.dev/help/sign-a-filing"]
  },
  "promise": { "by": "2026-10-27T18:00:00Z", "met": true },
  "person": "https://filings.apis.dev/help/requests/help_9/person"
}
```

The agent sent `POST https://filings.apis.dev/help/requests`; over MCP the same request is `openHelpRequest`.

The clock runs in `help.hours` and pauses while a request waits on the Customer. A breach writes an Event and, where an [agreement](/commerce/agreements.md#sla) sells it, a credit. A request is `normal` or `urgent`; an open [incident](/trust.md) makes every request about it urgent, and answers each with its status page.

### The help centre
The help centre is never a second set of docs: it is the same pages at `/help`, ranked for a Customer's question.

It holds an article per task the file describes, a page per refusal with its cure, the status and the changelog, in every [locale](/interfaces/locales.md). An article is `generated` at each deploy, `edited` by an override of your own, and `stale` when a deploy changes what an edited article describes.

After a request is `resolved`, the asker gets a one-question rating and 7 days to reopen it before it is `closed`. Each help-centre search with no answer is counted as a gap you can read.