---
title: "Repair a PPTX deterministically — sizes, colors, invisible junk; never your words ($0.02/repaired slide)"
method: POST
path: "/v1/repair"
tags: ["repair"]
---

# Repair a PPTX deterministically — sizes, colors, invisible junk; never your words ($0.02/repaired slide)

`POST /v1/repair`

## Request

- Base URL: `https://api.slideforge.dev`
- URL: `https://api.slideforge.dev/v1/repair`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Applies deterministic fixes to inspect findings: shrink_to_fit (real font metrics, floor 9pt), raise_min_font (only when the box still fits), remove_off_canvas (fully-invisible parked shapes), fix_contrast (WCAG, hue-preserving). No characters are ever altered — the response carries a computed visible_text_untouched proof. Ambiguous defects are flagged, never guessed. $0.02 per repaired slide (a slide with ≥1 fix); dry_run plans the exact fixes for FREE; no_changes never bills. ≤25 MB; first 50 slides.

## Request body

- RepairRequest
  - `job_id` string, nullable: A prior SlideForge slide/deck job to inspect
  - `pptx_url` string, nullable: HTTPS URL to a .pptx
  - `pptx_base64` string, nullable: Base64-encoded .pptx (≤25 MB decoded)
  - `actions` string[], nullable: Subset of ['shrink_to_fit', 'raise_min_font', 'remove_off_canvas', 'fix_contrast'] (default: all)
  - `dry_run` boolean: Plan the fixes without mutating anything (free preview)
  - `name` string, nullable: Job name for the repaired deck

## Response `200`

complete (repaired job — download via GET /v1/jobs/{id}/pptx) | no_changes | planned (dry_run)

- RepairResponse
  - `status` string, required
  - `job_id` string, nullable
  - `pptx_url` string, nullable
  - `preview_url` string, nullable
  - `repair_report` object, required
  - `source` string, required
  - `latency_ms` integer, required
  - `cost` number
  - `billed` boolean

## Other responses

- `400`: Bad source or unknown action
- `402`: Insufficient wallet balance
- `413`: File exceeds the 25 MB cap
- `422`: Unreadable file (corrupt, encrypted, or legacy .ppt)
- `429`: Rate limit exceeded
- `503`: Storage unavailable

---

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