---
title: "Send an ephemeral activity signal to a conversation"
method: POST
path: "/v5/conversations/{id}/signal"
tags: ["Conversations (v5)"]
---

# Send an ephemeral activity signal to a conversation

`POST /v5/conversations/{id}/signal`

## Request

- Base URL: `https://api.carbonvoice.app`
- URL: `https://api.carbonvoice.app/v5/conversations/{id}/signal`
- Auth: one of:
  - API key in header `pxtoken`
  - OAuth 2 (implicit, authorization URL `https://api.carbonvoice.app/oauth/authorize`)

Broadcasts a transient status (typing, thinking, tool_call, searching, processing) to clients currently viewing the conversation. Nothing is persisted; senders should re-post every 1-2 seconds while the activity lasts and receivers expire via ttl_ms.

## Path parameters

- `id` string, required

## Request body

- SendConversationSignalPayload
  - `signal_type` 'typing' | 'thinking' | 'tool_call' | 'searching' | 'processing', required: Kind of activity being signaled
  - `body` string: Optional display text, e.g. "Analyzing sentiment across 12 messages"
  - `ttl_ms` number: Client-side expiry hint in milliseconds
  - `message_id` string: Optional message this signal is about. Async agents process several messages in parallel, so a signal needs to be able to name one.

## Response `204`

## Other responses

- `400`
- `404`

---

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