How a run gets here
One POST with a key on it. There is nothing to install on our side and nothing to whitelist on yours.
POST /api/screenrunner/runs
Authorization: Bearer <your key>
Content-Type: application/json
{
"product": "pop-core",
"runId": "2026-09-20-0741",
"gitBranch": "master",
"screens": [ … ]
}
Three things to wire up
- 1
Mint a key
In the workspace, under API keys. The key decides which workspace owns the run, so a key from the wrong workspace uploads into the wrong place — that is the first thing to check when runs stop appearing.
- 2
Name the project
Whatever name you post as becomes the project. One codebase, one name, kept the same between runs so a run can be compared with the one before it.
- 3
Post the run
Screens, their flow grouping, the viewport, the branch and the sha. The run appears as soon as it lands.
What the endpoint does and does not care about
- It answers on every host.The ingest path carries no domain constraint. Moving the product to its own host did not move the endpoint, and it never will.
- The key decides whose run it is.Not a header you set, not the host you posted to. Revoke the key and the uploads stop.
- A run arrives private.It lands as a build with comments refused by the server. You decide when it is worth other people's time.
- Screens arrive grouped into flows.The grouping you post is the grouping reviewers read, and it is what a comment belongs to.