---
title: "Confirm files have landed in R2 and mark the site live"
method: POST
path: "/uploads/finalize"
tags: ["Uploads"]
---

# Confirm files have landed in R2 and mark the site live

`POST /uploads/finalize`

## Request

- Base URL: `https://api.nippy.host`
- URL: `https://api.nippy.host/uploads/finalize`
- Auth: none declared

## Request body

- FinalizeUploadDto
  - `uploadBatchId` string, uuid, required: UploadBatch id returned from /uploads/init

## Response `200`

All expected files present and matching size — site is now live

- APIFinalizeUploadResponse
  - `status` 'live' | 'inactive' | 'awaiting_verification', required: `live` if the owner is verified and under their plan’s live-site limit; `inactive` if verified but at the limit (uploaded, not published); `awaiting_verification` if a magic link has just been emailed.
  - `subdomain` string, required
  - `url` string, required: Public URL the site will be served from once live

## Other responses

- `400`: Batch already finalized, expired, or some expected files are missing
- `404`: Upload batch id not found

---

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