---
title: "Answer a notice"
method: POST
path: "/notices/{id}/respond"
tags: ["Notices"]
---

# Answer a notice

`POST /notices/{id}/respond`

## Request

- Base URL: `https://api.atako.ai`
- URL: `https://api.atako.ai/notices/{id}/respond`
- Auth: HTTP bearer

The recipient, or an admin of the notice's company, picks one of the notice's `options`. Answering is one-shot: a second call gets 409 NOTICE_NOT_OPEN rather than overwriting the first decision. Answering a `guardrail` with `always` makes the permission standing — the same agent asking the same subject again is answered instantly, with no new notice.

## Path parameters

- `id` string, uuid, required

## Request body

- RespondNoticeRequest
  - `option` string, required: The `id` of one of the notice's `options`.
  - `text` string: Required and non-empty when the chosen option has `free: true`; ignored otherwise.

## Response `200`

The answered notice, with its `answer` filled in.

- object
  - `notice` Notice, required
    - `id` string, uuid, required
    - `agentId` string, uuid, required
    - `agentName` string, required
    - `recipientUserId` string, uuid, required
    - `recipientName` string
    - `kind` 'blocker' | 'guardrail' | 'choice' | 'info', required: Blocked / permission asked / arbitration / information. The first three are blocking: the agent waits.
    - `priority` 'critical' | 'high' | 'normal' | 'low', required
    - `subject` string, required: Short, stable — the deduplication key is derived from it, together with the origin: the same subject raised from two different sessions is two questions.
    - `question` string, required
    - `options` NoticeOption[], required
      - `id` string, required: Answer id — what you send back in `POST /notices/{id}/respond`.
      - `label` string, required
      - `tone` 'ok' | 'warn' | 'bad' | 'quiet': Suggested button colour.
      - `free` boolean: When true, this option opens a free-text field and `text` becomes required on respond.
    - `state` 'open' | 'answered' | 'expired' | 'withdrawn', required
    - `createdAt` string, date-time, required
    - `answeredAt` string, date-time, nullable
    - `expiresAt` string, date-time, nullable
    - `settledAt` string, date-time, required: `answeredAt` if answered, else `createdAt` — always set, including on an open notice. The one reliable date to show on a settled notice with no answer (`expired`/`withdrawn`).
    - `origin` NoticeOrigin: Where the question came from — the work object that raised it. Declared by the agent when it raises the notice, never guessed server-side. `null` on a notice raised before origins existed.
      - `kind` 'chat' | 'cron' | 'email' | 'webhook' | 'interagent' | 'subagent', required
      - `conversationId` string, uuid, nullable, required: The chat session, for `chat` origins only. This is what the session deep link carries.
      - `refId` string, nullable, required: The object id (always a uuid) for the five other kinds: email threadId, webhook endpointId, interagent contextId, cron job, sub-agent. `null` when the declared id resolves to nothing — a cron/sub-agent id is resolved against the agent's own rows (a raw Hermes job id or a sub-agent engine id is accepted and mapped to its Atako uuid).
      - `label` string, nullable, required: Human-readable name of that object (session title, thread subject, job title). `null` when it has none or has since been deleted — the link still works, it just shows the kind.
    - `answer` NoticeAnswer: The human decision, once made. `respondedByName` is frozen at answer time so the decision stays readable after the account is gone.
      - `chosenOption` string, nullable, required
      - `freeText` string, nullable
      - `respondedBy` string, uuid, nullable
      - `respondedByName` string, nullable
      - `createdAt` string, date-time, required

## Other responses

- `400`: INVALID_INPUT / UNKNOWN_OPTION / TEXT_REQUIRED
- `401`: Missing, malformed, or invalid bearer token / API key, or revoked session (SESSION_REVOKED).
- `403`: The caller does not have the required role/permission.
- `404`: Not found, or the caller is not authorized to access this resource.
- `409`: NOTICE_NOT_OPEN — already answered, expired or withdrawn.

---

[API](https://skmtc.dev/atako/apis/atako-api.md) · [All operations](https://skmtc.dev/atako/apis/atako-api/llms.txt) · [OpenAPI document](https://skmtc.dev/atako/apis/atako-api/revisions/aa555c56fbd7?raw)
