Skip to main content
There are two ways to ship builds to Streampixel automatically:
  1. Cloud builds — connect your GitHub repository or Perforce depot and Streampixel compiles, packages, and (optionally) deploys on every push. No build machine, no scripts. If your pipeline exists only to package and upload, use this and skip the rest of this page.
  2. Your own CI/CD — you keep compiling on your existing pipeline (Jenkins, GitLab CI, TeamCity, Buildkite — anything that can run Unreal’s packaging step), host the packaged .zip at a direct-download URL, and hand that URL to the Upload File API.
This recipe covers the second path. The outcome: every commit packages your Unreal project, registers the build with Streampixel, waits for the build.approved webhook, then distributes it to streaming servers. No manual dashboard steps.

Architecture

The CI job is fire-and-forget. Approval and distribution are handled out-of-band by a tiny webhook listener — that decoupling is what lets the build pipeline take 5 minutes or 50 minutes without holding a CI worker open.

Prerequisites

Keep your API key, user ID, and storage credentials in your CI tool’s secret store — never commit them to the repo, and never echo them in pipeline logs.

Step 1 — Package the build in your pipeline

The packaging step is the same command you’d run locally, scripted on your CI worker:
Then zip the staged output:
Naming the archive after the commit SHA makes any build traceable back to its exact source revision.

Step 2 — Host the .zip at a direct-download URL

Upload the archive to your storage and produce an HTTPS URL that returns the file directly — no login page, no HTML wrapper. With S3-compatible storage, a time-limited presigned URL is ideal:
One hour of validity is long enough for Streampixel to download a large build, short enough that the URL is useless if it leaks.

Step 3 — Register the build with Streampixel

The last CI step hands the URL to the Upload File API:
autoRelease: false means Streampixel won’t deploy automatically — the webhook listener (Step 4) decides when to call distribute. Also worth enforcing at the CI level: run only one shipping job at a time. Distribution is rate-limited to 1 call per 2 minutes per user, and queueing builds in your pipeline keeps you under that ceiling without retries.

Step 4 — Webhook listener

The CI job ends after upload. Streampixel processes the build asynchronously and emits webhook events: build.uploaded, downloading, extracting, saving, then approved or rejected. When build.approved fires, you call distribute. Here is a minimal Express listener:
Run it:
Then register https://your-host.example.com/webhooks/streampixel/9f3a4c1ee21b4f2c as your project’s webhook URL in the dashboard.

Handling rate limits

The distribute endpoint is rate-limited to one call per two minutes per user. The listener above handles this naively — if you ever ship two builds within two minutes (rare in production, common during testing), the second one will fail and stay un-distributed. A robust queue:
Push uploadId onto distributeQueue from the webhook handler instead of calling distribute inline.

Tips

Tag stored builds with the commit SHA. If a build misbehaves in production, the object name or tag identifies the exact source revision without scanning logs.
Use a single Slack channel as your “build feed.” Wire each webhook event into a Slack incoming webhook. The signal — “build approved 12 minutes after commit” — is the fastest way to spot regressions in package size or upload throughput.
Keep autoRelease: false even if you don’t gate distribution on anything. It costs nothing, lets you intercept bad builds, and means manual dashboard distribution still works as an emergency rollback path.

Gotchas

Google Drive share links, Dropbox preview pages, and any URL that returns HTML before the file will fail upload. The endpoint streams the response body as a ZIP and gives up if the first bytes are not a valid archive header. Presigned URLs and public bucket URLs work; HTML wrappers do not. See file URL requirements.
During development, use ngrok or Cloudflare Tunnel:
Register the https://...ngrok.app/webhooks/streampixel/<token> URL in the dashboard. Keep the tunnel up while you test — Streampixel does not retry failed deliveries.
Streampixel does not currently sign webhook payloads. Treat your webhook URL as a shared secret: include a long random token in the path, and reject requests at any other path. See Security hardening for more.
build.approved should fire once per upload, but make your handler idempotent anyway. The distributed Set above is fine for a single-process listener; use a database or Redis if you run multiple replicas.
The default build cap is 24 GB (a soft limit — open a ticket to raise it for free if your build is genuinely larger). A 1-hour presigned URL is usually plenty, but if you ship very large builds while ingestion is queued, bump it to 6 hours.

Next steps

Cloud builds

The managed alternative — no pipeline to maintain.

Upload File API

Full request/response reference for the upload endpoint.

Webhooks

All seven webhook events and their payloads.

Distribute File API

Push an approved build to streaming servers.