---
title: "Answer a permission request"
method: POST
path: "/v1/conversations/{id}/permissions/{permission_id}/answer"
tags: ["Conversations"]
---

# Answer a permission request

`POST /v1/conversations/{id}/permissions/{permission_id}/answer`

## Request

- Base URL: `https://api.shardflux.dev`
- URL: `https://api.shardflux.dev/v1/conversations/{id}/permissions/{permission_id}/answer`
- Auth: HTTP bearer

## Path parameters

- `id` string, required
- `permission_id` string, uuid, required

## Request body

- object: A permission request takes a `decision`. A question (its `questions` set) takes `answers` (its decision is then allow_once), or `decision: "deny"` to decline it.
  - `decision` 'allow_once' | 'allow_always' | 'deny'
  - `answers` object: The answer to each question, keyed by its `question` text: an option label or your own words; a list of labels for a multi_select question.

## Response `200`

Default Response

- object
  - `permission` ConversationPermission, required
    - `id` string, uuid, required: UUIDv7, lowercase canonical form.
    - `conversation_id` string, required
    - `state` 'pending' | 'answered' | 'canceled', required
    - `tool` string, nullable, required: The tool the agent wants to use, as its harness names it (Bash, Edit, apply_patch, an MCP tool). Null when the harness does not say.
    - `kind` string, nullable, required: What the tool does when the harness says: execute, edit, read, delete, move, search, fetch or other.
    - `title` string, required: What the agent wants to do, on one line (“Run npm test”).
    - `detail` string, required: The command, path, URL or input the request is about; empty when the title says it all.
    - `options` string[], required: The decisions this request takes. Empty: answer it where the agent runs (its terminal or app).
    - `decision` 'allow_once' | 'allow_always' | 'deny', nullable, required
    - `answered_via` 'api' | 'agent', nullable, required
    - `created_at` string, date-time, required: RFC 3339 UTC timestamp with Z.
    - `answered_at` string, date-time, nullable, required: RFC 3339 UTC timestamp with Z.
    - `questions` object[], nullable: Set when the request is the agent’s question (kind `question`): answer it with `answers`.
      - `question` string, required: The question, as the agent asks it; the key of its answer.
      - `header` string, nullable, required: A short label for the question, when the agent gives one.
      - `options` object[], required: The answers the agent offers. Another answer in your own words goes as written.
        - `label` string, required
        - `description` string, nullable, required
      - `multi_select` boolean, required: Whether more than one option can be picked.
    - `answers` object, nullable: The answer to each question, keyed by its `question` text: an option label or your own words; a list of labels for a multi_select question.

## Other responses

- `4XX`: Default Response
- `5XX`: Default Response

---

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