---
title: "Confirm the source upload landed"
method: POST
path: "/v1/reader/audiobooks/{audiobookId}/source/confirm"
tags: ["reader"]
---

# Confirm the source upload landed

`POST /v1/reader/audiobooks/{audiobookId}/source/confirm`

## Request

- Base URL: `https://api.ditto.audio` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ditto.audio/v1/reader/audiobooks/{audiobookId}/source/confirm`
- Auth: HTTP bearer

Verifies the object exists in storage and records its real size — the size you claim is never trusted. Returns the updated audiobook.

## Path parameters

- `audiobookId` string, required

## Request body

- ConfirmSourceDto
  - `s3Key` string, required: The `s3Key` the presign response returned.
  - `contentHash` string

## Other responses

- `400`: Object not found in storage, or a key outside your namespace.

---

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