---
title: "Mint a presigned PUT URL for a user file upload"
method: POST
path: "/agents/files/upload-url"
tags: ["Files"]
---

# Mint a presigned PUT URL for a user file upload

`POST /agents/files/upload-url`

## Request

- Base URL: `https://api.mobilerun.ai`
- URL: `https://api.mobilerun.ai/agents/files/upload-url`
- Auth: HTTP bearer

## Headers

- `idempotency-key` string: Idempotency-Key: 1-255 printable ASCII characters. Same key with a different request body is a 422 idempotency_key_reused. A retryable in-flight duplicate is a 409 with Retry-After and x-should-retry: true; a terminal duplicate is a 409 with x-should-retry: false. A replay returns the current resource state with Idempotent-Replayed: true.

## Request body

- object
  - `filename` string, required
  - `mimeType` string, required
  - `sizeBytes` integer, required
  - `zone` 'user' | 'skills'

## Response `200`

Presigned PUT URL and fileId

- object
  - `fileId` string, uuid, required
  - `putUrl` string, uri, required
  - `expiresAt` string, date-time, required

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Storage limit reached
- `422`: Error 422
- `429`: Too many pending (unconfirmed) uploads
- `500`: Internal Server Error
- `503`: Storage check temporarily unavailable

## Changes

- **2026-10-16** `4ad548c528a8`: 1 info
  - endpoint added
- **2026-06-18** `e61cfb7119bc`: 1 breaking
  - api path removed without deprecation
- **2026-06-09** `00b02e335076`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/droidrun/apis/droidrun-cloud/changes/agents/files/upload-url/post.md)

---

[API](https://skmtc.dev/droidrun/apis/droidrun-cloud.md) - [All operations](https://skmtc.dev/droidrun/apis/droidrun-cloud/llms.txt) - [OpenAPI document](https://skmtc.dev/droidrun/apis/droidrun-cloud/revisions/1cc95586c933?raw)
