improved

Breaking Change - call.cdr and recording Format Update Coming September 1st, 2025

We're updating the structure of the call.cdr and recording object in Callr Actions to align with the CDR and Recording format from our REST API v2.

❗️

This is a breaking change

The new format will become the default on September 1st, 2025.

What's changing?

  1. The structure of the CDR object inside call and $dial is changing to align with the format used in REST API v2.

This affects any scenario that uses:

  • call.cdr (in inbound flows)
  • $dial.cdr (after dial@v1)
  1. The structure of the recording variable is changing to align with the Recording object used in REST API v2.

⚠️ Examples of Impacted Code

You may be affected if you're using fetch@v2 like this:

- action: fetch@v2
  params:
    url: https://...
    body: |
      {
        "call": ${{ JSON.stringify(call) }} # <---- call.cdr has changed
        ...
      }

Or referencing CDR properties directly:

- if: call.cdr.duration_answered # <---- becomes durationAnswered (among others)
  then:
    - ...

Or using dial@v1 from an outbound call:

- action: dial@v1
  params:
    targets: [...]
  result: $dial
              
- action: fetch@v2
  params:
    body: |
      {
        "dial": ${{ JSON.stringify($dial) }} # <---- $dial.cdr changed
        ...
      }

Or using the recording variable:

- action: fetch@v2
  params:
    body: |
      {
        "recording": ${{ JSON.stringify(recording) }} # <---- recording changed
      }

📘

Documentation

Why this matters

Aligning with our REST API means:

  • More consistent data structures across products
  • Easier debugging and integration with external platforms
  • Simplified long-term maintenance

But this also means any logic depending on the current structure will need to be updated.

What you need to do

🧪 1. Test with the new format (opt-in)

To preview the new structure today, add this to your scenario:

compat:
  version: "2025-09-01"

🛡️ 2. Lock to the current format (temporary)

If you need time to update your logic or integrations, you can lock your scenario to the current format using:

compat:
  version: "2024-04-01"

This ensures your scenario won’t break when the new format becomes the default.

🚀 3. Migrate when ready

Once you’ve updated your code to work with the new format, update all your scenarios to:

compat:
  version: "2025-09-01"

This ensures you’re aligned with the latest standard and won’t be affected by future defaults.



📘

Want to compare formats side-by-side?

Check the full changelog with before/after examples: 👉 2025-09-01 updates.