---
title: "Complete a Downloader Upload"
method: POST
path: "/utilities/downloader-uploads/{id}/complete"
tags: ["Utilities"]
---

# Complete a Downloader Upload

`POST /utilities/downloader-uploads/{id}/complete`

Idempotently publish a staged upload as a downloader resource and queue its processing with the selected options

## Path parameters

- `id` string, required

## Request body

- GithubComAlchemillahqSylveInternalInterfacesServicesUtilitiesCompleteDownloaderUploadRequest
  - `automaticExtraction` boolean
  - `automaticRawConversion` boolean
  - `downloadType` 'base-rootfs' | 'cloud-init' | 'uncategorized'

## Response `200`

Upload completed

- GithubComAlchemillahqSylveInternalAPIResponseGithubComAlchemillahqSylveInternalInterfacesServicesUtilitiesDownloaderUploadCompletion
  - `data` GithubComAlchemillahqSylveInternalInterfacesServicesUtilitiesDownloaderUploadCompletion
    - `downloadId` integer
    - `status` 'staged' | 'completed'
    - `uploadId` string
  - `error` string
  - `message` string
  - `status` string

## Other responses

- `400` — Invalid request, upload ID, or download type
- `401` — Unauthorized
- `403` — Administrator access required
- `404` — Upload not found or owned by another user
- `409` — Upload active, changed, unavailable, or destination already exists
- `410` — Upload expired
- `413` — Request body too large
- `422` — Incompatible post-processing options
- `500` — Internal Server Error
- `503` — Upload persistence or download queue unavailable

---

[API](https://skmtc.net/alchemillahq/apis/sylve-api.md) · [All operations](https://skmtc.net/alchemillahq/apis/sylve-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/alchemillahq/sylve-api/revisions/7a7bea85004e/schema)
