Skip to content

Send Desk Reply

POST
/desk/decisions/{decision_id}/send-reply

SENDS AN EMAIL to a real person, then resolves the card.

Not idempotent, and it cannot be: the inbox send path carries no request id and no dedupe key. What protects a caller instead is the CARD: it is claimed before the send, guarded on still being pending, so only one request can win and a second gets a 409 having sent nothing.

A retry after a timeout is therefore safe in the usual case and silent in one: a crash between the claim and the send leaves a resolved card whose mail never went. That is deliberate - recoverable by a human, unlike a duplicate email, which cannot be recalled.

The opt-out check runs AGAIN here. reply-target already asked, but that answer is as old as the caller’s editing session and a STOP that arrived meanwhile must not be sent through.

Authorizations

Parameters

Path Parameters

decision_id
required

Decision id (UUID).

string

Decision id (UUID).

Header Parameters

X-Target-Org-Id
Any of:
string

Request Body required

The rep’s reply, as it will arrive in the prospect’s inbox.

An omitted subject keeps the thread’s own. The opt-out check runs AGAIN on send - reply-target already asked, but that answer is as old as the editing session and a STOP arriving while the rep typed must not be sent through.

object
body
required

The reply body. Reaches a real person.

string
>= 1 characters
subject
Any of:
string
<= 500 characters

Responses

200

Successful Response

object
data
required

An open envelope for one desk object.

Open on purpose - see the module docstring. A rebuilder gets every field the desk returns, including ones added after this contract version.

object
key
additional properties
any
pagination
Any of:
object
has_next
required

Whether there are more pages

boolean
limit
required

Items per page

integer
next_cursor
Any of:
string
notes
Any of:
Array<string>
page
required

Current page number (1-indexed)

integer
total
required

Total number of items

integer
total_available
Any of:
integer
total_is_lower_bound
Any of:
boolean

422

Validation Error

object
detail
Array<object>
object
loc
required
Array
msg
required
string
type
required
string