---
title: "Request an upload URL"
method: POST
path: "/v1/data/{artifactId}/blobs/upload"
tags: ["Blobs"]
---

# Request an upload URL

`POST /v1/data/{artifactId}/blobs/upload`

## Request

- Base URL: `https://shareout.site`
- URL: `https://shareout.site/v1/data/{artifactId}/blobs/upload`
- Auth: HTTP bearer

Step 1 of an upload. Returns an `uploadUrl`; PUT the raw file bytes to it within 15 minutes. When `direct` is true (presigned storage URL, non-browser callers only), POST `confirmUrl` afterwards to record the blob; when false the PUT itself records it and returns the Blob (201). Limits: 50MB per file, 500MB and 1000 blobs per artifact.

## Request body

- object
  - `filename` string, required
  - `mimeType` string, required: image/*, video/*, audio/*, application/pdf, text/plain, text/csv, text/markdown.
  - `size` integer: Bytes. Optional, enables early quota checks.

## Response `201`

Upload URL issued

- object
  - `success` boolean
  - `data` object
    - `uploadUrl` string, uri
    - `confirmUrl` string: Present only when `direct` is true.
    - `tokenId` string
    - `direct` boolean
    - `expiresAt` string, date-time
    - `maxSize` integer

## Other responses

- `400`: Invalid request
- `413`: File too large or storage full

## Changes

- **2026-10-13** `ed6fa61bd690`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/shareout/apis/shareout-rest-api/changes/v1/data/:artifactId/blobs/upload/post.md)

---

[API](https://skmtc.dev/shareout/apis/shareout-rest-api.md) - [All operations](https://skmtc.dev/shareout/apis/shareout-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/shareout/apis/shareout-rest-api/revisions/1e3f7fd34f6d?raw)
