Upload a local file for publishing
ig_media_uploadGets a one-time upload link for a LOCAL image or video the user wants to publish with ig_publish (Instagram only fetches media from a link, so a local file has to be uploaded first). Returns upload_url (send the file's raw bytes with an HTTP PUT and the given headers, before upload_url_expires_at), the exact curl command, step-by-step instructions, and a media_ref to pass to ig_publish as the media url (or, for a jpg/png, as a reel's cover_url) once the upload finished. Works only where you can run a command or code that reads the file and reaches the internet (e.g. a terminal agent). In a chat app (Claude's sandbox cannot reach Buzzfy), call ig_publish with the media url choose-file instead: Buzzfy's card asks the user to pick the file. Does not post anything. Files: mp4/mov up to 300 MB, jpg/png/webp up to 8 MB (Instagram prefers JPEG). An upload no post uses is deleted after 24 hours.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"size_bytes": "<size_bytes>"
},
"name": "ig_media_upload"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | The local file's name, e.g. reel.mp4. Its extension (.mp4, .mov, .jpg, .png or .webp) sets the file type. Give this, content_type, or both. | |
| size_bytes | Yes | The local file's size in bytes, read from the file. Checked against Instagram's limits: 300 MB for a video, 8 MB for an image. | |
| content_type | No | The file's type, for when you have no filename. If you give both, they must agree. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| curl | Yes | The upload as a curl command; replace the placeholder path ./your-file.<ext> with the real one. | |
| method | Yes | The HTTP method to use on upload_url. | |
| headers | Yes | The HTTP headers to send with the upload: the Content-Type. | |
| max_bytes | Yes | The largest file Instagram accepts for this type, in bytes. | |
| media_ref | Yes | Pass this as a media `url` to ig_publish after the upload has finished. | |
| keep_hours | Yes | An upload no post uses is deleted after this many hours. | |
| upload_url | Yes | PUT the file's bytes here. Valid about 2 hours, for one upload. | |
| content_type | Yes | The file type Buzzfy took from filename or content_type; the upload must use it. | |
| instructions | Yes | Step-by-step: run the upload, what a 200 answer means, and the exact ig_publish call to make next. | |
| upload_url_expires_at | Yes | When upload_url stops working, ISO 8601 in UTC. |