---
title: "Summarize Overlay Changes"
method: POST
path: "/api/v1/ai/overlay-changes/summarize"
tags: ["overlay-changes"]
---

# Summarize Overlay Changes

`POST /api/v1/ai/overlay-changes/summarize`

## Request body

- SummarizeOverlayChangesRequest
  - `sheet_number` string, nullable — e.g. "S1.1".
  - `sheet_title` string, nullable
  - `full_sheet_jpeg` string, required — Base64 JPEG — downsampled full-sheet composite (location anchor).
  - `groups` OverlayGroupCrops[], required
    - `group_id` string, required
    - `base_jpeg` string, required — Base64 JPEG — clean crop of the OLD revision.
    - `overlay_jpeg` string, required — Base64 JPEG — clean crop of the NEW revision.
    - `composite_jpeg` string, required — Base64 JPEG — red/blue composite crop, member boxes stroked.
    - `dead_ink` integer, required — Removed-ink px at detection scale.
    - `new_ink` integer, required — Added-ink px at detection scale.
    - `member_count` integer, required — Engine fragments merged into this group.
    - `cloud_marked` boolean
    - `recurring_sheet_count` integer, nullable — Set when this group represents a change recurring on N sheets.

## Response `200`

SSE stream. Each `group.summary` event's data is an OverlayChangeSummary; `group.error` carries {group_id, code, message}; `done` ends the stream.

- OverlayChangeSummary — One group's VLM verdict — the `group.summary` SSE event payload.
  - `group_id` string, required
  - `title` string, required — Pill label, at most ~6 words.
  - `summary` string, required — 2-3 sentences, estimator language.
  - `significance` 'substantive' | 'administrative' | 'cosmetic', required
  - `confidence` number, required

## Other responses

- `4XX` — Client Error
- `5XX` — Server Error

---

[API](https://skmtc.dev/rudus/apis/rudus-api.md) · [All operations](https://skmtc.dev/rudus/apis/rudus-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/rudus/rudus-api/revisions/f149124a4d80/schema)
