Releases
Store releases — staged rollout records with pause, halt, resume, complete and approval. Release environments on a project, such as internal, beta and production, and promotion of a build between them without a new build.
Environments in promotion order, each with its newest release, plus pending promotions and the most recent decided ones.
Authorization
bearer_auth In: header
Path Parameters
Project ID
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/projects/string/environments"{ "environments": [ { "approval_required": true, "approvers": { "role": null, "users": [ { "email": "string", "user_id": "string" } ] }, "created_at": 0, "id": "string", "key": "string", "latest_release": null, "name": "string", "position": 0, "project_id": "string", "promotable": true, "rollout_policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "store": "google_play", "submit_for_review": true, "track": "string", "updated_at": 0 } ], "promotions": [ { "build_id": "string", "build_number": 0, "can_decide": true, "created_at": 0, "decided_at": 0, "decided_by_email": "string", "decision_reason": "string", "environment_id": "string", "environment_name": "string", "error": "string", "id": "string", "project_id": "string", "reason": "string", "release_id": "string", "requested_by_email": "string", "source_environment_name": "string", "source_release_id": "string", "source_track": "string", "state": "pending", "updated_at": 0, "version_code": 0, "version_name": "string" } ]}Adds an environment at the end of the promotion path. Requires the project maintainer role. A release recorded on the environment's store and track belongs to it.
Authorization
bearer_auth In: header
Path Parameters
Project ID
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/projects/string/environments" \ -H "Content-Type: application/json" \ -d '{ "key": "string", "name": "string", "store": "google_play", "track": "string" }'{ "approval_required": true, "approvers": { "role": null, "users": [ { "email": "string", "user_id": "string" } ] }, "created_at": 0, "id": "string", "key": "string", "latest_release": null, "name": "string", "position": 0, "project_id": "string", "promotable": true, "rollout_policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "store": "google_play", "submit_for_review": true, "track": "string", "updated_at": 0}Changes the name, track, approval rule, rollout policy or position. Requires the project maintainer role.
Authorization
bearer_auth In: header
Path Parameters
Project ID
Environment ID
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Changes to an environment. The key and store are fixed once created.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/v1/projects/string/environments/string" \ -H "Content-Type: application/json" \ -d '{}'{ "approval_required": true, "approvers": { "role": null, "users": [ { "email": "string", "user_id": "string" } ] }, "created_at": 0, "id": "string", "key": "string", "latest_release": null, "name": "string", "position": 0, "project_id": "string", "promotable": true, "rollout_policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "store": "google_play", "submit_for_review": true, "track": "string", "updated_at": 0}Its releases stay without an environment; its promotions are removed. Requires the project maintainer role.
Authorization
bearer_auth In: header
Path Parameters
Project ID
Environment ID
Response Body
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/projects/string/environments/string"{ "ok": true}Puts the version a build's live Google Play release already uploaded on the environment's track and records a release with the environment's rollout policy. Nothing is rebuilt. Promoting straight in requires the maintainer role; when the environment requires approval, a developer may ask and the promotion waits as pending without touching the store. Writes an audit log entry.
Authorization
bearer_auth In: header
Path Parameters
Project ID
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/projects/string/promotions" \ -H "Content-Type: application/json" \ -d '{ "build_id": "string", "environment_id": "string" }'{ "build_id": "string", "build_number": 0, "can_decide": true, "created_at": 0, "decided_at": 0, "decided_by_email": "string", "decision_reason": "string", "environment_id": "string", "environment_name": "string", "error": "string", "id": "string", "project_id": "string", "reason": "string", "release_id": "string", "requested_by_email": "string", "source_environment_name": "string", "source_release_id": "string", "source_track": "string", "state": "pending", "updated_at": 0, "version_code": 0, "version_name": "string"}Approves a pending promotion and makes the store change as the approver. Requires one of the environment's approvers (by default any maintainer). API tokens cannot decide promotions. Writes an audit log entry.
Authorization
bearer_auth In: header
Path Parameters
Project ID
Promotion ID
Request Body
application/json
Optional reason
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/projects/string/promotions/string/approve"{ "build_id": "string", "build_number": 0, "can_decide": true, "created_at": 0, "decided_at": 0, "decided_by_email": "string", "decision_reason": "string", "environment_id": "string", "environment_name": "string", "error": "string", "id": "string", "project_id": "string", "reason": "string", "release_id": "string", "requested_by_email": "string", "source_environment_name": "string", "source_release_id": "string", "source_track": "string", "state": "pending", "updated_at": 0, "version_code": 0, "version_name": "string"}Rejects a pending promotion; nothing changes at the store. Requires one of the environment's approvers (by default any maintainer). API tokens cannot decide promotions. Writes an audit log entry.
Authorization
bearer_auth In: header
Path Parameters
Project ID
Promotion ID
Request Body
application/json
Optional reason
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/projects/string/promotions/string/reject"{ "build_id": "string", "build_number": 0, "can_decide": true, "created_at": 0, "decided_at": 0, "decided_by_email": "string", "decision_reason": "string", "environment_id": "string", "environment_name": "string", "error": "string", "id": "string", "project_id": "string", "reason": "string", "release_id": "string", "requested_by_email": "string", "source_environment_name": "string", "source_release_id": "string", "source_track": "string", "state": "pending", "updated_at": 0, "version_code": 0, "version_name": "string"}Recent release history entries across projects the caller can read, newest first.
Authorization
bearer_auth In: header
Query Parameters
Filter by project
Page size, 1 to 200 (default 50)
int64Response Body
application/json
application/json
curl -X GET "https://example.com/v1/release-events"{ "events": [ { "actor_email": "string", "actor_id": "string", "at": 0, "from_fraction": 0, "from_state": null, "id": "string", "reason": "string", "to_fraction": 0, "to_state": "uploading", "build_id": "string", "project_id": "string", "project_name": "string", "release_id": "string", "store": "google_play", "track": "string", "version_name": "string" } ]}Releases in projects the caller can read, newest first.
Authorization
bearer_auth In: header
Query Parameters
Filter by project
Filter by build
Filter by one state or comma-separated states
Page size, 1 to 200 (default 50)
int64Page offset (default 0)
int64Response Body
application/json
application/json
curl -X GET "https://example.com/v1/releases"{ "releases": [ { "allowed_actions": [ "raise" ], "approved_at": 0, "approved_by_email": "string", "artifact_id": "string", "awaiting_approval": true, "build_id": "string", "build_number": 0, "crash_rate": 0, "crash_rate_threshold": 0, "created_at": 0, "environment_id": "string", "environment_name": "string", "health": "unknown", "id": "string", "next_fraction": 0, "next_step_at": 0, "package_name": "string", "platform": "string", "policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "project_id": "string", "project_name": "string", "promoted_from_release_id": "string", "rollout_fraction": 0.1, "state": "uploading", "store": "google_play", "track": "string", "updated_at": 0, "version_code": 0, "version_name": "string" } ], "total": 0}Records a release for a succeeded build. Requires the project maintainer role.
Authorization
bearer_auth In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/releases" \ -H "Content-Type: application/json" \ -d '{ "build_id": "string", "store": "google_play", "track": "string" }'{ "allowed_actions": [ "raise" ], "approved_at": 0, "approved_by_email": "string", "artifact_id": "string", "awaiting_approval": true, "build_id": "string", "build_number": 0, "crash_rate": 0, "crash_rate_threshold": 0, "created_at": 0, "environment_id": "string", "environment_name": "string", "health": "unknown", "id": "string", "next_fraction": 0, "next_step_at": 0, "package_name": "string", "platform": "string", "policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "project_id": "string", "project_name": "string", "promoted_from_release_id": "string", "rollout_fraction": 0.1, "state": "uploading", "store": "google_play", "track": "string", "updated_at": 0, "version_code": 0, "version_name": "string"}Release detail with its full state history, oldest first.
Authorization
bearer_auth In: header
Path Parameters
Release ID
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/releases/string"{ "history": [ { "actor_email": "string", "actor_id": "string", "at": 0, "from_fraction": 0, "from_state": null, "id": "string", "reason": "string", "to_fraction": 0, "to_state": "uploading" } ], "release": { "allowed_actions": [ "raise" ], "approved_at": 0, "approved_by_email": "string", "artifact_id": "string", "awaiting_approval": true, "build_id": "string", "build_number": 0, "crash_rate": 0, "crash_rate_threshold": 0, "created_at": 0, "environment_id": "string", "environment_name": "string", "health": "unknown", "id": "string", "next_fraction": 0, "next_step_at": 0, "package_name": "string", "platform": "string", "policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "project_id": "string", "project_name": "string", "promoted_from_release_id": "string", "rollout_fraction": 0.1, "state": "uploading", "store": "google_play", "track": "string", "updated_at": 0, "version_code": 0, "version_name": "string" }}Records the maintainer approval required by the release policy. Writes history, an audit log entry, and a release event.
Authorization
bearer_auth In: header
Path Parameters
Release ID
Request Body
application/json
Optional reason; fraction is accepted by raise only
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/releases/string/approve"{ "allowed_actions": [ "raise" ], "approved_at": 0, "approved_by_email": "string", "artifact_id": "string", "awaiting_approval": true, "build_id": "string", "build_number": 0, "crash_rate": 0, "crash_rate_threshold": 0, "created_at": 0, "environment_id": "string", "environment_name": "string", "health": "unknown", "id": "string", "next_fraction": 0, "next_step_at": 0, "package_name": "string", "platform": "string", "policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "project_id": "string", "project_name": "string", "promoted_from_release_id": "string", "rollout_fraction": 0.1, "state": "uploading", "store": "google_play", "track": "string", "updated_at": 0, "version_code": 0, "version_name": "string"}Rolls out to 100%. Requires maintainer. Writes history, an audit log entry, and a release event.
Authorization
bearer_auth In: header
Path Parameters
Release ID
Request Body
application/json
Optional reason; fraction is accepted by raise only
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/releases/string/complete"{ "allowed_actions": [ "raise" ], "approved_at": 0, "approved_by_email": "string", "artifact_id": "string", "awaiting_approval": true, "build_id": "string", "build_number": 0, "crash_rate": 0, "crash_rate_threshold": 0, "created_at": 0, "environment_id": "string", "environment_name": "string", "health": "unknown", "id": "string", "next_fraction": 0, "next_step_at": 0, "package_name": "string", "platform": "string", "policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "project_id": "string", "project_name": "string", "promoted_from_release_id": "string", "rollout_fraction": 0.1, "state": "uploading", "store": "google_play", "track": "string", "updated_at": 0, "version_code": 0, "version_name": "string"}Halts the rollout at the store. A halted release never advances until resumed. Requires developer or maintainer. Writes history, an audit log entry, and a release event.
Authorization
bearer_auth In: header
Path Parameters
Release ID
Request Body
application/json
Optional reason; fraction is accepted by raise only
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/releases/string/halt"{ "allowed_actions": [ "raise" ], "approved_at": 0, "approved_by_email": "string", "artifact_id": "string", "awaiting_approval": true, "build_id": "string", "build_number": 0, "crash_rate": 0, "crash_rate_threshold": 0, "created_at": 0, "environment_id": "string", "environment_name": "string", "health": "unknown", "id": "string", "next_fraction": 0, "next_step_at": 0, "package_name": "string", "platform": "string", "policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "project_id": "string", "project_name": "string", "promoted_from_release_id": "string", "rollout_fraction": 0.1, "state": "uploading", "store": "google_play", "track": "string", "updated_at": 0, "version_code": 0, "version_name": "string"}Stops scheduled steps. Requires developer or maintainer. Writes history, an audit log entry, and a release event.
Authorization
bearer_auth In: header
Path Parameters
Release ID
Request Body
application/json
Optional reason; fraction is accepted by raise only
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/releases/string/pause"{ "allowed_actions": [ "raise" ], "approved_at": 0, "approved_by_email": "string", "artifact_id": "string", "awaiting_approval": true, "build_id": "string", "build_number": 0, "crash_rate": 0, "crash_rate_threshold": 0, "created_at": 0, "environment_id": "string", "environment_name": "string", "health": "unknown", "id": "string", "next_fraction": 0, "next_step_at": 0, "package_name": "string", "platform": "string", "policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "project_id": "string", "project_name": "string", "promoted_from_release_id": "string", "rollout_fraction": 0.1, "state": "uploading", "store": "google_play", "track": "string", "updated_at": 0, "version_code": 0, "version_name": "string"}Raises the rollout to fraction, or to the next policy step. Raising to 1 completes the release. Requires maintainer. Writes history, an audit log entry, and a release event.
Authorization
bearer_auth In: header
Path Parameters
Release ID
Request Body
application/json
Optional reason; fraction is accepted by raise only
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/releases/string/raise"{ "allowed_actions": [ "raise" ], "approved_at": 0, "approved_by_email": "string", "artifact_id": "string", "awaiting_approval": true, "build_id": "string", "build_number": 0, "crash_rate": 0, "crash_rate_threshold": 0, "created_at": 0, "environment_id": "string", "environment_name": "string", "health": "unknown", "id": "string", "next_fraction": 0, "next_step_at": 0, "package_name": "string", "platform": "string", "policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "project_id": "string", "project_name": "string", "promoted_from_release_id": "string", "rollout_fraction": 0.1, "state": "uploading", "store": "google_play", "track": "string", "updated_at": 0, "version_code": 0, "version_name": "string"}Resumes a paused or halted release; the next step is one interval away. Requires maintainer. Writes history, an audit log entry, and a release event.
Authorization
bearer_auth In: header
Path Parameters
Release ID
Request Body
application/json
Optional reason; fraction is accepted by raise only
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/releases/string/resume"{ "allowed_actions": [ "raise" ], "approved_at": 0, "approved_by_email": "string", "artifact_id": "string", "awaiting_approval": true, "build_id": "string", "build_number": 0, "crash_rate": 0, "crash_rate_threshold": 0, "created_at": 0, "environment_id": "string", "environment_name": "string", "health": "unknown", "id": "string", "next_fraction": 0, "next_step_at": 0, "package_name": "string", "platform": "string", "policy": { "approval": "none", "crash_rate_threshold": 0, "interval_hours": 0.1, "steps": [ 0.1 ] }, "project_id": "string", "project_name": "string", "promoted_from_release_id": "string", "rollout_fraction": 0.1, "state": "uploading", "store": "google_play", "track": "string", "updated_at": 0, "version_code": 0, "version_name": "string"}Google Play crash and ANR rates with top issues, and App Store hang rate and launch time, for every app the caller's projects released to a store. The daemon reads the stores every few hours with the projects' publishing credentials and serves its latest copy.
Authorization
bearer_auth In: header
Response Body
application/json
curl -X GET "https://example.com/v1/store-vitals"{ "apps": [ { "app_identifier": "string", "error": "string", "issues": [ { "cause": "string", "kind": "string", "last_reported_at": 0, "location": "string", "reports": 0, "url": "string", "users": 0 } ], "project_id": "string", "project_name": "string", "refreshed_at": 0, "store": "google_play", "vitals": [ { "kind": "crash_rate", "points": [ { "label": "string", "value": 0 } ], "threshold": 0, "unit": "string", "value": 0 } ] } ]}Asks the daemon to read the stores now for the caller's apps, for example right after granting a missing permission. Waits up to 20 seconds for the reads and returns what has been read by then. Apps read in the last 30 seconds are not read again.
Authorization
bearer_auth In: header
Response Body
application/json
curl -X POST "https://example.com/v1/store-vitals/refresh"{ "apps": [ { "app_identifier": "string", "error": "string", "issues": [ { "cause": "string", "kind": "string", "last_reported_at": 0, "location": "string", "reports": 0, "url": "string", "users": 0 } ], "project_id": "string", "project_name": "string", "refreshed_at": 0, "store": "google_play", "vitals": [ { "kind": "crash_rate", "points": [ { "label": "string", "value": 0 } ], "threshold": 0, "unit": "string", "value": 0 } ] } ]}