Migrating from JSON-RPC API

What’s new in the REST API v2?

The new REST API includes major improvements:

  • RESTful design with predictable, resource-oriented URLs
  • Standard HTTP verbs (GET, POST, DELETE, etc.)
  • Clean JSON request/response formats
  • Consistent object schemas aligned with Callr Actions
  • Authentication with API keys via standard headers
  • Full OpenAPI 3.1 support — autocompletion in Postman, Swagger, Insomnia, etc.
  • Simplified number ordering
    No more cryptic area code IDs — just use simple query parameters like:
    • prefix (e.g., +33)
    • area (e.g., paris or lyon)

🤚

Attention

Make sure you read Introduction and REST API v2 is Here!


🪨 Rosetta Stone

JSON-RPC

REST API v2

actions.start

POST /actions/{sid}/runs

apps.assign_did

  • PUT /actions/{sid}/numbers/{number}
  • PUT /numbers/{number}/scenario/{sid}
  • PATCH /numbers/{number}

apps.create

POST /actions

apps.delete

DELETE /actions/{sid}

apps.edit

PATCH /actions/{sid}

apps.remove_did

  • DELETE /actions/{sid}/numbers/{number}
  • DELETE /numbers/{number}/scenario/{sid}
  • PATCH /numbers/{number}

apps.search

GET /actions

billing.get_prepaid_credit

GET /billing/credit

cdr.export_async

POST /calls/export

did/areacode.countries

GET /numbers/store/countries

did/areacode.get_list

GET /numbers/store/prefixes

did/areacode.types

GET /numbers/store/types

did.search

GET /numbers

did/store.buy_order

POST /numbers/store/{token}

did/store.cancel_order

DELETE /numbers/store/{token}

did/store.cancel_subscription

DELETE /numbers/{sid}

did/store.reserve

POST /numbers/store

jobs.cancel

DELETE /tasks/{taskid}

jobs.get

POST /tasks/{taskid}

list.destinations

GET /billing/destinations

media/library.create

POST /audio-files

media/library.delete

DELETE /audio-files/{sid}

media/library.get

GET /audio-files/{sid}

media/library.get_phone_id

PUT /audio-files/{sid}/phone-id

media/library.search

GET /audio-files

media/library.set_content_from_file

PUT /audio-files/{sid}/file

media/library.set_name

PATCH /audio-files/{sid}

media/recording.delete_async

  • DELETE /recordings/{sid}
  • DELETE /recordings

media/recording.mark_as_read_async

PATCH /recordings/{sid}

media/recording.mark_as_unread_async

PATCH /recordings/{sid}

media/recording.search

GET /recordings

sms.search

GET /sms

sms.get

GET /sms/{sid}

sms.send

POST /sms

webhooks.disable

PATCH /webhooks/{sid}

webhooks.enable

PATCH /webhooks/{sid}

webhooks.get_list

GET /webhooks/search

webhooks.subscribe

POST /webhooks

webhooks.unsubscribe

DELETE /webhooks/{sid}


📌 Migration Notes

  • hashis nowsid
    Unique IDs previously named hash (e.g. ABCDEF12) are now referred to as sid in the REST API. They use the same value, but in lowercase (abcdef12).

  • DIDis nowPhone number

  • Phone numbers no longer have a unique ID distinct from the number itself
    For example, to manage +33199001020, simply call PATCH /numbers/+33199001020. No more hash to remember!

  • Constant values are now lowercase
    Enum values (like sms.status) are now lowercase: SENTsent, FAILEDfailed, etc.

  • Only Callr Actions are supported
    REST API v2 only supports scenarios built with Callr Actions (formerly called apps). If you were using legacy apps like CALLTRACKING10, CLICKTOCALL10, or REALTIME10, you must migrate to Callr Actions.

  • Date format changed to RFC 3339
    JSON-RPC used: YYYY-MM-DD HH:MM:SS.sss REST API uses: YYYY-MM-DDTHH:MM:SS.sssZ (ISO 8601 / RFC 3339, section 5.6)

  • Jobs are now called Tasks
    JSON-RPC "jobs" are now referred to as tasks in REST v2. See the /tasks endpoint for details.

  • Media library items are now called Audio Files
    Tags are no longer supported.

  • No official SDKs (yet)
    We currently do not provide SDKs for the REST API. You can:

    • Use our OpenAPI spec to generate your own SDKs
    • Or call the REST endpoints directly with any HTTP client

❓ FAQ

Is there a 1:1 feature mapping between theJSON-RPC and REST APIs?

No, and that’s intentional.
The REST API was designed to be simpler and more consistent — not a direct mirror of the JSON-RPC structure.

  • We’ve removed some legacy fields (like hash identifiers for phone numbers)
  • Methods like number ordering have been greatly streamlined
  • Dates are now consistently formatted using RFC 3339 (YYYY-MM-DDTHH:MM:SSZ)
  • Several feature names and parameters have been renamed for clarity

The result is a more modern, predictable, and human-friendly API.

Are "real-time" (REALTIME10) apps deprecated?

Yes. Real-time apps are deprecated and replaced by Callr Actions.