Skip to main content
POST
TypeScript
Send a reply into an existing agent conversation from server-side code. Use this when you are not running @novu/framework on the bridge (for example with the Python, Go, PHP, .NET, or Java SDKs), or when another backend service needs to post into a live conversation. The request body is a bag of optional actions. Provide at least one of reply, edit, resolve, signals, toolResults, toolApprovalRequest, addReactions, deleteMessages, typing, or error. Named examples in the OpenAPI spec cover the common shapes. When a reply or edit is delivered, the response data contains messageId and platformThreadId. Side-effect-only requests return data: null. For the TypeScript bridge API (ctx.reply, cards, signals), see Reply.

Authorizations

Authorization
string
header
required

API key authentication. Allowed headers-- "Authorization: ApiKey <novu_secret_key>".

Headers

idempotency-key
string

A header for idempotency purposes

Path Parameters

agentId
string
required

Agent identifier (slug) for the agent that owns the conversation.

Body

application/json

Reply payload. Provide at least one action: reply, edit, resolve, signals, toolResults, toolApprovalRequest, addReactions, deleteMessages, typing, or error. See named examples for common shapes used by server-side SDKs.

conversationId
string
required

Conversation id to reply into. Obtained from the inbound agent event / bridge payload.

Example:

"64f5a1c2e8b7a3d9f0c1b2a3"

integrationIdentifier
string
required

Channel integration identifier linked to the agent for this conversation (e.g. slack-support).

Example:

"slack-support"

reply
object

Outbound message content. Exactly one of markdown, card, or toolApprovalCard. Optional files attach to the message. Cannot be combined with edit.

toolApprovalRequest
object

Tool-lifecycle ledger row for a gated tool call. Pair with reply.toolApprovalCard (or another reply shape) to deliver the approval UI.

edit
object

In-place edit of a previously posted agent message. Cannot be combined with reply, resolve, signals, toolResults, toolApprovalRequest, addReactions, or deleteMessages.

resolve
object

Mark the conversation resolved. May be combined with a final reply.

signals
object[]

Side-effect signals executed during this turn: conversation metadata mutations or Novu workflow triggers.

toolResults
object[]

Tool-call outcomes to persist in conversation history (typically before the assistant reply).

addReactions
object[]

Emoji reactions to add to existing platform messages.

deleteMessages
object[]

Delete previously posted platform messages. Removes the rendered message only — history is preserved.

typing

Per-turn typing/status control. Pass { status?: string } to set/update the status (omit status for "Thinking…"), or "stop" to clear it. Best-effort per platform.

Available options:
stop
Example:
error
boolean

Bridge reports that the customer runtime failed this turn. Cannot be combined with other actions. Novu delivers generic user-facing error copy.

Example:

true

Response

object | null

OK. When a reply or edit is delivered, data contains the platform message identifiers. Side-effect-only requests (typing, reactions, deletes, signals without an outbound message) return data: null.

messageId
string
required

Platform-native message id of the delivered or edited message (e.g. Slack ts, Teams activity id).

Example:

"1712345678.123456"

platformThreadId
string
required

Platform-native thread / conversation id where the message was delivered.

Example:

"C0123456789"