API
Callfora External API
CRM and automation API. Authenticate with a cf_ API key (X-API-Key or Bearer), send X-Tenant-Id, and include X-User-Email when the operation is user-scoped. SMS list and send are limited to conversations the acting user is assigned to.
Spec source: live OpenAPI from https://console.callfora.com/api/v1/openapi.json.
Version 1.1.0. Keys use the cf_ prefix. Required headers: X-API-Key (or Bearer) and X-Tenant-Id.
/api/v1/users
getList users in the tenant
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-Request-Idheader · stringsearchquery · string — Name, email, or extensionlimitquery · number — Max records (default 50, max 100)offsetquery · number — Pagination offsetcursorquery · string — Opaque cursor; prefer over offset for stable pages
/api/v1/contacts
getList contacts
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-Request-Idheader · stringsearchquery · string — Search querylimitquery · number — Max records (default 50, max 100)offsetquery · number — Pagination offsetcursorquery · string — Opaque cursor; prefer over offset for stable pages
postCreate a contact owned by the acting user
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringIdempotency-Keyheader · string — Replay-safe key for mutations. Reuse with a different body returns 409.
{
"firstName": "Ada",
"lastName": "Lovelace",
"phoneMobile": "+15551234567"
}/api/v1/click2dial
postStart a click-to-dial call from a user's extension
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringIdempotency-Keyheader · string — Replay-safe key for mutations. Reuse with a different body returns 409.
{
"destination": "+15551234567"
}/api/v1/cdr
getList call detail records
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-Request-Idheader · stringlimitquery · number — Max records (default 50, max 100)offsetquery · number — Pagination offset
/api/v1/chat/conversations
getList team chat conversations for the acting user
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringlimitquery · number — Max records (default 50, max 100)offsetquery · number — Pagination offset
postStart or return a direct chat with a teammate
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringIdempotency-Keyheader · string — Replay-safe key for mutations. Reuse with a different body returns 409.
{
"participantEmail": "teammate@example.com",
"message": "Hello"
}/api/v1/sms/conversations
getList SMS conversations assigned to the acting user (conversation assignee or SMS number membership)
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringsearchquery · string — Filter by number or namelimitquery · number — Max records (default 50, max 100)offsetquery · number — Pagination offsetcursorquery · string — Opaque cursor; prefer over offset for stable pages
/api/v1/sms/conversations/{id}/messages
getList messages in an SMS conversation the acting user can access
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringlimitquery · number — Max records (default 50, max 100)offsetquery · number — Pagination offsetcursorquery · string — Opaque cursor; prefer over offset for stable pagesidpath · required · string — Conversation id
postSend an SMS in a conversation the acting user can access
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringIdempotency-Keyheader · string — Replay-safe key for mutations. Reuse with a different body returns 409.idpath · required · string — Conversation id
{
"body": "Hello from the Integration Hub"
}/api/v1/ai/agents
getList AI agents for the tenant
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-Request-Idheader · string
/api/v1/ai/agents/{id}
getGet one AI agent
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-Request-Idheader · stringidpath · required · string — Agent id
/api/v1/ai/agents/{id}/test-chat
postSend a test chat turn to an AI agent
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-Request-Idheader · stringIdempotency-Keyheader · string — Replay-safe key for mutations. Reuse with a different body returns 409.idpath · required · string — Agent id
{
"messages": [
{
"role": "user",
"content": "What are your hours?"
}
]
}/api/v1/pricing/quote
postRealtime subscription quote for seats, DIDs, and billing term
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-Request-Idheader · string
{
"planId": "uuid",
"seatCount": 5,
"didCount": 2,
"billingTerm": "MONTHLY"
}/api/v1/chat/messages
getList messages in a team chat conversation
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringconversationIdquery · required · string — Conversation id
postSend a team chat message
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringIdempotency-Keyheader · string — Replay-safe key for mutations. Reuse with a different body returns 409.
{
"conversationId": "uuid",
"content": "Hello from the Integration Hub"
}/api/v1/files
getList files visible to the tenant
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-Request-Idheader · stringlimitquery · number — Max records (default 50, max 100)offsetquery · number — Pagination offset
/api/v1/calendar
getList calendar events for the acting user
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringstartDatequery · string — ISO startendDatequery · string — ISO endlimitquery · number — Max records (default 50, max 100)offsetquery · number — Pagination offsetcursorquery · string — Opaque cursor; prefer over offset for stable pages
postCreate a calendar event for the acting user
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringIdempotency-Keyheader · string — Replay-safe key for mutations. Reuse with a different body returns 409.
{
"title": "Customer follow-up",
"startTime": "2026-09-21T15:00:00.000Z",
"endTime": "2026-09-21T15:30:00.000Z"
}/api/v1/presence
getList presence for tenant users
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-Request-Idheader · string
putUpdate the acting user's presence
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-User-Emailheader · required · string — Acting user on the tenantX-Request-Idheader · stringIdempotency-Keyheader · string — Replay-safe key for mutations. Reuse with a different body returns 409.
{
"status": "busy",
"message": "On a customer call"
}/api/v1/fax
getList fax inbox, sent, or queue items for the tenant
Parameters
X-Tenant-Idheader · required · string — Tenant the key is allowed to accessX-Request-Idheader · stringtypequery · string — inbox, sent, or queuelimitquery · number — Max records (default 50, max 100)offsetquery · number — Pagination offset