import requests
url = "https://platform.ankra.app/org/applications/{application_id}/deploy-runs"
payload = {
"cluster_id": "<string>",
"roles": [
{
"role": "<string>",
"draft_id": "<string>",
"stack_name": "<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({
cluster_id: '<string>',
roles: [{role: '<string>', draft_id: '<string>', stack_name: '<string>'}]
})
};
fetch('https://platform.ankra.app/org/applications/{application_id}/deploy-runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://platform.ankra.app/org/applications/{application_id}/deploy-runs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"cluster_id": "<string>",
"roles": [
{
"role": "<string>",
"draft_id": "<string>",
"stack_name": "<string>"
}
]
}
'{
"id": "<string>",
"cluster_id": "<string>",
"status": "<string>",
"message": "<string>",
"resumed": true,
"divergence": "<string>",
"roles": [
{
"role": "<string>",
"position": 123,
"draft_id": "<string>",
"stack_name": "<string>",
"created_stack_name": "<string>",
"operation_id": "<string>",
"status": "<string>",
"message": "<string>"
}
],
"phases": [
{
"phase": "<string>",
"status": "<string>",
"detail": {},
"started_at": "<string>",
"finished_at": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Start or resume an application deploy run
Hand the deploy wizard’s whole ordered multi-stack deploy to the server. The run is persisted before anything is created - roles, drafts, and the stack name derived for each - and the maintenance supervisor creates each stack in turn, waiting for every stack that has another behind it to report up. Closing the browser tab no longer strands the remaining stacks. A request made while a run for the same application and cluster is already in flight joins that run and answers with resumed=true rather than starting a rival queue. Browser session authentication with the X-Ankra-CSRF double-submit header only (no bearer twin).
import requests
url = "https://platform.ankra.app/org/applications/{application_id}/deploy-runs"
payload = {
"cluster_id": "<string>",
"roles": [
{
"role": "<string>",
"draft_id": "<string>",
"stack_name": "<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({
cluster_id: '<string>',
roles: [{role: '<string>', draft_id: '<string>', stack_name: '<string>'}]
})
};
fetch('https://platform.ankra.app/org/applications/{application_id}/deploy-runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://platform.ankra.app/org/applications/{application_id}/deploy-runs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"cluster_id": "<string>",
"roles": [
{
"role": "<string>",
"draft_id": "<string>",
"stack_name": "<string>"
}
]
}
'{
"id": "<string>",
"cluster_id": "<string>",
"status": "<string>",
"message": "<string>",
"resumed": true,
"divergence": "<string>",
"roles": [
{
"role": "<string>",
"position": 123,
"draft_id": "<string>",
"stack_name": "<string>",
"created_stack_name": "<string>",
"operation_id": "<string>",
"status": "<string>",
"message": "<string>"
}
],
"phases": [
{
"phase": "<string>",
"status": "<string>",
"detail": {},
"started_at": "<string>",
"finished_at": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
The queue in deploy order: platform stacks first, the application stack last.
Show child attributes
Show child attributes
Where the application's workload lands on this cluster. The application role's stack deploys the manifests committed under .ankra/manifests, rendered into this namespace; a run that omits it promotes its designed stacks unchanged.
Sizing the deploy chose ('quick' or 'high_availability'). Omitted is default sizing.
Answers to the application's option contract that no repository can hold - the ingress host and class this cluster publishes it on. Options the contract declares a default for, and the image tag of the application's own most recent successful publish, are resolved at render time and need not be sent.
Show child attributes
Show child attributes
The deploy analysis this run was designed from, when there was one. The server verifies it against the analysis it actually ran for this application before recording the journey's analyse phase; an id it cannot verify records nothing.
Response
Successful Response
pending, running, succeeded, or failed.
True when the request joined a run that was already in flight instead of starting a new one.
How a resumed run differs from the queue the request carried (a role not in the run, a role deploying a different stack name or draft, or a differing role count). Null when the request asked for what is already in flight, and always null on a run this request started.
Show child attributes
Show child attributes
The run's journey timeline (analyse, build, stacks, dns, certificate, serving) in narration order, carrying only the phases an observation site stamped. A journey phase absent from the list was never observed.
Show child attributes
Show child attributes