This page is the canonical reference for every webhook event Streampixel sends. For setup (where to enter your URL, how to choose events, retry behavior, handler best practices), see the main Webhooks page. For programmatic delivery testing, see the Test Webhook API.Documentation Index
Fetch the complete documentation index at: https://docs.streampixel.io/llms.txt
Use this file to discover all available pages before exploring further.
Quick links
Webhook setup
Configure your URL, choose events, and follow handler best practices.
Test Webhook API
Programmatically send a
webhook.test event from CI or smoke tests.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). The dashed edge tobuild.rejected indicates that a build can be rejected at the distribute stage instead of progressing to Approved. 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.| Field | Type | Description |
|---|---|---|
event | string | The event name (e.g., build.approved). |
projectId | string | The Streampixel project the event belongs to. |
uploadId | string | null | The build identifier. null for events that fire before an upload exists. |
fileUrl | string | null | The build’s source URL. May be null for early-pipeline events. |
status | string | Raw pipeline status string for the build. |
objection | string | null | Reason for rejection. Only populated on build.rejected. |
timestamp | string | ISO 8601 timestamp of when the event occurred. |
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, the build moves to Distribute (and, if autoRelease is true in the upload, on to build.distributing automatically).
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: Distribute.
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 validation at any stage of the pipeline. Once rejected, no further events fire for this uploadId.
Status at trigger: Reject.
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, or calling the Test Webhook API. Never fired during real build operations.
Status at trigger: test.
Event timing summary
| Event | Fires when | Typical delay from upload |
|---|---|---|
build.uploaded | API accepts the upload | Immediate |
build.downloading | Download begins | Seconds |
build.extracting | Extraction begins | Tens of seconds |
build.saving | Persist begins | A minute or two |
build.distributing | Distribution begins | A minute or two after saving |
build.approved | Build is live | Variable — depends on build size |
build.rejected | Validation fails | Any time during the pipeline |
webhook.test | Manual or API trigger | Immediate |
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.
Test Webhook API
Send a
webhook.test event from CI or smoke tests.