curl --request POST \
--url https://api.mixpeek.com/v1/apps/{app_id}/deploy \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"environment": "production",
"message": "Deploy via bundle upload",
"source": "cli_upload",
"bundle_s3_key": "<string>",
"source_files": {},
"git_commit_sha": "<string>",
"git_commit_message": "<string>",
"git_author": "<string>"
}
'import requests
url = "https://api.mixpeek.com/v1/apps/{app_id}/deploy"
payload = {
"environment": "production",
"message": "Deploy via bundle upload",
"source": "cli_upload",
"bundle_s3_key": "<string>",
"source_files": {},
"git_commit_sha": "<string>",
"git_commit_message": "<string>",
"git_author": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
environment: 'production',
message: 'Deploy via bundle upload',
source: 'cli_upload',
bundle_s3_key: '<string>',
source_files: {},
git_commit_sha: '<string>',
git_commit_message: '<string>',
git_author: '<string>'
})
};
fetch('https://api.mixpeek.com/v1/apps/{app_id}/deploy', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mixpeek.com/v1/apps/{app_id}/deploy",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'environment' => 'production',
'message' => 'Deploy via bundle upload',
'source' => 'cli_upload',
'bundle_s3_key' => '<string>',
'source_files' => [
],
'git_commit_sha' => '<string>',
'git_commit_message' => '<string>',
'git_author' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mixpeek.com/v1/apps/{app_id}/deploy"
payload := strings.NewReader("{\n \"environment\": \"production\",\n \"message\": \"Deploy via bundle upload\",\n \"source\": \"cli_upload\",\n \"bundle_s3_key\": \"<string>\",\n \"source_files\": {},\n \"git_commit_sha\": \"<string>\",\n \"git_commit_message\": \"<string>\",\n \"git_author\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mixpeek.com/v1/apps/{app_id}/deploy")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"environment\": \"production\",\n \"message\": \"Deploy via bundle upload\",\n \"source\": \"cli_upload\",\n \"bundle_s3_key\": \"<string>\",\n \"source_files\": {},\n \"git_commit_sha\": \"<string>\",\n \"git_commit_message\": \"<string>\",\n \"git_author\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/apps/{app_id}/deploy")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"environment\": \"production\",\n \"message\": \"Deploy via bundle upload\",\n \"source\": \"cli_upload\",\n \"bundle_s3_key\": \"<string>\",\n \"source_files\": {},\n \"git_commit_sha\": \"<string>\",\n \"git_commit_message\": \"<string>\",\n \"git_author\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"app_id": "<string>",
"deploy_id": "<string>",
"status": "queued",
"environment": "<string>",
"message": "<string>"
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}Deploy an App
Queue a build+deploy for an App, creating a new version.
Full deploy workflow:
POST /{app_id}/deploy/upload-url→ get a presigned S3 PUT URL- Upload your built dist/ zip to that URL
- Call this endpoint with the returned
bundle_s3_key - Optionally include
source_files(path→content map) for version diffing - Poll
GET /{app_id}/deploys/{deploy_id}until status iscomplete
Edit-and-redeploy workflow:
GET /{app_id}/versions/{version}/download→ download the bundle zip- Edit files locally
- Re-zip and upload via upload-url → deploy (creates a new version)
GET /{app_id}/versions/{old}/diff/{new}to review changes
Each deploy creates an immutable version record. Use POST /{app_id}/versions/{n}/restore
for instant rollback to any previous version.
curl --request POST \
--url https://api.mixpeek.com/v1/apps/{app_id}/deploy \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"environment": "production",
"message": "Deploy via bundle upload",
"source": "cli_upload",
"bundle_s3_key": "<string>",
"source_files": {},
"git_commit_sha": "<string>",
"git_commit_message": "<string>",
"git_author": "<string>"
}
'import requests
url = "https://api.mixpeek.com/v1/apps/{app_id}/deploy"
payload = {
"environment": "production",
"message": "Deploy via bundle upload",
"source": "cli_upload",
"bundle_s3_key": "<string>",
"source_files": {},
"git_commit_sha": "<string>",
"git_commit_message": "<string>",
"git_author": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
environment: 'production',
message: 'Deploy via bundle upload',
source: 'cli_upload',
bundle_s3_key: '<string>',
source_files: {},
git_commit_sha: '<string>',
git_commit_message: '<string>',
git_author: '<string>'
})
};
fetch('https://api.mixpeek.com/v1/apps/{app_id}/deploy', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mixpeek.com/v1/apps/{app_id}/deploy",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'environment' => 'production',
'message' => 'Deploy via bundle upload',
'source' => 'cli_upload',
'bundle_s3_key' => '<string>',
'source_files' => [
],
'git_commit_sha' => '<string>',
'git_commit_message' => '<string>',
'git_author' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mixpeek.com/v1/apps/{app_id}/deploy"
payload := strings.NewReader("{\n \"environment\": \"production\",\n \"message\": \"Deploy via bundle upload\",\n \"source\": \"cli_upload\",\n \"bundle_s3_key\": \"<string>\",\n \"source_files\": {},\n \"git_commit_sha\": \"<string>\",\n \"git_commit_message\": \"<string>\",\n \"git_author\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mixpeek.com/v1/apps/{app_id}/deploy")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"environment\": \"production\",\n \"message\": \"Deploy via bundle upload\",\n \"source\": \"cli_upload\",\n \"bundle_s3_key\": \"<string>\",\n \"source_files\": {},\n \"git_commit_sha\": \"<string>\",\n \"git_commit_message\": \"<string>\",\n \"git_author\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/apps/{app_id}/deploy")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"environment\": \"production\",\n \"message\": \"Deploy via bundle upload\",\n \"source\": \"cli_upload\",\n \"bundle_s3_key\": \"<string>\",\n \"source_files\": {},\n \"git_commit_sha\": \"<string>\",\n \"git_commit_message\": \"<string>\",\n \"git_author\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"app_id": "<string>",
"deploy_id": "<string>",
"status": "queued",
"environment": "<string>",
"message": "<string>"
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}Authorizations
Mixpeek API key, sent as Authorization: Bearer mxp_sk_.... Create one in Studio under Settings → API Keys, or with an admin key via POST /v1/organizations/users/{user_email}/api-keys. A missing, malformed, unknown, revoked, inactive or expired key returns 401; a key without the permission, scope or plan an operation needs returns 403.
Path Parameters
Body
Keys this body does not declare are ignored, and the response's warnings name them, until 2026-11-02; from 2026-11-02 they are refused with 422 extra_forbidden naming the accepted keys.
Deploy a pre-built bundle (CLI path) or trigger a Git-based build.
Target environment for this deploy
staging, production Deploy message describing what changed (like a git commit message)
Deploy source. 'cli_upload' = zip already uploaded to S3. 'git' = Phase 3b.
cli_upload, git S3 key of the uploaded source zip (required for source='cli_upload')
Map of relative path → file content for source-level version diffs
Show child attributes
Show child attributes
Git commit SHA associated with this deploy
Git commit message associated with this deploy
Git commit author (name )
Was this page helpful?

