---
title: "Diff Pptx Endpoint"
method: POST
path: "/api/v1/slides/diff-pptx"
tags: ["slides"]
---

# Diff Pptx Endpoint

`POST /api/v1/slides/diff-pptx`

## Request

- Base URL: `https://api.slidemaster.tw` (the document declares no server; this is the origin it was published from)
- URL: `https://api.slidemaster.tw/api/v1/slides/diff-pptx`
- Auth: none declared

Compare an uploaded pptx to this project's last server-rendered pptx.

Behaviour:
  - Project ownership is enforced; non-owner → 403.
  - If no `stitched_pptx_gcs_path` exists yet (project never rendered),
    returns a successful response with `baseline_exists=False` and no
    diff — caller should treat the whole upload as "all new".
  - Diff is index-aligned (slide N in upload compared to slide N in
    baseline). Re-orderings show up as modified+modified rather than
    moved; that's fine for MVP — agent can ask the user explicitly.

Errors:
  400 — file too large / not a pptx / project_id missing
  403 — project not owned
  404 — project not found
  500 — diff library raised (corrupted file, schema drift, etc.)

## Headers

- `Authorization` string, nullable

## Response `200`

Successful Response

- DiffResponse
  - `project_id` string, required
  - `baseline_exists` boolean, required
  - `baseline_hash` string, nullable
  - `baseline_at` string, nullable
  - `uploaded_hash` string, required
  - `uploaded_size_bytes` integer, required
  - `summary` DiffSummary
    - `total_uploaded_slides` integer, required
    - `total_baseline_slides` integer, required
    - `unchanged_count` integer, required
    - `modified_count` integer, required
    - `added_count` integer, required
    - `deleted_count` integer, required
  - `unchanged` DiffSlideEntry[]
    - `index` integer, required
    - `slide_id` string, nullable
  - `modified` DiffSlideEntry[]
    - `index` integer, required
    - `slide_id` string, nullable
  - `added` DiffSlideEntry[]
    - `index` integer, required
    - `slide_id` string, nullable
  - `deleted` DiffSlideEntry[]
    - `index` integer, required
    - `slide_id` string, nullable
  - `note` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/slidemaster/apis/slidemaster-ai-api.md) · [All operations](https://skmtc.dev/slidemaster/apis/slidemaster-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/slidemaster/apis/slidemaster-ai-api/revisions/a964c005977e?raw)
