Resources API
Manage numbers, call flows, voicemails, SMS, and other resources via the API.
Before you call these endpoints
1. Create an API key in Settings → API & MCP.
2. Send it as Authorization: Bearer cs_key_....
3. Use your app role to determine access: viewer = read endpoints, manager = most write endpoints, admin or owner = billing and API key management.
There is no GET /api/v1/numbers/:id endpoint. Fetch your numbers from GET /api/v1/numbers and look up the ID client-side.
Numbers endpoints
Use these endpoints to read and manage tracking numbers. The screenshot below shows the in-app Numbers table — each row is one entry in the GET /api/v1/numbers response, and the columns map directly to fields like name, total_calls, call_flow_name, created_at, status, and sms_enabled.

GET /api/v1/numbers # List numbers (owned + assigned)
GET /api/v1/numbers/export # Export CSV
GET /api/v1/numbers/bulk-stats # Summary metrics
GET /api/v1/numbers/{id}/stats # Number stats
POST /api/v1/numbers/search # Search available numbers
POST /api/v1/numbers/purchase # Buy a number
PATCH /api/v1/numbers/{id} # Rename, reassign call flow, update status
DELETE /api/v1/numbers/{id} # Release a numberNumbers response shape
A successful API-key request is wrapped in a data envelope:
curl -H "Authorization: Bearer cs_key_..." \
https://callscaler.com/api/v1/numbers
{
"data": {
"numbers": [
{
"id": "uuid",
"phone_number": "+15735551234",
"name": "Google Ads Tampa",
"status": "active",
"call_flow_id": "uuid",
"call_flow_name": "Main Sales Flow",
"type": "local",
"number_source": "owned",
"total_calls": 42,
"sms_enabled": true,
"tcr_sw_state": "approved"
}
],
"total": 1
}
}Call flow endpoints
Call flows return the full config_json payload used by the editor.
GET /api/v1/call-flows # List call flows
GET /api/v1/call-flows/{id} # Get one flow
GET /api/v1/call-flows/{id}/numbers # List attached numbers
GET /api/v1/call-flows/{id}/versions # Version history
POST /api/v1/call-flows # Create
PUT /api/v1/call-flows/{id} # Update
DELETE /api/v1/call-flows/{id} # Delete
POST /api/v1/call-flows/{id}/duplicate # Duplicate
POST /api/v1/call-flows/{id}/versions/{version}/restore # Restore versionCall flow example
Get a call flow and inspect its routing config:
curl -H "Authorization: Bearer cs_key_..." \
https://callscaler.com/api/v1/call-flows/UUID
{
"data": {
"id": "uuid",
"name": "Google Ads - Plumbing",
"config_json": {
"steps": [
{ "type": "greeting" },
{ "type": "forward", "destination": "+18135551234" }
]
},
"config_version": 7
}
}Messaging and conversations
Messaging endpoints are business-scoped. The sender must be one of your numbers.
GET /api/v1/conversations # Conversation list
GET /api/v1/texts?contact={phone} # Thread messages
GET /api/v1/sms # SMS events
POST /api/v1/texts # Send outbound SMSSMS send example
Use from_number, to_number, and body in the request JSON:
curl -X POST -H "Authorization: Bearer cs_key_..." \
-H "Content-Type: application/json" \
-d '{"from_number":"+15735550001","to_number":"+18135551234","body":"Thanks for calling us today."}' \
https://callscaler.com/api/v1/textsPhone Bridge callbacks
POST /api/v1/outbound/dial
Start a callback from your own system, for example a CRM or dispatch tool, without the agent logging in to CallScaler. CallScaler rings connect_to (the agent's phone) from the tracking number first. When the agent answers, it dials to_number (the customer) and connects the two. The customer sees the tracking number as caller ID. The call is logged as an outbound call on that number and billed per minute once for both legs, plus the recording rate when record is on.
Requires the Outbound Calling extension to be enabled, a paid plan (not available during the free trial), and a key from a manager, admin or owner.
A 403 with code: trial_locked means the account is still on the free trial. A 403 without a code means the Outbound Calling extension is off. A 404 means from_number_id is not one of your numbers.
- •
from_number_id: theidof one of your numbers fromGET /api/v1/numbers - •
to_numberandconnect_to: E.164 format, for example+18135551234 - •
transcribe: trueturnsrecordon as well - •
GET /api/v1/outbound/recentlists recent outbound calls; the call also appears inGET /api/v1/callswithdirection=outbound
curl -X POST -H "Authorization: Bearer cs_key_..." \
-H "Content-Type: application/json" \
-d '{
"from_number_id": "uuid of your tracking number",
"to_number": "+18135551234",
"connect_to": "+18135559876",
"record": true,
"transcribe": false
}' \
https://callscaler.com/api/v1/outbound/dial
{
"data": {
"ok": true,
"call_sid": "provider call id",
"status": "queued"
}
}Other resource endpoints
These endpoints are commonly used with Resources API workflows:
- •
GET /api/v1/number-groups,POST /api/v1/number-groups, and member management endpoints - •
GET /api/v1/number-pools,POST /api/v1/number-pools, and pool membership endpoints - •
GET /api/v1/voicemails,GET /api/v1/voicemails/{id},GET /api/v1/voicemails/{id}/recording - •
GET /api/v1/forms,GET /api/v1/forms/{id} - •
GET /api/v1/dashboard/statsfor dashboard summary metrics - •
GET /api/v1/webhooks/deliveriesfor post-call webhook delivery logs
On this page