Replies
Post customer-facing replies or internal notes to an issue thread.
Post a customer-facing reply or an internal note to an issue thread.
mutation Reply($input: ReplyToIssueInput!) {
replyToIssue(input: $input) {
messageId
delivery
error { code message }
}
}{
"input": {
"issueId": "<issue-id>",
"body": "Thanks for reaching out — we've reset your password.",
"isInternal": false
}
}- Set
isInternal: truefor a note only your team can see. deliveryreports how the reply was sent:in_thread(recorded only) or an egress status (pending/delivered/failed), depending on the issue's source channel and your integration's reply-delivery configuration.- For issues created through this API, outbound delivery is configured in Settings → API → Outbound replies: choose no outbound replies, email from Clad, or a signed webhook event.
Requires the thread:reply scope.
Replying on helpdesk-mirrored tickets
If the workspace has Pylon or Zendesk connected, tickets mirrored from the
helpdesk are regular issues in this API — but replies to them are delivered
into the helpdesk itself, as the connected support seat. delivery returns
pylon or zendesk on success (pylon_deduplicated / zendesk_deduplicated
when an identical retry was already sent — the send is idempotent, so retrying
never double-posts).
Delivery is all-or-nothing: if the helpdesk rejects the reply, the mutation returns an error and nothing is recorded. Two errors are worth handling:
FORBIDDEN— the connection is in Observe mode (Clad never writes to the helpdesk) or paused. An admin can switch it to Assist in Settings → Integrations.CONFLICT— the same reply is already being sent by a concurrent request.
Internal notes (isInternal: true) stay in Clad and are never written to the
helpdesk.