Uploads

Start a media upload

Reserves an upload slot and returns a presigned PUT URL targeting ShortSync's media storage. The request body is empty — no filename or content type is required at this step. Your PUT may set whatever Content-Type header you want; ShortSync stores whatever bytes arrive.

The URL is valid for 1 hour (see expires_at). If your upload doesn't start within that window, call POST /uploads again to mint a fresh URL — the prior upload_id is harmless and will be garbage collected.

Type validation is deferred to finalize. The first time you call GET /uploads/{upload_id} or POST /posts with this upload_id, ShortSync reads the stored Content-Type and rejects it with 415 UNSUPPORTED_FILE_TYPE if it isn't in the allow-list (video/mp4, video/quicktime, video/webm, video/x-msvideo, video/x-matroska, image/jpeg, image/png, image/webp, image/heic, image/gif). Bad uploads waste the PUT bandwidth, so set the Content-Type header correctly on your PUT.

The same finalize step also validates per-kind size caps (2 GB video, 20 MB image) and the workspace storage quota, then marks the upload ready. There is no explicit "complete" call.

post/uploads

Request

  • Base URL: https://api.shortsync.app/v1
  • URL: https://api.shortsync.app/v1/uploads
  • Auth: HTTP bearer

Request body

filenamestring

Optional. Original filename for display only. ShortSync derives container/codec from the PUT's Content-Type; the filename does not affect validation.

Response

Upload reserved. Use presigned_url to PUT the bytes.

upload_idstring required
presigned_urlstring uri required
method'PUT' required
expires_atstring date-time required
workspace_idstring required
required_headersobject

Only present when filename was supplied to POST /uploads. The PUT to presigned_url MUST include every header in this map verbatim (currently x-amz-meta-filename), otherwise S3 rejects the upload with a signature mismatch.

Changes

No recorded changes to this operation across all 1 revision of this API.