---
title: "Finish an upload once every byte has arrived. The file is stored as a single-request upload would store it, and described the same way."
method: POST
path: "/ai/conversations/{public_id}/attachment-uploads/{upload_id}/complete"
tags: ["AI Chat"]
---

# Finish an upload once every byte has arrived. The file is stored as a single-request upload would store it, and described the same way.

`POST /ai/conversations/{public_id}/attachment-uploads/{upload_id}/complete`

## Request

- Base URL: `/api` (relative, and the document was published on a file host, not at the API’s origin)
- URL: `/api/ai/conversations/{public_id}/attachment-uploads/{upload_id}/complete`
- Auth: HTTP bearer

## Path parameters

- `public_id` string, required
- `upload_id` string, required

## Response `201`

Attachment stored

- ChatAttachmentResponse
  - `id` string, required
  - `is_image` boolean, required
  - `mime_type` string, required
  - `name` string, required
  - `sandbox_path` string, required
  - `size_bytes` integer, required

## Other responses

- `400`: Not every byte has arrived
- `401`: Unauthorized
- `403`: Insufficient permissions
- `404`: Upload or conversation not found
- `409`: The chat has no workspace for attachments

## Changes

> 81 revisions in range; 1 not diffed.

- **2026-10-20** `79089e9f49ee`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/gotempsh/apis/temps/changes/ai/conversations/:public_id/attachment-uploads/:upload_id/complete/post.md)

---

[API](https://skmtc.dev/gotempsh/apis/temps.md) · [All operations](https://skmtc.dev/gotempsh/apis/temps/llms.txt) · [OpenAPI document](https://skmtc.dev/gotempsh/apis/temps/revisions/ab6d5d19e930?raw)
