> This page is for Referencia de la API.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://signalcore.ai/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://signalcore.ai/docs/_mcp/server.

# Decide

POST https://signalcore.ai/v1/conversations/{conversation_id}/decisions
Content-Type: application/json

The business's yes or no on an action the conversation waits on for it (`request`, the
call's id, as `waiting` and the `approval.requested` webhook name it), from its backend or
the app: the agent runs it, or hears it was declined, on its next turn. A person can't decide
for the business.

Reference: https://signalcore.ai/docs/referencia/conversaciones/decide

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Path parameters

- `conversation_id` (string, required)

### Body (application/json)

This endpoint expects an object.

- `request` (string, required)
- `approve` (boolean, required)

## Response

### 202

Successful Response

- `id` (string, required)
- `agent_id` (string, required)
- `trigger_id` (string, required, nullable)
- `handled_by` (enum, required)
  - Allowed values: `agent`, `person`, `nobody`
- `pending` (boolean, required)
- `test` (boolean, required)
- `created_at` (datetime, required)
- `run_id` (string, optional, nullable)
- `handover` (HandoverOut, optional, nullable) — A change of who answers a conversation: to whom, why, who set it and when.
- `title` (string, optional, nullable)
- `channel` (ChannelGlance, optional, nullable) — The channel a conversation is on, as a list draws it.
- `contact` (ContactGlance, optional, nullable) — The person a conversation on a channel is with, or a person of a host's page (on no channel).
- `reply_due_at` (datetime, optional, nullable)
- `last_inbound_at` (datetime, optional, nullable)
- `call` (CallGlance, optional, nullable) — The call a conversation is (VOICE.md): the owner's in the browser or a phone call, when the worker took it and when it ended, why and how long.
- `person` (PersonOut, optional, nullable) — Who a conversation is with (`people`).

## Errors

### 422 Conversations Decide Request Unprocessable Entity Error

Validation Error

- `detail` (list of ValidationError, optional)

## Types

### HandoverOut

A change of who answers a conversation: to whom, why, who set it and when.

- `holder` (enum, required)
  - Allowed values: `agent`, `person`, `nobody`
- `reason` (string, required)
- `by` (string, required)
- `title` (string, required, nullable)
- `at` (datetime, required)

### ChannelGlance

The channel a conversation is on, as a list draws it.

- `id` (string, required)
- `kind` (string, required)
- `name` (string, required)

### ContactGlance

The person a conversation on a channel is with, or a person of a host's page (on no channel).

- `id` (string, required)
- `name` (string, required, nullable)
- `address` (string, required)
- `muted` (boolean, optional, default: false)

### CallGlance

The call a conversation is (VOICE.md): the owner's in the browser or a phone call, when the worker took it and when it ended, why and how long.

- `id` (string, required)
- `kind` (enum, required)
  - Allowed values: `browser`, `phone`
- `reason` (string, required, nullable)
- `seconds` (integer, required, nullable)
- `started_at` (datetime, required, nullable)
- `ended_at` (datetime, required, nullable)
- `recording` (boolean, optional, default: false)

### PersonOut

Who a conversation is with (`people`).

- `kind` (enum, required)
  - Allowed values: `host_person`, `visitor`, `contact`, `owner`
- `external_id` (string, required)
- `name` (string, required, nullable)
- `email` (string, required, nullable)

### ValidationError

- `loc` (list of ValidationErrorLocItem, required)
- `msg` (string, required)
- `type` (string, required)
- `input` (any, optional)
- `ctx` (map from string to any, optional)

### ValidationErrorLocItem

## Examples

**Request**

```json
{
  "request": "request",
  "approve": true
}
```

**Response**

```json
{
  "id": "id",
  "agent_id": "agent_id",
  "trigger_id": "trigger_id",
  "handled_by": "agent",
  "pending": true,
  "test": true,
  "created_at": "2024-01-15T09:30:00Z",
  "run_id": "run_id",
  "handover": {
    "holder": "agent",
    "reason": "reason",
    "by": "by",
    "title": "title",
    "at": "2024-01-15T09:30:00Z"
  },
  "title": "title",
  "channel": {
    "id": "id",
    "kind": "kind",
    "name": "name"
  },
  "contact": {
    "id": "id",
    "name": "name",
    "address": "address",
    "muted": true
  },
  "reply_due_at": "2024-01-15T09:30:00Z",
  "last_inbound_at": "2024-01-15T09:30:00Z",
  "call": {
    "id": "id",
    "kind": "browser",
    "reason": "reason",
    "seconds": 1,
    "started_at": "2024-01-15T09:30:00Z",
    "ended_at": "2024-01-15T09:30:00Z",
    "recording": true
  },
  "person": {
    "kind": "host_person",
    "external_id": "external_id",
    "name": "name",
    "email": "email"
  }
}
```

**SDK Code**

```python
import requests

url = "https://signalcore.ai/v1/conversations/conversation_id/decisions"

payload = {
    "request": "request",
    "approve": True
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```