Skip to main content
Uploading a build is a three-step handshake: request a signed upload URL, PUT the file straight to storage, then confirm. The build bytes never pass through the clickproof API itself, so there is no request-size cap in the way - builds up to 600 MB work.
1

Request an upload URL

POST /api/v1/projects//build/upload-url
string
required
The project id, in the URL path.
string
required
Bearer <your API key>.
number
The build’s size in bytes. Optional, but sending it turns an over-limit upload into an instant 413 instead of a wasted transfer.
string
Id of the build asset. Pass it to confirm.
string
Signed storage URL. Valid for a single build upload; do not log it.
2

PUT the build to the upload URL

Send the raw file bytes with a plain PUT - no auth header, the URL is self-authorizing.
3

Confirm

POST /api/v1/projects//build/confirm
string
required
The buildId from step 1.
The confirmed build replaces the project’s current build. The size is verified against what actually landed in storage.
boolean
true on success.
string
The project the build was attached to.
string
Id of the stored build asset.

Errors

Legacy single-request upload

POST /api/v1/projects//build
The older endpoint still accepts the raw build bytes as the request body (Content-Type: application/octet-stream) and responds with the same { ok, projectId, buildId }. It only works for builds under ~100 MB - the platform edge rejects larger request bodies with a 413 before they reach the API. New integrations should use the upload-url / confirm pair above.