Skip to content

History of changes

This page lists the changes to REST API v2 that affect existing integrations. New attributes and endpoints that do not change existing behavior are documented on the resource pages and in the release notes.

2026-08-24 - Tenant branding endpoints

REST API v2 exposes tenant branding (colors, custom CSS, and logo images) under the new branding permission resource with view and edit actions:

  • GET and PUT /api/v2/tenants/<tenant-id>/branding.json read and update the branding configuration.
  • GET, PUT, and DELETE /api/v2/tenants/<tenant-id>/branding/logo/<location> download, upload, and delete the logo image of the Sign-In page (login_page) or the top navigation bar (header_menu).

See Branding object fields.

The advanced search of calls gains the call note parameters note, note_created_at, note_is_pinned, note_is_resolved, note_pos_begin, note_pos_end, note_user, and note_user_id, and the counters notes_count_excluding_replies and notes_count_replies. notes_count now includes replies. See Advanced search.

2026-06-13 - Report run data format, evaluation report feedback, search filter types

Report run data

GET /api/v2/reports/<report-id>/runs/<run-id>/data.json returns a new shape. The parent_row_id parameter is removed. See View report run data.

Before:

{
    "headers": ["group_name", "count_calls", "minutes_total"],
    "rows": [
        {"name": "SUMMARY", "count_calls": 230, "minutes_total": 1200, "n_rows": 5, "row_type": "summary"},
        {"name": "Administrators", "group_id": "28d20df6-...", "group_name": "Administrators",
         "count_calls": 4, "minutes_total": 20, "row_type": "group_calls"},
        {"name": "Home Office", "group_id": "afef22c4-...", "group_name": "Home Office",
         "count_calls": 14, "minutes_total": 75, "row_type": "group_calls"}
    ]
}

After:

{
    "headers": [
        {"name": "group_id", "header": "Group - ID", "super_header": null, "hidden": true, "type": "uuid"},
        {"name": "group_name", "header": "Group - Name", "super_header": null, "hidden": false, "type": "str"},
        {"name": "count_calls", "header": "Calls - Total", "super_header": null, "hidden": false, "type": "int"},
        {"name": "minutes_total", "header": "Minutes - Total", "super_header": null, "hidden": false, "type": "float"}
    ],
    "summary": {"count_calls": 230, "minutes_total": 1200.0, "n_rows": 5},
    "data": [
        ["28d20df6-...", "Administrators", 4, 20.0],
        ["afef22c4-...", "Home Office", 14, 75.0]
    ]
}

To migrate an integration:

  • Read headers as a list of objects and take the column key from name (headers[i].name instead of headers[i]). Use hidden to skip helper columns the web portal does not show, and type to parse the values.
  • Read each row of data as a positional array: the value of column headers[i] is row[i]. Rows are no longer objects keyed by column name.
  • Read the summary from the top-level summary object instead of the row with row_type: "summary". When the template has no summary, summary is {}.
  • Drop any use of row_type, name, and parent_row_id. Nested rows are not returned; every row is a leaf.
  • Durations (type: "timedelta") are numbers of seconds, dates and times are ISO 8601 strings, UUIDs are strings.

Evaluation reports

  • The comment attribute of an evaluation report is renamed additional_feedback, and strengths_feedback and improvement_feedback are added. Update integrations that read comment. See View an evaluation report.
  • In the advanced search of calls, the parameter evaluation_report_comment becomes evaluation_report_feedback (searches all three feedback fields), plus the split parameters evaluation_report_strengths_feedback, evaluation_report_improvement_feedback, and evaluation_report_additional_feedback. Saved searches are migrated automatically, and requests that still send evaluation_report_comment are accepted and mapped to evaluation_report_feedback.

Advanced search filter types

  • The filter types set, string_set, and multi_param_set are renamed choice, text_choice, and multi_param_choice. The date and datetime operators older_than and newer_than are renamed before and after. Legacy operator names are still accepted, so existing requests keep working.
  • Every filter that offers between also offers not_between.
  • An invalid UUID in a search value returns 400 Bad Request instead of being ignored.

See Advanced search.

Custom fields

Custom field settings moved into typed fieldsets (fieldset_text_value_settings, fieldset_integer_value_settings, fieldset_dropdown_value_settings, fieldset_display_settings). The former top-level attributes and the fieldset_options and fieldset_thresholds fieldsets are still accepted in requests but are not returned. See Custom field attributes.

2024-07-21 - Call object

  • file_path is removed from the files of a call. Use Retrieve file for playback to get the audio.
  • matched_topics, custom_fields, and the transcripts in files[].speech_analytics are added to the call object. See Call object fields.

2024-05-28 - Rate limits

Per-tenant API request limits are enforced. Requests over the limit are rejected with 429 Too Many Requests, and every response carries RateLimit-* headers. See Rate limits.

2022-02 - User screen recording settings

screen_recording_login moved from fieldset_recording to the new fieldset_screen_recording of the user object. The old location is still accepted in requests.

2018-07-07 - Tenant licensing

Per-tenant license configuration is improved. Previously, only call recording licenses could use the "first-come, first-served" (dynamic) mode; other licenses were always fixed. All licenses can now be dynamic or fixed.

In tenant.fieldset_licensing:

  • license_mode is deprecated. It is ignored in PUT and POST requests and is not returned in GET responses.
  • Any license type can be set to null, which means no limit (dynamic allocation).

Before:

{
    "tenant": {
        "fieldset_licensing": {
            "license_mode": "dynamic",
            "recording_seats": -1,
            "screen_recording_seats": 0,
            "monitoring_seats": 10,
            "evaluation_seats": 20,
            "speech_analytics": 20
        },
        ...

Now:

{
    "tenant": {
        "fieldset_licensing": {
            "recording_seats": null,
            "screen_recording_seats": 0,
            "monitoring_seats": 10,
            "evaluation_seats": 20,
            "speech_analytics": 20
        },
        ...