---
title: "Get Ad Changes Kpis"
method: GET
path: "/ad_changes/kpis"
---

# Get Ad Changes Kpis

`GET /ad_changes/kpis`

## Query parameters

- `date_range[since]` union, required
  - string, date
  - string, date-time
  - string
- `date_range[until]` union
  - string, date
  - string, date-time
  - string
- `tz` string, nullable
- `start_of_week` 0 | 1
- `channel[]` string[], nullable
- `ad_platform_id[]` integer[], nullable
- `change_source[]` ChangeSource[], nullable
- `change_type[]` SemanticChangeType[], nullable
- `object_scope[]` AdChangeObjectScope[], nullable
- `actor[]` string[], nullable
- `routine[]` string[], nullable
- `hide_system` boolean

## Headers

- `Authorization` string, nullable
- `X-User-Id` string, nullable
- `X-Browser-Time-Zone` string, nullable

## Cookies

- `session_id` string, nullable

## Response `200`

Successful Response

- AdChangesKpisResponse
  - `total_changes` integer, required
  - `converge_changes` integer, required
  - `manual_changes` integer, required
  - `system_changes` integer, required
  - `converge_share` number, required
  - `previous` PeriodStats, required
    - `total_changes` integer, required
    - `converge_changes` integer, required
    - `converge_share` number, required
  - `weekly_share_trend` WeekPoint[], required
    - `week_start` string, date-time, required
    - `total_changes` integer, required
    - `converge_changes` integer, required
    - `converge_share` number, required
  - `converge_top_types` TypeCount[], required
    - `change_type` 'create_new' | 'meta_review' | 'kill' | 'create_paused' | 'launch' | 'resurrect' | 'scale_up' | 'pull_back' | 'budget_other' | 'bid' | 'rename' | 'audience' | 'creative' | 'schedule' | 'delivery' | 'other', required — Read-side interpretation of a change, the dashboard's primary vocabulary ("Kill losers", "Scale up", ...). Derived from category/operation/field_key plus the value's direction; `classify_semantic_change` is the reference implementation and the SQL derivation in the read API must match it (pinned by a parity test).
    - `count` integer, required
  - `manual_top_actor` TopActor, required
    - `actor` string, required
    - `count` integer, required
    - `top_types` TypeCount[], required
      - `change_type` 'create_new' | 'meta_review' | 'kill' | 'create_paused' | 'launch' | 'resurrect' | 'scale_up' | 'pull_back' | 'budget_other' | 'bid' | 'rename' | 'audience' | 'creative' | 'schedule' | 'delivery' | 'other', required — Read-side interpretation of a change, the dashboard's primary vocabulary ("Kill losers", "Scale up", ...). Derived from category/operation/field_key plus the value's direction; `classify_semantic_change` is the reference implementation and the SQL derivation in the read API must match it (pinned by a parity test).
      - `count` integer, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/runconverge/apis/fastapi.md) · [All operations](https://skmtc.dev/runconverge/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/runconverge/fastapi/revisions/1452e350bd1d/schema)
