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.
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
Parameters
No path or query parameters.
Request body
| Field | Type | Description |
|---|---|---|
| providerMessageId | string | Stable provider ID, unique within the company. Omit to derive an ID from this API key and Idempotency-Key. |
| channel | JSON object | Optional unless marked required. |
| directionrequired | INBOUND | OUTBOUND | Optional unless marked required. |
| fromrequired | string | Optional unless marked required. |
| torequired | string | Optional unless marked required. |
| occurredAtrequired | string | Optional unless marked required. |
| contentrequired | string | Optional unless marked required. |
| status | RECEIVED | SENT | DELIVERED | Inbound must be RECEIVED; outbound must be SENT or DELIVERED. Defaults to RECEIVED for inbound and SENT for outbound. |
| user | object | Optional unless marked required. |
| user.emailrequired | string | Optional unless marked required. |
| hint | object | Optional unless marked required. |
| hint.caseNumber | string | integer | Optional unless marked required. |
| hint.customerEmail | string | Optional unless marked required. |
{
"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
Message retained for matching; receipt contains id (the Message ID), eventId and status
#/components/schemas/OrgApiResourceEnvelope
Missing or invalid organization API key
#/components/schemas/OrgApiError
Organization billing access or an endpoint-specific business quota denied the request
#/components/schemas/OrgApiError
Missing required scope: communications:write
#/components/schemas/OrgApiError
Idempotency key or provider message ID already used with different details
#/components/schemas/OrgApiError
Rate limit exceeded
#/components/schemas/OrgApiError
Errors
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"}}'