Media
Media
Upload images and video once, then attach them to any number of posts via media_ids.
The media object
| Field | Type | Description |
|---|---|---|
id |
integer | Unique id. Pass to a post's media_ids. |
original_name |
string | The uploaded filename. |
mime_type |
string | e.g. image/jpeg, video/mp4. |
size_bytes |
integer | File size. |
cdn_url |
string | Public URL of the file. |
width / height |
integer|null | Pixel dimensions for images. |
duration |
number|null | Seconds, for video. |
folder |
string|null | Optional organizational folder. |
tags |
string[] | Optional tags. |
alt_text |
string|null | Accessibility text. |
Upload media
POST /api/media
Send as multipart/form-data.
| Field | Type | Required | Notes |
|---|---|---|---|
file |
file | yes | jpg, jpeg, png, gif, mp4, mov, webm. Max 100 MB. |
folder |
string | no | Organizational folder. |
tags |
string[] | no | Each tag ≤ 50 characters. |
alt_text |
string | no | ≤ 500 characters. |
curl -X POST https://schedulenchill.com/api/media \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" \
-F "file=@./launch.png" \
-F "folder=product-launch" \
-F "tags[]=launch" \
-F "alt_text=Product launch screenshot"
Returns 201 Created with the media object. Use its id in a post's media_ids.
Building over MCP or from a server with a public file URL? Use the
upload_mediatool, which ingests media by URL instead of multipart upload.
List media
GET /api/media
Paginated, 15 per page. Optional filters:
| Query param | Description |
|---|---|
search |
Match filename. |
type |
image or video. |
folder |
Filter by folder. |
tags |
Filter by tag. |
page |
Page number. |
Retrieve media
GET /api/media/{id}
Update media
PUT /api/media/{id}
Update metadata only — folder, tags, alt_text. The file itself is immutable; upload a new file to replace it.
Delete media
DELETE /api/media/{id}
Returns 204 No Content.