---
title: "Verify object uploads and complete a large-upload session."
method: POST
path: "/api/upload-sessions/{id}/complete"
tags: ["Artifacts", "Publisher"]
---

# Verify object uploads and complete a large-upload session.

`POST /api/upload-sessions/{id}/complete`

## Request

- Base URL: `https://huggingbay.xyz`
- URL: `https://huggingbay.xyz/api/upload-sessions/{id}/complete`
- Auth: HTTP bearer

HEADs and stream-hashes every uploaded object. Completion returns draftPatch.largeUploadManifestId for POST /api/artifacts.

**Inputs.** Path, query and header fields are listed below. No request body is required.

**Outputs.** See each status below for its media type, schema and headers. A missing record or unavailable capability is not a successful empty result.

**Errors.** API JSON failures use the documented response schema. Read code, message and next; retry only when the response allows it. Auth, invalid input and missing records need a caller change.

**Rate limits.** Write and protocol operations can have separate route-specific limits. Read Retry-After and retry_after_s when present; do not infer a write allowance from the public read budget.

**Example setup.** Use an identifier returned by the matching list, search or create operation. Sample identifiers are not a promise that a record exists. Set HUGGING_BAY_TOKEN to a credential with the role or scope stated by this operation. Reader tokens do not grant publisher or operator rights. This example is not executed by documentation checks. Review the operation and obtain any required user consent before sending it.

## Path parameters

- `id` string, required

## Response `200`

Completed upload session

- UploadSession
  - `schemaVersion` 'hugging-bay.upload-session.v1', required
  - `id` string, required
  - `owner` string, required
  - `name` string, required
  - `status` 'created' | 'pending' | 'completed' | 'canceled' | 'expired', required
  - `storageProvider` string
  - `createdAt` string
  - `expiresAt` string
  - `completedAt` string, nullable
  - `files` UploadSessionFile[], required (unresolved $ref)
  - `progress` object
    - `filesTotal` number, required
    - `filesUploaded` number, required
    - `bytesTotal` number, required
    - `bytesUploaded` number, required
    - `percent` number, required
    - `readyToComplete` boolean, required
    - `missingFiles` string[], required
    - `mismatchFiles` object[], required
    - `expiresAt` string, nullable
    - `expired` boolean
  - `draftPatch` object, required
  - `links` object
  - `urls` object

## Other responses

- `403`: Session owner or admin token required
- `404`: Session not found
- `409`: Session expired, canceled, or object verification failed

---

[API](https://skmtc.dev/huggingbay/apis/hugging-bay-public-api.md) · [All operations](https://skmtc.dev/huggingbay/apis/hugging-bay-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/huggingbay/apis/hugging-bay-public-api/revisions/63c474bf0fe4?raw)
