solarOS Organization API

Organization API

Log a text handled by another phone system

Logs an SMS already received or sent by a phone system; this endpoint does not send a text. Requires conversations and phoneSystem enabled. Customer matching and staff review follow the call endpoint. Use E.164 numbers and a timestamp with an explicit offset. Processing is asynchronous; 202 returns id (the Message ID), eventId and status in the data envelope. Repeating an identical request returns the same receipt; reusing a key or provider message ID with different details returns 409. Maximum request body: 100,000 bytes.

/api/v1/communications/messages

Logs an SMS already received or sent by a phone system; this endpoint does not send a text. Requires conversations and phoneSystem enabled. Customer matching and staff review follow the call endpoint. Use E.164 numbers and a timestamp with an explicit offset. Processing is asynchronous; 202 returns id (the Message ID), eventId and status in the data envelope. Repeating an identical request returns the same receipt; reusing a key or provider message ID with different details returns 409. Maximum request body: 100,000 bytes.

Log a text handled by another phone system. Use an organization API key with communications:write. Check the response envelope and meta.requestId before triggering dependent workflow steps.

Required scopes

communications:writeIdempotency-Key required

Parameters

No path or query parameters.

Request body

objectrequired
FieldTypeDescription
providerMessageIdstringStable provider ID, unique within the company. Omit to derive an ID from this API key and Idempotency-Key.
channelJSON objectOptional unless marked required.
directionrequiredINBOUND | OUTBOUNDOptional unless marked required.
fromrequiredstringOptional unless marked required.
torequiredstringOptional unless marked required.
occurredAtrequiredstringOptional unless marked required.
contentrequiredstringOptional unless marked required.
statusRECEIVED | SENT | DELIVEREDInbound must be RECEIVED; outbound must be SENT or DELIVERED. Defaults to RECEIVED for inbound and SENT for outbound.
userobjectOptional unless marked required.
user.emailrequiredstringOptional unless marked required.
hintobjectOptional unless marked required.
hint.caseNumberstring | integerOptional unless marked required.
hint.customerEmailstringOptional unless marked required.
logcommunicationmessageRequest
{
  "providerMessageId": "phone-system:message-2417",
  "channel": "SMS",
  "direction": "INBOUND",
  "from": "+17075550101",
  "to": "+17075550102",
  "occurredAt": "2026-09-12T17:03:00Z",
  "content": "I am home after three.",
  "hint": {
    "caseNumber": "2417"
  }
}

Responses

202

Message retained for matching; receipt contains id (the Message ID), eventId and status

#/components/schemas/OrgApiResourceEnvelope

401

Missing or invalid organization API key

#/components/schemas/OrgApiError

402

Organization billing access or an endpoint-specific business quota denied the request

#/components/schemas/OrgApiError

403

Missing required scope: communications:write

#/components/schemas/OrgApiError

409

Idempotency key or provider message ID already used with different details

#/components/schemas/OrgApiError

429

Rate limit exceeded

#/components/schemas/OrgApiError

Errors

401 Missing or invalid organization API key402 Organization billing access or an endpoint-specific business quota denied the request403 Missing required scope: communications:write409 Idempotency key or provider message ID already used with different details429 Rate limit exceeded

Static examples

curl -X POST "$SOLAROS_BASE_URL/api/v1/communications/messages" \
  -H "Authorization: Bearer $SOLAROS_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SOLAROS_IDEMPOTENCY_KEY" \
  --data '{"providerMessageId":"phone-system:message-2417","channel":"SMS","direction":"INBOUND","from":"+17075550101","to":"+17075550102","occurredAt":"2026-09-12T17:03:00Z","content":"I am home after three.","hint":{"caseNumber":"2417"}}'