Send an agent reply
Send a message or side-effect into an existing agent conversation from your backend.
Use this endpoint when you are not using @novu/framework (for example Python, Go, PHP, .NET, or Java SDKs),
or when a server process outside the bridge needs to post into a live conversation.
Message actions
reply— markdown, interactive card, or tool-approval card (optionalfiles)edit— update a previously delivered message in placedeleteMessages— remove rendered platform messages (history is kept)addReactions— add emoji reactions to existing messages
Turn control
typing—{ status?: string }to set status, or"stop"to clearresolve— mark the conversation resolved (optionally with a final reply)error: true— report a customer-runtime failure (cannot combine with other actions)
Signals & tools
signals— metadata set/delete/clear, or trigger a Novu workflowtoolResults— persist tool outputs into conversation historytoolApprovalRequest— ledger a gated tool call (pair with an approval card reply)
Returns { data: { messageId, platformThreadId } } when a reply or edit is delivered;
otherwise { data: null }.
@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
API key authentication. Allowed headers-- "Authorization: ApiKey <novu_secret_key>".
Headers
A header for idempotency purposes
Path Parameters
Agent identifier (slug) for the agent that owns the conversation.
Body
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.
Conversation id to reply into. Obtained from the inbound agent event / bridge payload.
"64f5a1c2e8b7a3d9f0c1b2a3"
Channel integration identifier linked to the agent for this conversation (e.g. slack-support).
"slack-support"
Outbound message content. Exactly one of markdown, card, or toolApprovalCard. Optional files attach to the message. Cannot be combined with edit.
- Option 1
- Option 2
- Option 3
Tool-lifecycle ledger row for a gated tool call. Pair with reply.toolApprovalCard (or another reply shape) to deliver the approval UI.
In-place edit of a previously posted agent message. Cannot be combined with reply, resolve, signals, toolResults, toolApprovalRequest, addReactions, or deleteMessages.
Mark the conversation resolved. May be combined with a final reply.
Side-effect signals executed during this turn: conversation metadata mutations or Novu workflow triggers.
- Option 1
- Option 2
- Option 3
- Option 4
Tool-call outcomes to persist in conversation history (typically before the assistant reply).
Emoji reactions to add to existing platform messages.
Delete previously posted platform messages. Removes the rendered message only — history is preserved.
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.
stop Bridge reports that the customer runtime failed this turn. Cannot be combined with other actions. Novu delivers generic user-facing error copy.
true
Response
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.