Quick links
Webhook setup
Configure your URL, choose events, and follow handler best practices.
Upload File API
The endpoint that kicks off the build pipeline and the events below.
Pipeline overview
Every uploaded build moves through a fixed sequence of pipeline stages. Each stage transition fires a webhook event (subject to your subscription filters). A build uploaded withautoRelease: true goes straight from saving to distribution. With autoRelease: false it stops at Ready and fires build.ready; nothing more happens until you activate it (Set Active Build or Distribute File), which then produces build.distributing and build.approved.
The dashed edges show where a build can fail instead: a download that fails after every retry, an archive that fails extraction or validation, or a copy to the streaming servers that fails. Every one of these fires build.rejected, with status naming the stage (Download Failed or Reject) and objection explaining why. Once rejected, no further events fire for that build.
Common payload fields
Every webhook payload (build events and the test event) shares the same envelope.All deliveries are
HTTP POST with Content-Type: application/json and a 10-second timeout. There are no retries — see the Webhooks page for handler best practices.Events
build.uploaded
Triggered by: A new build has been accepted by POST /projects/upload-file and queued for processing. This is the very first event in the pipeline.
Status at trigger: pending.
fileUrl may be null at this stage because the upload manager has not yet resolved the source. Use uploadId as your correlation key going forward.
build.downloading
Triggered by: The build manager has begun downloading the .zip from the URL you submitted.
Status at trigger: Downloading Files.
build.downloading without progressing to build.extracting usually means the source URL is slow or unreachable.
build.extracting
Triggered by: The downloaded archive is being extracted and scanned for required files.
Status at trigger: Extracting & Scanning.
build.rejected with an objection describing the failure.
build.saving
Triggered by: The validated build is being persisted to the project repository.
Status at trigger: Saving to Repository.
build.saving, a build uploaded with autoRelease: true moves straight on to build.distributing; with autoRelease: false it stops and fires build.ready instead.
build.distributing
Triggered by: The build is being copied to streaming servers and made ready to serve traffic. Fires when autoRelease was true on upload, or when Distribute File API was called manually.
Status at trigger: Distributing to Servers (or Distribute when triggered from the dashboard’s Set Live button).
build.ready
Triggered by: The build was processed successfully but not distributed, because it was uploaded with autoRelease: false. It is waiting for you to activate it.
Status at trigger: Ready.
build.ready, run your checks, then call Set Active Build or Distribute File. build.distributing and build.approved follow once you do.
build.approved
Triggered by: Distribution finished successfully and the build is now the live build for the project. This is the event most CI/CD pipelines key off of.
Status at trigger: Approved.
build.rejected
Triggered by: The build failed at any stage of the pipeline: the download gave up after every retry, the archive failed extraction or validation, or the copy to the streaming servers failed. Once rejected, no further events fire for this uploadId.
Status at trigger: Reject, or Download Failed when the source could not be fetched (an expired or unreachable URL). objection carries the reason in both cases.
objection to learn why the build was rejected. Surface it in your team’s CI logs or chat so the developer who pushed the build can act on it.
webhook.test
Triggered by: Manually clicking the Test button in Project Settings. Never fired during real build operations.
Status at trigger: test.
Event timing summary
Times above are typical, not guaranteed. Larger builds, busy regions, and slow source URLs can all extend pipeline duration significantly.
Handling events safely
A few rules that apply across every event:- Use
uploadId+eventas your idempotency key. In rare cases the same event may arrive more than once; deduplicate on your side. - Acknowledge fast. Return
200 OKwithin 10 seconds, then process in the background. Streampixel does not retry failed deliveries — see the Webhooks page for full guidance. - Tolerate unknown events. New events may be added in the future; your handler should treat unfamiliar
eventstrings as a no-op rather than crashing. - Validate the project. Confirm
projectIdmatches a project you expect — never act on a webhook for an unknown project.
Next steps
Webhook setup
Configure URLs, choose events, and follow handler best practices.
Upload File API
The endpoint that triggers the build pipeline events documented above.