Screen Browser
Documentation

Exports and webhooks

What comes out of a run besides the MP4, and how to send it wherever it belongs without our help.

What a finished run gives you

Next to the video, every completed run offers, on the run page and through the API:

File For
Animated GIF of the whole video (480 px wide, 8 frames a second) pull request descriptions, GitHub issues, Slack and email, which show a GIF inline but will not autoplay an MP4
One GIF per chapter, as a zip the same, when the guide has [CHAPTER "…"] markers and you want the one moment that matters
Subtitles as VTT and SRT uploading captions alongside the video on YouTube, Vimeo or Wistia, or keeping the video clean and letting the player toggle them; in the language the video narrates
Chapters in YouTube's form (00:00 Intro, one per line) the description field of a YouTube upload
Thumbnail a poster frame for the upload or the docs page

The share dialog still makes a public watch link, with expiry and password, and an embed URL: that is the right export for a help centre or a docs page, which embeds a URL rather than hosting a file.

Webhooks

Screen Browser calls a URL of yours when a run changes phase: run.queued, run.preparing, run.recording, run.finishing, run.completed, run.failed, run.canceled. Endpoints live under Account → Webhooks in the app or /api/v1/webhooks; each has a secret, and every delivery is signed (X-Webhook-Signature: t=…,v1=…, an HMAC-SHA256 of t.body), retried with backoff, and listed with its response.

run.completed carries the exports as signed links valid for 24 hours, so the receiver needs no API key:

{
  "id": "…", "type": "run.completed", "created_at": "2026-09-07T10:12:00Z",
  "data": {
    "run_id": "01K…", "project_id": "01K…", "phase": "done",
    "title": "Acme CRM — Create a campaign", "duration_seconds": 108,
    "run_url": "https://rec.screenbrowser.com/runs/01K…",
    "downloads": {
      "video": "https://…/final.mp4?…", "gif": "https://…/video.gif?…",
      "chapter_gifs": "https://…/chapter_gifs.zip?…",
      "subtitles_vtt": "https://…/subtitles.vtt?…", "subtitles_srt": "https://…/subtitles.srt?…",
      "chapters": "https://…/chapters.txt?…", "thumbnail": "https://…/thumbnail.jpg?…"
    },
    "downloads_expire_at": "2026-09-08T10:12:00Z"
  }
}

Keys are present only for files the run produced (no chapters, no chapter GIFs).

Sending the video somewhere

We do not host uploads to other platforms ourselves. Point the webhook at Zapier, Make or n8n and pick the destination there: all three have a "catch webhook" trigger, and all three can upload a file from a URL to YouTube, Wistia, Vimeo, Google Drive, OneDrive, Dropbox or an S3 bucket. A coding agent can do the same from the webhook payload, and developer teams often prefer dropping the file straight into their own bucket.

For YouTube, use title for the title, chapters for the description and subtitles_srt for the captions. For Wistia, video and subtitles_srt are enough.