Style
Resources use POST action routes under/api/v1:
client.tickets.create() — not HTTP-verb REST.
Machine-readable contract: GET /api/v1/openapi.json (also checked into the gateway repo as openapi.json).
Idempotency
For safe retries on create and send_message (API key / OAuth only), send:IDEMPOTENCY_CONFLICT). APP session clients continue to use client mutationId + sync instead.
Reads
List and info responses wrap presented entities:Mutations (API key / OAuth)
Public writes always return identity (and usually the presented entity) plus sync ack fields when available.Create / update
data._id (or the SDK’s typed id accessor) for follow-up info / list calls — you do not need to re-list to discover the id.
Ticket create may also include contentLastSyncId when content is written separately.
Delete
ticket / ticketId) on top of this wire shape.
Auth
Bearer personal API key (sl_api_…) or OAuth access token (sl_oat_…). See Authentication.