Skip to main content

What it checks

After uploadVideo, the publisher polls app.bsky.video.getJobStatus. If the response carries state: "JOB_STATE_FAILED", the upload made it onto the service but transcoding (or scanning) decided not to keep it.

Why

Bluesky’s video service runs an encode pass + a scanning pass. Either can reject a file. Common causes:
  • Codec other than h.264 video / AAC audio
  • Corrupt mp4 container (often happens when re-muxing without +faststart)
  • Clip exceeds Bluesky’s 60 s duration cap (caught here, not in size preflight, because duration isn’t in the byte length)
  • Content scanning rejected the file

Failure response

Remediation

Re-encode to a known-good profile:
If the file still fails after a clean re-encode, the upstream message in platformResponse.message is your best lead — it’s the verbatim string from Bluesky’s transcoder.