Skip to content

Reply to a ticket as provider

POST
/api/v1/admin/tickets/{ticketID}/messages
curl --request POST \
--url https://api.aetherplatform.cloud/api/v1/admin/tickets/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "body": "example", "attachments": [ "example" ], "attachment_ids": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ] }'

Appends a provider-authored message (author_type = provider, author_id from the caller’s JWT subject) to any ticket’s thread. In one transaction it recomputes the ticket’s status (a provider reply on an open ticket moves it to in_progress), stamps first_response_at on the first provider message, and enqueues the ticket.updated webhook. A notification email to the tenant is sent best-effort after commit. Requires the platform-admin realm role.

ticketID
required
string format: uuid

Support ticket UUID.

Media typeapplication/json
object
body
required
string
attachments
Array
attachment_ids

IDs of pending attachments (previously reserved via the presign-upload endpoint) to confirm onto this message. Each id must be a pending upload owned by this ticket; any foreign/unknown id rejects the whole message (422) and rolls back the transaction.

Array<string>
Examplegenerated
{
"body": "example",
"attachments": [
"example"
],
"attachment_ids": [
"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
]
}

Message created.

Media typeapplication/json
object
id
required
string format: uuid
ticket_id
required
string format: uuid
author_id

JWT subject of the author; null for API-token requests.

string | null format: uuid
author_type
required
string
Allowed values: tenant provider
body
required
string
attachments

Opaque legacy attachments blob (structured attachments arrive in a later phase).

Array
created_at
required
string format: date-time
Example
{
"author_type": "tenant"
}

Missing or invalid credentials.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

The credential was accepted but lacks the required role or access (e.g. a non-platform-admin calling an /api/v1/admin endpoint).

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

The requested resource was not found.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

Request validation failed.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}