Apps
apps.backup
POST
/api/v1/apps/{id}/backup
Back the app up now (a change: the token must hold it)
- Permission
deployment_backup: create + backup
- MCP tool
apps_backup
A change. Your role is graded by the app's environment (production, staging, development): a token holds this function only for the environments your role may change. An AI assistant asks you to confirm it before it runs.
Parameters
| Name | In | Type | Default | Description |
id
required
|
path |
integer |
|
The record's id, as the list gives it. |
format
|
body |
string: zip | dump |
"zip" |
zip: database and filestore; dump: the database alone. |
The answer: 5 fields
| Field | Type | Description |
state |
string: started | already_running |
|
run_id |
integer or null |
The run to follow with runs.get. |
app_id |
integer or null |
|
backup_id |
integer or null |
|
backup_run_id |
integer or null |
The backup taken first, when one was asked for: the change's run waits for it. |
Errors
invalid_token401
api_not_available403
function_not_allowed403
access_denied403
rate_limited429
unknown_parameter400
invalid_parameter400
invalid_request400
internal_error500
not_found404
writes_disabled403
idempotency_key_required428
idempotency_key_reused422
request_in_progress409
locked423
plan_required403
in_progress409
curl -X POST -H "Authorization: Bearer $CW_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
-d '{}' https://cloudwady.com/api/v1/apps/42/backup
apps.get
GET
/api/v1/apps/{id}
One app, with its URLs, repositories and any version upgrade under way
- Permission
deployment_app: read
- MCP tool
apps_get
Graded by the environment of the record asked for.
Parameters
| Name | In | Type | Default | Description |
id
required
|
path |
integer |
|
The record's id, as the list gives it. |
The answer: 46 fields
| Field | Type | Description |
id |
integer |
|
name |
string |
|
namespace |
string |
|
project |
string |
|
environment |
string |
|
environment_type |
string or null: production | staging | development |
null for an app outside any environment. |
version |
string |
|
edition |
string |
|
state |
string |
|
url |
string or null |
|
server |
string or null |
|
deployed_at |
string or null |
|
updated_at |
string or null |
|
backup_health |
string: healthy | warning | critical | none |
|
last_backup_at |
string or null |
|
urls |
array of object |
|
urls[].url |
string |
|
urls[].primary |
boolean |
|
urls[].state |
string |
|
urls[].ssl_status |
string: valid | expiring_soon | expired | error | unknown |
|
urls[].ssl_expires_at |
string or null |
|
urls[].public_check |
string or null: passed | failed |
The last outside check: the URL answered as this app, or not; null: not checked. |
urls[].public_check_code |
string or null |
What the last check found, or why it did not run. |
urls[].public_checked_at |
string or null |
|
repositories |
array of object |
|
repositories[].repository |
string |
|
repositories[].repository_url |
string or null |
|
repositories[].branch |
string |
|
repositories[].main |
boolean |
|
repositories[].deployed_sha |
string or null |
The commit checked out on the server, when last read. |
repositories[].head_sha |
string or null |
The branch's newest commit the platform knows. |
repositories[].deployed_message |
string or null |
|
repositories[].up_to_date |
boolean or null |
null when either commit is unknown. |
repositories[].checked_at |
string or null |
|
repositories[].deleted_upstream |
boolean |
|
upgrade |
object or null |
The app's open version upgrade, as the old app or the new one; null when none. |
upgrade.id |
integer |
|
upgrade.from_version |
string |
|
upgrade.to_version |
string |
|
upgrade.purpose |
string: test | production |
|
upgrade.state |
string |
|
upgrade.source_app_id |
integer |
|
upgrade.source_app |
string |
|
upgrade.new_app_id |
integer or null |
|
upgrade.new_app |
string or null |
|
maintenance |
boolean |
In maintenance: its users see the maintenance page until it is taken out. |
Errors
invalid_token401
api_not_available403
function_not_allowed403
access_denied403
rate_limited429
unknown_parameter400
invalid_parameter400
invalid_request400
internal_error500
not_found404
curl -H "Authorization: Bearer $CW_TOKEN" https://cloudwady.com/api/v1/apps/42
apps.list
GET
/api/v1/apps
Apps in the token's namespaces
- Permission
deployment_app: read
- MCP tool
apps_list
Parameters
| Name | In | Type | Default | Description |
search
|
query |
string |
|
Only apps whose name contains this (any case). |
environment_type
|
query |
string: production | staging | development |
|
|
server_id
|
query |
integer |
|
|
version
|
query |
string |
|
An Odoo version, e.g. 19.0. |
edition
|
query |
string: community | enterprise |
|
|
project
|
query |
string |
|
Project name or code contains this. |
state
|
query |
string |
|
|
include_deleted
|
query |
boolean |
false |
Also list deleted and disabled records. |
limit
|
query |
integer |
50 |
|
offset
|
query |
integer |
0 |
|
namespace
|
query |
string |
|
Only this one of the token's namespaces (its code or id). |
The answer: 17 fields
| Field | Type | Description |
items |
array of object |
|
items[].id |
integer |
|
items[].name |
string |
|
items[].namespace |
string |
|
items[].project |
string |
|
items[].environment |
string |
|
items[].environment_type |
string or null: production | staging | development |
null for an app outside any environment. |
items[].version |
string |
|
items[].edition |
string |
|
items[].state |
string |
|
items[].url |
string or null |
|
items[].server |
string or null |
|
items[].deployed_at |
string or null |
|
items[].updated_at |
string or null |
|
items[].backup_health |
string: healthy | warning | critical | none |
|
items[].last_backup_at |
string or null |
|
total |
integer |
|
Errors
invalid_token401
api_not_available403
function_not_allowed403
access_denied403
rate_limited429
unknown_parameter400
invalid_parameter400
invalid_request400
internal_error500
namespace_not_found404
curl -H "Authorization: Bearer $CW_TOKEN" https://cloudwady.com/api/v1/apps
apps.maintenance
POST
/api/v1/apps/{id}/maintenance
Put the app in maintenance or take it out (a change: users see the maintenance page)
- Permission
deployment_app: update + deploy
- MCP tool
apps_maintenance
A change. Your role is graded by the app's environment (production, staging, development): a token holds this function only for the environments your role may change. An AI assistant asks you to confirm it before it runs.
Parameters
| Name | In | Type | Default | Description |
id
required
|
path |
integer |
|
The record's id, as the list gives it. |
on
required
|
body |
boolean |
|
true puts the app in maintenance, false takes it out. |
The answer: 5 fields
| Field | Type | Description |
state |
string: started | already_running |
|
run_id |
integer or null |
The run to follow with runs.get. |
app_id |
integer or null |
|
backup_id |
integer or null |
|
backup_run_id |
integer or null |
The backup taken first, when one was asked for: the change's run waits for it. |
Errors
invalid_token401
api_not_available403
function_not_allowed403
access_denied403
rate_limited429
unknown_parameter400
invalid_parameter400
invalid_request400
internal_error500
not_found404
writes_disabled403
idempotency_key_required428
idempotency_key_reused422
request_in_progress409
locked423
plan_required403
missing_parameter400
in_progress409
not_deployed409
upgrade_standby409
curl -X POST -H "Authorization: Bearer $CW_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
-d '{"on": true}' https://cloudwady.com/api/v1/apps/42/maintenance
apps.restart
POST
/api/v1/apps/{id}/restart
Restart the app (a change: its users are cut off for a moment)
- Permission
deployment_app: update + deploy
- MCP tool
apps_restart
A change. Your role is graded by the app's environment (production, staging, development): a token holds this function only for the environments your role may change. An AI assistant asks you to confirm it before it runs.
Parameters
| Name | In | Type | Default | Description |
id
required
|
path |
integer |
|
The record's id, as the list gives it. |
The answer: 5 fields
| Field | Type | Description |
state |
string: started | already_running |
|
run_id |
integer or null |
The run to follow with runs.get. |
app_id |
integer or null |
|
backup_id |
integer or null |
|
backup_run_id |
integer or null |
The backup taken first, when one was asked for: the change's run waits for it. |
Errors
invalid_token401
api_not_available403
function_not_allowed403
access_denied403
rate_limited429
unknown_parameter400
invalid_parameter400
invalid_request400
internal_error500
not_found404
writes_disabled403
idempotency_key_required428
idempotency_key_reused422
request_in_progress409
locked423
plan_required403
in_progress409
upgrade_standby409
curl -X POST -H "Authorization: Bearer $CW_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
-d '{}' https://cloudwady.com/api/v1/apps/42/restart
apps.update
POST
/api/v1/apps/{id}/update
Update the app to its branches' latest code, and its modules (a change)
- Permission
deployment_app: update + deploy
- MCP tool
apps_update
A change. Your role is graded by the app's environment (production, staging, development): a token holds this function only for the environments your role may change. An AI assistant asks you to confirm it before it runs.
Parameters
| Name | In | Type | Default | Description |
id
required
|
path |
integer |
|
The record's id, as the list gives it. |
quick
|
body |
boolean |
false |
Pull the code and restart on the same image, without rebuilding. |
modules
|
body |
string: changed | configured | none |
"changed" |
The module update that follows: of the addons the pull changed, of the app's configured scope, or none (quick only). |
backup
|
body |
boolean |
|
Back the app up first, in the same queue. Default: on in production, off elsewhere. |
backup_format
|
body |
string: zip | dump |
"zip" |
zip: database and filestore; dump: the database alone. |
The answer: 5 fields
| Field | Type | Description |
state |
string: started | already_running |
|
run_id |
integer or null |
The run to follow with runs.get. |
app_id |
integer or null |
|
backup_id |
integer or null |
|
backup_run_id |
integer or null |
The backup taken first, when one was asked for: the change's run waits for it. |
Errors
invalid_token401
api_not_available403
function_not_allowed403
access_denied403
rate_limited429
unknown_parameter400
invalid_parameter400
invalid_request400
internal_error500
not_found404
writes_disabled403
idempotency_key_required428
idempotency_key_reused422
request_in_progress409
locked423
plan_required403
in_progress409
not_deployed409
upgrade_standby409
curl -X POST -H "Authorization: Bearer $CW_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
-d '{}' https://cloudwady.com/api/v1/apps/42/update
apps.update_modules
POST
/api/v1/apps/{id}/update-modules
Update the named modules (odoo -u) on the app's database (a change)
- Permission
deployment_app: update + deploy
- MCP tool
apps_update_modules
A change. Your role is graded by the app's environment (production, staging, development): a token holds this function only for the environments your role may change. An AI assistant asks you to confirm it before it runs.
Parameters
| Name | In | Type | Default | Description |
id
required
|
path |
integer |
|
The record's id, as the list gives it. |
modules
required
|
body |
string |
|
The modules to update, comma-separated: sale,stock. |
backup
|
body |
boolean |
|
Back the app up first, in the same queue. Default: on in production, off elsewhere. |
backup_format
|
body |
string: zip | dump |
"zip" |
zip: database and filestore; dump: the database alone. |
The answer: 5 fields
| Field | Type | Description |
state |
string: started | already_running |
|
run_id |
integer or null |
The run to follow with runs.get. |
app_id |
integer or null |
|
backup_id |
integer or null |
|
backup_run_id |
integer or null |
The backup taken first, when one was asked for: the change's run waits for it. |
Errors
invalid_token401
api_not_available403
function_not_allowed403
access_denied403
rate_limited429
unknown_parameter400
invalid_parameter400
invalid_request400
internal_error500
not_found404
writes_disabled403
idempotency_key_required428
idempotency_key_reused422
request_in_progress409
locked423
plan_required403
missing_parameter400
in_progress409
not_deployed409
upgrade_standby409
curl -X POST -H "Authorization: Bearer $CW_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
-d '{"modules": "sale,stock"}' https://cloudwady.com/api/v1/apps/42/update-modules
Runs
runs.get
GET
/api/v1/runs/{id}
One run with its steps and, where a step failed, why
- Permission
deployment_workflow: read
- MCP tool
runs_get
Graded by the environment of the record asked for.
Parameters
| Name | In | Type | Default | Description |
id
required
|
path |
integer |
|
The record's id, as the list gives it. |
The answer: 23 fields
| Field | Type | Description |
id |
integer |
|
workflow |
string |
|
action |
string |
|
state |
string |
|
retrying |
boolean |
In error, but a failed step will be retried automatically: not failed yet. |
namespace |
string |
|
record |
string or null |
|
record_type |
string or null |
|
app_id |
integer or null |
|
project |
string or null |
The project the run was about; null for a server or service run. |
environment_type |
string or null: production | staging | development |
The environment the run was about; null outside one. |
created_at |
string or null |
|
updated_at |
string or null |
|
steps |
array of object |
|
steps[].name |
string |
|
steps[].state |
string |
|
steps[].started_at |
string or null |
|
steps[].updated_at |
string or null |
|
steps[].reason |
string or null |
|
watcher |
object or null |
A backup, restore or version upgrade finishes on the server after its steps launched it, and a watcher there reports back: until then the run stays running. Null for a run without one. |
watcher.state |
string: waiting | completed | failed | timeout | stopped |
|
watcher.progress |
string or null |
What it is doing now, while waiting. |
watcher.reason |
string or null |
Why it failed, timed out or stopped. |
Errors
invalid_token401
api_not_available403
function_not_allowed403
access_denied403
rate_limited429
unknown_parameter400
invalid_parameter400
invalid_request400
internal_error500
not_found404
curl -H "Authorization: Bearer $CW_TOKEN" https://cloudwady.com/api/v1/runs/42
runs.list
GET
/api/v1/runs
Recent deploy / update / backup runs in the token's namespaces, newest first
- Permission
deployment_workflow: read
- MCP tool
runs_list
Parameters
| Name | In | Type | Default | Description |
app_id
|
query |
integer |
|
|
state
|
query |
string |
|
|
limit
|
query |
integer |
50 |
|
offset
|
query |
integer |
0 |
|
namespace
|
query |
string |
|
Only this one of the token's namespaces (its code or id). |
The answer: 15 fields
| Field | Type | Description |
items |
array of object |
|
items[].id |
integer |
|
items[].workflow |
string |
|
items[].action |
string |
|
items[].state |
string |
|
items[].retrying |
boolean |
In error, but a failed step will be retried automatically: not failed yet. |
items[].namespace |
string |
|
items[].record |
string or null |
|
items[].record_type |
string or null |
|
items[].app_id |
integer or null |
|
items[].project |
string or null |
The project the run was about; null for a server or service run. |
items[].environment_type |
string or null: production | staging | development |
The environment the run was about; null outside one. |
items[].created_at |
string or null |
|
items[].updated_at |
string or null |
|
total |
integer |
|
Errors
invalid_token401
api_not_available403
function_not_allowed403
access_denied403
rate_limited429
unknown_parameter400
invalid_parameter400
invalid_request400
internal_error500
namespace_not_found404
curl -H "Authorization: Bearer $CW_TOKEN" https://cloudwady.com/api/v1/runs
runs.retry
POST
/api/v1/runs/{id}/retry
Retry a failed run from the step that failed (a change: the token must hold it)
- Permission
deployment_workflow: update + deploy
- MCP tool
runs_retry
A change. Your role is graded by the app's environment (production, staging, development): a token holds this function only for the environments your role may change. An AI assistant asks you to confirm it before it runs.
Parameters
| Name | In | Type | Default | Description |
id
required
|
path |
integer |
|
The record's id, as the list gives it. |
now
|
body |
boolean |
false |
Retry even though an automatic retry is due in minutes. |
The answer: 5 fields
| Field | Type | Description |
state |
string: started | already_running |
|
run_id |
integer or null |
The run to follow with runs.get. |
app_id |
integer or null |
|
backup_id |
integer or null |
|
backup_run_id |
integer or null |
The backup taken first, when one was asked for: the change's run waits for it. |
Errors
invalid_token401
api_not_available403
function_not_allowed403
access_denied403
rate_limited429
unknown_parameter400
invalid_parameter400
invalid_request400
internal_error500
not_found404
writes_disabled403
idempotency_key_required428
idempotency_key_reused422
request_in_progress409
locked423
plan_required403
not_retryable409
retry_coming409
curl -X POST -H "Authorization: Bearer $CW_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
-d '{}' https://cloudwady.com/api/v1/runs/42/retry