> For the complete documentation index, see [llms.txt](https://help.blotato.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.blotato.com/api-and-mcp-concepts/media-uploads-and-conversion.md).

# Media uploads and conversion

Choose local upload or a public media URL, verify file metadata, and apply platform and conversion limits.

Choose the input flow before publishing. Uploading a file and converting it to meet a platform's requirements are separate operations.

| Your input                                              | Next action                                                           |
| ------------------------------------------------------- | --------------------------------------------------------------------- |
| Public image or video URL                               | Pass it directly in `mediaUrls`. No upload step required.             |
| Finished Blotato visual                                 | Pass the returned `mediaUrl` or `imageUrls`. No upload step required. |
| File on the user's computer or in the agent's workspace | Complete a presigned upload, then pass `publicUrl`.                   |
| Private download link or editor/share page              | Obtain a public downloadable media URL, or upload the file bytes.     |

## Upload a local file

1. Call `blotato_create_presigned_upload_url` with `filename`, including its extension. For REST, call `POST /v2/media/uploads` with the same field.
2. Send an HTTP `PUT` to the returned `presignedUrl`, with the raw file bytes as the request body.
3. After the upload succeeds, pass the returned `publicUrl` in the publish request's `mediaUrls` array.

The PUT body is raw bytes. Do not send JSON or multipart form data. The assistant needs access to the file and an HTTP tool or shell to perform the PUT. Creating the URL alone does not upload the file.

If the assistant's environment blocks the upload destination, follow the [MCP network-egress troubleshooting](/start-with-an-ai-agent/mcp/faqs.md#which-blotato-domains-do-i-need-to-allowlist). For REST upload shapes, see [Upload Media](/rest-api-reference/publish-post/upload-media-v2-media.md).

## Check conversion requirements

Blotato validates media for the destination platform and performs supported conversions when required. Automatic video conversion is limited to videos no longer than 120 seconds. A longer video must already meet the applicable publishing requirements.

The processing queue checks the original file and existing variants. It reuses a valid file without conversion. If none is valid, it either requests a supported conversion of the original or returns the validation error. File upload does not imply every file is converted.

1. Check the [platform media requirements](/rest-api-reference/publish-post/media.md).
2. Check the file's container, codecs, dimensions, aspect ratio, duration, bitrate, and size.
3. If a video longer than 120 seconds needs cropping, resizing, or re-encoding, edit and export it before publishing.
4. Use a URL which serves the media without a login.
5. Submit the post and check its final publishing status.

An `.mp4` filename does not prove the container, codecs, or aspect ratio. Upload success does not establish platform compatibility.

For Instagram Reels, see the [Reel troubleshooting checklist](/social-accounts-and-platform-faqs/instagram/faqs.md#my-instagram-reel-is-under-300-mb-and-15-minutes-why-was-it-rejected). Account upload limits and platform file limits both apply. See [Billing and credits](/settings/billing-and-credits.md) and [Media requirements](/rest-api-reference/publish-post/media.md).

## Container identification errors

`Unsupported media format: mov,mp4,m4a,3gp,3g2,mj2` means Blotato did not recognize the file's container brand. The listed formats describe the probe's format family, not the file's exact type. This error is separate from the 120-second conversion limit.

1. Inspect the file's container metadata, including `major_brand`. Do not identify the format from its filename alone.
2. Export the source as MP4 with H.264 video and AAC audio. Renaming the extension does not change the container.
3. Inspect the exported file and check its dimensions, bitrate, size, and duration against the destination's requirements.
4. Verify the original submission's status before retrying. If the error persists, provide support with the submission ID and the exported file's metadata. Keep signed URLs and credentials out of support messages.

For the agent: the current parser recognizes MP4 brands `isom`, `iso1` through `iso6`, `mp41`, and `mp42`. It recognizes MOV through the exact padded brand `qt` . Missing or unrecognized brands produce the format-list error, even for a short video. A recognized container does not prove publishing compatibility.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.blotato.com/api-and-mcp-concepts/media-uploads-and-conversion.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
