---
title: "Create presigned URLs for batch file upload"
method: POST
path: "/v1/namespace/{namespaceId}/uploads/batch"
tags: ["Uploads"]
---

# Create presigned URLs for batch file upload

`POST /v1/namespace/{namespaceId}/uploads/batch`

Generate presigned URLs for uploading multiple files to the specified namespace. Files are limited to 5 MB on the Free plan and 200 MB on paid plans.

## Path parameters

- `namespaceId` string, required — The id of the namespace (prefixed with ns_)

## Request body

- object
  - `files` UploadFileSchema[], required
    - `fileName` string, required — File name
    - `contentType` string, required — Content type
    - `fileSize` number, required — File size in bytes. The maximum is 200 MB (5 MB on the Free plan).

## Response `201`

Presigned URLs generated successfully

- object
  - `success` true, required
  - `data` UploadResultSchema[], required
    - `url` string, uri, required — Presigned URL for file upload. Make a `PUT` request to this URL with the file content and the `Content-Type` header.
    - `key` string, required — Key of the file in the storage. You'll send this in the `MANAGED_FILE` payload when creating an ingest job.

## Other responses

- `400` — The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
- `401` — Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
- `403` — The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401 Unauthorized, the client's identity is known to the server.
- `404` — The server cannot find the requested resource.
- `409` — This response is sent when a request conflicts with the current state of the server.
- `410` — This response is sent when the requested content has been permanently deleted from server, with no forwarding address.
- `422` — The request was well-formed but was unable to be followed due to semantic errors.
- `429` — The user has sent too many requests in a given amount of time ("rate limiting")
- `500` — The server has encountered a situation it does not know how to handle.

---

[API](https://skmtc.net/agentset/apis/agentsetapi.md) · [All operations](https://skmtc.net/agentset/apis/agentsetapi/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/agentset/agentsetapi/versions/cc6ac802092e/schema)
