Docs

Guides

SMS and chat

Two channels: tenant SMS numbers for customers, and internal chat between users. Both require X-User-Email.

SMS

List threads the acting user can access with GET /api/v1/sms/conversations. Access is limited to conversations assigned to that user or to an SMS number they own or share. List messages with GET /api/v1/sms/conversations/{id}/messages. Send with POST /api/v1/sms/conversations/{id}/messages and a text body.

There is no /api/v1/sms/messages shortcut. Delivery uses the platform carrier path on live tenants. Sandbox tenants return a simulated send and never reach a carrier.

SMS
curl -X POST "https://console.callfora.com/api/v1/sms/conversations/{id}/messages" \
  -H "X-API-Key: cf_your_api_key_here" \
  -H "X-Tenant-Id: your-tenant-uuid" \
  -H "X-User-Email: user@example.com" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: crm-sms-001" \
  -d '{"body":"Hello from Integration Hub"}'

Internal chat

GET /api/v1/chat/conversations lists rooms for the user in X-User-Email. Start a direct thread with a teammate's email, then POST /api/v1/chat/messages with conversationId and content.

Chat
curl -X POST "https://console.callfora.com/api/v1/chat/messages" \
  -H "X-API-Key: cf_your_api_key_here" \
  -H "X-Tenant-Id: your-tenant-uuid" \
  -H "X-User-Email: user@example.com" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: chat-message-001" \
  -d '{"conversationId":"00000000-0000-0000-0000-000000000000","content":"Hello"}'

Isolation

Conversations never cross tenants. Path and body IDs are untrusted until the API loads the row with the authenticated tenant.