Images and videos
Upload a file, then attach it to a post.
Adding media is two steps: upload the file, then use its id in a post.
Upload the file
Send the file as multipart/form-data, in a field called file:
curl -X POST "$BULKIT_URL/media" \
-H "x-api-key: $BULKIT_API_KEY" \
-F "file=@./launch-banner.png"{
"id": "clx3k2p9q0001abcd1234efgh",
"fileName": "launch-banner.png",
"mimeType": "image/png",
"size": 184320,
"altText": null,
"url": "https://…",
"createdAt": "2026-08-04T09:30:00.000Z"
}Save the id. You can use it right away.
Attach it to a post
Put the id in mediaIds on a block:
{
"intent": "now",
"channels": [
{
"channelId": "CHANNEL_ID",
"blocks": [
{
"content": "Our new logo!",
"mediaIds": ["MEDIA_ID"],
"mediaAltText": { "MEDIA_ID": "A green heart logo on a white background" }
}
]
}
]
}mediaAltText is optional. It describes the image for people who cannot see
it. It is keyed by the media id.
Allowed files
| Type | Formats | Max size |
|---|---|---|
| Images | JPEG, PNG, WebP, GIF | 10 MB |
| Videos | MP4, MOV | 100 MB |
| Documents | 100 MB | |
| Subtitles | VTT, SRT | 5 MB |
Each platform accepts only some of these. Check limits.acceptedMimeTypes,
limits.maxMedia and limits.requiresMedia on GET /platforms. If
requiresMedia is true, a post on that platform must have at least one file.
Good to know
- Use the
id, not theurl. Theurlis temporary and changes on every response. Do not save it. - Files count towards your storage. Deleting a file with
DELETE /media/{id}frees the space right away. - Deleting a file does not remove it from posts that are already live. But a scheduled post that uses it will fail.
GET /medialists every file in your library.