---
title: "Media uploads with the API: 1Post docs"
url: "https://get1post.com/docs/api-media-uploads.md"
canonical_url: "https://get1post.com/docs/api-media-uploads"
last_updated: "2026-10-26"
type: "reference"
summary: "Request a signed upload address, send the file straight to storage with its headers and use the media id in a post."
related: ["https://get1post.com/docs/media.md", "https://get1post.com/docs/api-posts.md", "https://get1post.com/docs.md"]
---

# Media uploads with the API: 1Post docs

Request a signed upload address, send the file straight to storage with its headers and use the media id in a post.

POST /v1/media/uploads takes a name, a type and the size in bytes and returns an upload_url, headers to send and a media id. Send the file to that address directly. Storage refuses a body larger than the size you declared. Use the media id in a post once the file is ready.

1. Ask for an upload. The size is checked against your plan before an address is made, and the room is held until the address expires.
2. PUT or POST the file to upload_url with the returned headers, as the reply says.
3. Put the media id in a post. media_not_ready means the file has not finished arriving yet.

To fetch a file from a public address instead, use POST /v1/media. Private and loopback addresses are refused.

## Questions

**What if the size I declare is wrong?**

Storage refuses a body larger than declared, so declare the exact size.

## Related

- [Media: 1Post docs](https://get1post.com/docs/media.md)
- [Creating and changing posts with the API: 1Post docs](https://get1post.com/docs/api-posts.md)
- [1Post docs: composer, scheduling, API, webhooks, MCP](https://get1post.com/docs.md)
