Upload a new release
const url = 'https://api.aetherpush.com/v1/apps/example/deployments/example/release';const form = new FormData();form.append('package', 'file');form.append('packageInfo', '{"appVersion":"1.0.0","description":"Bug fixes","isMandatory":false}');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.aetherpush.com/v1/apps/example/deployments/example/release \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: multipart/form-data' \ --form package=@file \ --form 'packageInfo={"appVersion":"1.0.0","description":"Bug fixes","isMandatory":false}'Uploads a new release package to the deployment. Accepts either a
flat JS bundle file or a zip archive containing the bundle plus
assets. The packageInfo part is a JSON-encoded string
containing release metadata (appVersion, description, isMandatory,
rollout, etc.).
Rate limited to 100 uploads per IP per 15 minutes.
Returns 409 if the uploaded package is byte-identical to the current release on this deployment, or if the previous release is still in an unfinished rollout.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”object
The package archive to upload. Either a flat JS bundle file or a zip containing the bundle plus assets. Sent as a multipart file part.
JSON-encoded string containing a PackageInfo object. Note this is a string field in the multipart body, not a nested JSON object. Example value (URL-encoded by the multipart encoder):
{"appVersion":"1.0.0","description":"Bug fixes","isMandatory":false}
See the PackageInfo schema for valid fields.
Responses
Section titled “Responses”Release uploaded and committed.
object
object
Signed URL to download the package bundle.
Map of source package hash to diff blob info.
object
object
Signed URL to the package manifest (file hash map).
Set when releaseMethod is Promote.
Set when releaseMethod is Promote or Rollback.
Account email of the releaser.
Package size in bytes.
Unix timestamp in milliseconds.
Example
{ "package": { "appVersion": "1.0.0", "label": "v3", "releaseMethod": "Upload" }}Headers
Section titled “Headers”Missing file, invalid packageInfo JSON, or validation error.
object
Human-readable error message.
Unique identifier for the request, also exposed as the X-Request-Id response header.
object
object
Example
{ "error": "The requested resource was not found.", "requestId": "req_abc123"}Unauthenticated, or not a collaborator.
object
Human-readable error message.
Unique identifier for the request, also exposed as the X-Request-Id response header.
Example
{ "error": "The requested resource was not found.", "requestId": "req_abc123"}App or deployment not found.
object
Human-readable error message.
Unique identifier for the request, also exposed as the X-Request-Id response header.
Example
{ "error": "The requested resource was not found.", "requestId": "req_abc123"}Either the uploaded package is identical to the current release on this deployment, or the previous release is still in an unfinished rollout.
object
Human-readable error message.
Unique identifier for the request, also exposed as the X-Request-Id response header.
Example
{ "error": "The requested resource was not found.", "requestId": "req_abc123"}Upload rate limit exceeded.
object
Human-readable error message.
Unique identifier for the request, also exposed as the X-Request-Id response header.
Example
{ "error": "The requested resource was not found.", "requestId": "req_abc123"}