Resources API

Manage numbers, call flows, voicemails, SMS, and other resources via the API.

Numbers

List, search, purchase, update, and release tracking numbers.

GET    /api/v1/numbers              # List all numbers
GET    /api/v1/numbers/:id          # Get a single number
POST   /api/v1/numbers/search       # Search available numbers by area code
POST   /api/v1/numbers/purchase      # Purchase a number
PATCH  /api/v1/numbers/:id          # Update a number (rename, assign call flow)
DELETE /api/v1/numbers/:id          # Release a number

Numbers: Example

List all tracking numbers for your business:

curl -H "Authorization: Bearer cs_key_..." \
  https://callscaler.com/api/v1/numbers

# Response
{
  "data": {
    "numbers": [
      {
        "id": "uuid",
        "phone_number": "+15735551234",
        "friendly_name": "Google Ads",
        "type": "local",
        "call_flow_id": "uuid",
        "call_flow_name": "Main Flow",
        "group_id": "uuid",
        "group_name": "Paid Search",
        "status": "active",
        "created_at": "2026-01-15T08:00:00Z"
      }
    ],
    "total": 1
  }
}

Call Flows

Create and manage call routing flows. Each call flow defines a sequence of steps (greeting, forward, voicemail, webhook, etc.) that execute when a call comes in.

GET    /api/v1/call-flows            # List all call flows
GET    /api/v1/call-flows/:id        # Get call flow with step configuration
POST   /api/v1/call-flows            # Create a call flow
PUT    /api/v1/call-flows/:id        # Update a call flow
DELETE /api/v1/call-flows/:id        # Delete a call flow
GET    /api/v1/call-flows/:id/versions  # List version history

Call Flows: Example

Get a call flow with its full step configuration:

curl -H "Authorization: Bearer cs_key_..." \
  https://callscaler.com/api/v1/call-flows/UUID

# Response
{
  "data": {
    "call_flow": {
      "id": "uuid",
      "name": "Google Ads",
      "steps": [
        {"type": "greeting", "message": "Thanks for calling"},
        {"type": "forward", "number": "+15735554567"}
      ],
      "settings": {
        "recording": true,
        "whisper": true,
        "press1": false
      },
      "version": 3,
      "assigned_numbers": 4,
      "created_at": "2026-01-10T08:00:00Z"
    }
  }
}

Number Groups

Organize tracking numbers into groups for filtering and reporting.

GET    /api/v1/number-groups                    # List groups
GET    /api/v1/number-groups/bulk-stats          # Stats for all groups
GET    /api/v1/number-groups/:id/members         # List numbers in a group
POST   /api/v1/number-groups                    # Create a group
PUT    /api/v1/number-groups/:id                # Update a group
DELETE /api/v1/number-groups/:id                # Delete a group
POST   /api/v1/number-groups/:id/members        # Add numbers to group
DELETE /api/v1/number-groups/:id/members/:numId # Remove number from group

Number Pools (DNI)

Manage dynamic number insertion pools for website visitor-level call tracking.

GET    /api/v1/number-pools           # List pools
POST   /api/v1/number-pools           # Create a pool
GET    /api/v1/number-pools/:id       # Get pool details
PUT    /api/v1/number-pools/:id       # Update a pool
DELETE /api/v1/number-pools/:id       # Delete a pool

Voicemails

List voicemails and download recordings. The recording endpoint returns the audio file directly (not JSON).

GET  /api/v1/voicemails              # List voicemails
GET  /api/v1/voicemails/:id          # Get voicemail details
GET  /api/v1/voicemails/:id/recording  # Download audio (returns audio/mpeg)

SMS & Conversations

List SMS messages and send texts through your tracking numbers.

GET   /api/v1/conversations          # List conversations
GET   /api/v1/texts                  # List text messages
GET   /api/v1/sms                    # List SMS messages
POST  /api/v1/texts                  # Send a text message

SMS: Send a Text

Send a text message from one of your tracking numbers:

curl -X POST -H "Authorization: Bearer cs_key_..." \
  -H "Content-Type: application/json" \
  -d '{"from_number_id": "uuid", "to": "+15735551234", "body": "Thanks for calling! How can we help?"}' \
  https://callscaler.com/api/v1/texts

Form Submissions

Access form submissions captured by the CallScaler tracking script on your website.

GET  /api/v1/forms                    # List form submissions
GET  /api/v1/forms/:id               # Get submission details

Dashboard Stats

Get aggregate call statistics for your business. Supports date range filtering.

For more flexible aggregation with custom grouping and metrics, use the Analytics API instead.

curl -H "Authorization: Bearer cs_key_..." \
  "https://callscaler.com/api/v1/dashboard/stats?date_from=2026-03-01&date_to=2026-03-31"

# Response
{
  "data": {
    "total_calls": 342,
    "answered_calls": 285,
    "missed_calls": 41,
    "voicemail_calls": 16,
    "qualified_calls": 198,
    "unique_callers": 267,
    "total_minutes": 1240,
    "average_duration": 217
  }
}

Billing

Check your current balance and usage history.

GET  /api/v1/billing/balance          # Current balance in cents
GET  /api/v1/billing/history          # Transaction history

API Keys

Manage your API keys programmatically. Requires the admin or owner role. The full key is only returned on creation and cannot be retrieved later.

GET    /api/v1/api-keys              # List keys (prefix only)
POST   /api/v1/api-keys              # Create a new key
DELETE /api/v1/api-keys/:id          # Revoke a key

API Keys: Create

Create a new API key. Save the key value immediately — it won't be shown again.

curl -X POST -H "Authorization: Bearer cs_key_..." \
  -H "Content-Type: application/json" \
  -d '{"name": "CRM Integration"}' \
  https://callscaler.com/api/v1/api-keys

# Response (save the key!)
{
  "data": {
    "id": "uuid",
    "name": "CRM Integration",
    "key": "cs_key_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
    "prefix": "cs_key_a1b2c3d4",
    "created_at": "2026-03-23T12:00:00Z"
  }
}

Webhook Deliveries

View the delivery log for post-call webhooks. Use this to debug delivery failures and check which webhooks fired successfully.

GET /api/v1/webhooks/deliveries

  • limit — Results per page (default 50, max 100)
  • offset — Skip results for pagination
  • status — Filter by delivery status: delivered, failed, pending
  • call_flow_id — Filter by call flow UUID
curl -H "Authorization: Bearer cs_key_..." \
  "https://callscaler.com/api/v1/webhooks/deliveries?status=failed&limit=10"

# Response
{
  "data": {
    "deliveries": [
      {
        "id": "uuid",
        "call_id": "uuid",
        "call_flow_id": "uuid",
        "url": "https://hooks.zapier.com/...",
        "status": "failed",
        "http_status": 500,
        "attempts": 3,
        "last_error": "server returned 500",
        "created_at": "2026-03-30T14:30:00Z",
        "delivered_at": null
      }
    ],
    "total": 1
  }
}