Create an API key under Settings → API keys. Keys act for the whole organisation and carry abilities (read projects, write guides, start runs, read billing). Send it as Authorization: Bearer sb_live_… to https://rec.screenbrowser.com/api/v1/….
The essentials
# projects
curl https://rec.screenbrowser.com/api/v1/projects -H "Authorization: Bearer $SB_KEY"
# the guides of a project (kind: auth | main)
curl -X PUT https://rec.screenbrowser.com/api/v1/projects/$PROJECT/guides/main \
-H "Authorization: Bearer $SB_KEY" -H "Content-Type: application/json" \
-d '{"content": "Go to https://app.acme.com\nClick the button named \"New project\"", "name": "Create a project"}'
# the demo user's credentials, encrypted at rest
curl -X PUT https://rec.screenbrowser.com/api/v1/projects/$PROJECT/vars \
-H "Authorization: Bearer $SB_KEY" -H "Content-Type: application/json" \
-d '{"vars": [{"name": "USERNAME", "value": "[email protected]"}, {"name": "PASSWORD", "value": "…"}]}'
# attest, then record
curl -X POST https://rec.screenbrowser.com/api/v1/projects/$PROJECT/attest -H "Authorization: Bearer $SB_KEY" \
-H "Content-Type: application/json" -d '{"attestation_type": "self_owned"}'
curl -X POST https://rec.screenbrowser.com/api/v1/runs -H "Authorization: Bearer $SB_KEY" \
-H "Content-Type: application/json" -d '{"project_id": "'$PROJECT'"}'
# poll, then fetch the video
curl https://rec.screenbrowser.com/api/v1/runs/$RUN -H "Authorization: Bearer $SB_KEY"
curl https://rec.screenbrowser.com/api/v1/runs/$RUN/artifacts/final_mp4 -H "Authorization: Bearer $SB_KEY"
A run's phase is Queued, Preparing, Recording or Finishing while it runs, then Completed, Failed, Canceled or Paused; is_terminal tells you when to stop polling. Video links are signed and valid for fifteen minutes; fetch the artifact again for a fresh one.
Also there
Every export next to the video as GET /api/v1/runs/{run}/artifacts/{kind} with gif, chapter_gifs, subtitles_vtt, subtitles_srt or chapters, and webhooks under /api/v1/webhooks (see Exports and webhooks). Cancel, clone and resume a run; a thumbnail per run; the credit balance and transactions; a one-click top-up link; the brand kit and overlay themes; checkout, plan changes and the billing portal. Refusals come back as JSON with an error code (insufficient_credits with a top_up_url, requires_attestation, concurrent_run_limit, check_limit_reached) and a message written for a person.
Brand, opening and ending
# upload a logo (logo | font | clip); it is processed in the background
curl -X POST https://rec.screenbrowser.com/api/v1/brand-assets -H "Authorization: Bearer $SB_KEY" \
-F kind=logo -F [email protected]
curl https://rec.screenbrowser.com/api/v1/brand-assets/$ASSET -H "Authorization: Bearer $SB_KEY" # status: processing | ready | rejected
# the brand kit; keys you leave out are kept
curl -X PUT https://rec.screenbrowser.com/api/v1/brand-kit -H "Authorization: Bearer $SB_KEY" -H "Content-Type: application/json" \
-d '{"primary_color": "#1c1c0d", "accent_color": "#f9f506", "fg_color": "#1c1c0d", "bg_color": "#fcfcf8",
"font_family": "Space Grotesk", "border_radius_px": 12, "tone": "light", "font": "space-grotesk",
"logo_light_asset_id": "'$ASSET'", "cta_text": "Start your free trial", "website": "example.com",
"bookends": {"opening": {"style": "clean", "seconds": 3}, "ending": {"style": "clean", "seconds": 4}}}'
# a project's own opening and ending (Pro and above)
curl -X PATCH https://rec.screenbrowser.com/api/v1/projects/$PROJECT -H "Authorization: Bearer $SB_KEY" -H "Content-Type: application/json" \
-d '{"bookends": {"mode": "custom", "opening": {"style": "bold", "seconds": 5}, "ending": {"style": "none"}, "fade": true,
"narrate_title": true, "title_line": "Here is how to {title}"}}'
A guide's opening title is video_title on PUT /api/v1/projects/{project}/guides/main. See Brand, opening and ending.
The MCP server offers the same operations as tools for coding agents.