Snapchat Top Snap video: 1080x1920, 32 MB, or 1 GB in 32 chunks
Snap's media API takes 1080x1920 mp4 or mov from 3 to 1800 seconds, 32 MB in one call or up to 1 GB in 32 parts. Check a Sume clip against it first.

For a Snapchat Top Snap video, Snap's media endpoint lists 1080 x 1920 pixels, mp4 or mov, a duration of at least 3 and at most 1800 seconds, and a 32 MB cap for a normal upload. Files up to 1 GB can go through chunked upload in at most 32 parts of up to 32 MB each. A short Sume UGC clip is almost always under 32 MB, so the single upload usually works; the bigger risk is resolution.
Snap values are from its Media page, read 2026-10-02. Sume values come from the Avatar video, Video Router and Video trim docs.
Will a Sume clip meet 1080x1920?
It depends on the route. Avatar video accepts a 9:16 aspect ratio (the default), but its resolution is currently 720p, which is smaller than the 1080 x 1920 Snap lists for Top Snap. Video Router models differ: seedance-2.5 offers 480p, 720p and 1080p for 4 to 30 seconds, and its own example request uses 9:16. Read capabilities from GET /v1/video-router/models for the exact envelope before you pick a model.
Whether Snap rejects, scales or crops a 720p upload is not stated on the page. Do not assume it will upscale. Probe the file you plan to send and match its dimensions to what the page lists.
| Snap spec | Value | Sume side |
|---|---|---|
| Dimensions | 1080 x 1920 | Avatar video is 720p today; some Video Router models offer 1080p |
| Formats | mp4, mov | Check the output content type on the job result |
| Duration | 3 to 1800 seconds | Avatar video runs 4 to 60 seconds |
| Single upload | 32 MB max | Short clips usually fit |
| Chunked upload | Up to 1 GB, 32 MB per part, 32 parts | Rarely needed for ads |
How do I decide between single and chunked upload?
Chunked upload starts with POST /v1/media/{media_id}/multipart-upload-v2?action=INIT carrying file_name, file_size in bytes and number_of_parts. You then add parts with a file, a part_number and the upload_id, and finalize with the upload_id. The calculation of how many parts you need is simple but easy to get wrong at the boundary, so test it.
The helper below uses decimal megabytes, so it stays under the limit even if Snap means 32 MiB. It raises when a file would need more than 32 parts or exceeds 1 GB.
import math, os
SINGLE_MAX = 32 * 1_000_000 # stay under "32MB" whether Snap means MB or MiB
CHUNK = 32 * 1_000_000
MAX_PARTS = 32
ONE_GB = 1_000_000_000
def upload_plan(path):
size = os.path.getsize(path)
if size <= SINGLE_MAX:
return {"mode": "single", "size": size}
parts = math.ceil(size / CHUNK)
if size > ONE_GB or parts > MAX_PARTS:
raise ValueError(f"{size} bytes is over Snap's chunked limit; re-encode or trim")
return {"mode": "chunked", "size": size, "number_of_parts": parts}
if __name__ == "__main__":
print(upload_plan(os.environ.get("CLIP", "clip.mp4")))Which Sume tool shortens a clip that is too long or too big?
POST /v1/video-trim cuts one media.sume.com clip into a new MP4 with a start and either end or duration (0.2 to 900 seconds out). Its output option can conform width, height (256 to 2160) and fps (24, 25, 30 or 60) when precision is exact. It prices at $0.02 per job at the time of the docs, and you should confirm that in the live catalog.
It cannot make a 720p clip genuinely 1080p. For that, generate at a higher resolution on a model that offers it, then trim.
How do I check the file before uploading?
Sume's video inspect route probes a hosted clip and returns stills, so you can read the real dimensions and duration of the render instead of trusting the request you sent. Run it on one sample from each model you use and write the observed size into your upload script's checks.
Then compare with the table above: 1080 x 1920, mp4 or mov, 3 to 1800 seconds. If a clip is the wrong size, fix it at the source by choosing a model and resolution that match, rather than relying on Snap to correct it. The same discipline applies to image creatives, which Snap lists separately at 1080 x 1920 with a 5 MB cap for Top Snap images.
What comes after the upload?
Snap moves the media from PENDING_UPLOAD to READY; only then is it usable in a creative. If you also flag the clip as AI content, see the ai_content_source post. For a TikTok-side resolution check, see the TikTok resolution post.
Sources
Related posts
More in Integrations
- Snapchat Spotlight API: SUBMITTED, LIVE or REJECTED, 160-char caption
A Spotlight post through Snap's Public Profile API returns SUBMITTED, LIVE or REJECTED and takes a 160-character description with a locale. Prep it with Sume.
- Snapchat MEDIA_EXPIRED: Story media dies 24 hours after creation
Snap Public Profile Story media objects expire 24 hours after creation, which causes MEDIA_EXPIRED. Generate with Sume, then upload and post in one run.
- Supabase Edge Function 504 at 150 s idle: Sume sync stays under it
A Supabase Edge Function that sends no response in 150 seconds returns 504. Sume sync waits at most 30 seconds: a bounded wait, then poll.
- Supabase Queues visibility timeout as a Sume job poller
Supabase Queues (pgmq) hide a read message for a visibility timeout, which fits polling a Sume job: read, check status, archive on terminal, else it reappears.
Written by Sume