---
title: "Complete Capture"
method: POST
path: "/ingestor/post-action-captures/{capture_id}/complete"
tags: ["post-action captures (ingestor)"]
---

# Complete Capture

`POST /ingestor/post-action-captures/{capture_id}/complete`

## Request

- Base URL: `https://api.verdun.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.verdun.ai/ingestor/post-action-captures/{capture_id}/complete`
- Auth: API key in header `X-API-Key`

Report captured / unavailable / failed. An identical replay by the
holder is an idempotent 200; a non-holder or a different outcome is 409.

## Path parameters

- `capture_id` string, required

## Request body

- CompleteCaptureRequest
  - `claimed_by` string, required: The claim holder.
  - `claim_key` string, required: The s3_key returned by this exact claim, required for every outcome as its attempt identifier.
  - `outcome` 'captured' | 'unavailable' | 'failed', required: captured | unavailable | failed.
  - `reason` 'buffer_expired' | 'stream_retention_expired' | 'no_footage' | 'codec_unsupported' | 'camera_off_schedule' | 'camera_offline' | 'camera_retired' | 'assemble_failed' | 'upload_failed' | 'kvs_error' | 'lease_expired' | 'shutdown' | 'internal_error' | 'ingestor_lost', nullable: Required for unavailable/failed; null for captured.
  - `detail` string, nullable: Diagnostics only. Stored server-side, NEVER returned to any client. Never URLs or credentials.
  - `s3_key` string, nullable: Required for captured and must equal the server-assigned key; null otherwise.
  - `size_bytes` integer, nullable: Uploaded object size (captured).
  - `captured_ms` integer, nullable: Milliseconds of footage inside the window (captured; nullable only for continuous cameras).
  - `start_offset_ms` integer, nullable: Milliseconds after window_start where footage begins (captured; nullable only for continuous cameras).

## Response `200`

Successful Response

- CompleteCaptureResponse
  - `capture_id` string, uuid, required: Capture id.
  - `status` string, required: Terminal status recorded.

## Other responses

- `422`: Validation Error

---

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