Skip to content

Restore a suspended team

POST
/api/v1/admin/teams/{id}/unsuspend
curl --request POST \
--url https://api.deploybase.eu/api/v1/api/v1/admin/teams/example/unsuspend \
--header 'Authorization: <Authorization>'

Lifts a suspension: the Zitadel organization is reactivated, every disabled Edge Rule is switched back on, each custom domain’s pull zone is re-pointed at its live deployment, the team’s HTTP functions are redeployed, and the team is emailed an all-clear. Safe to re-run.

For a team in an open suspension case, its row in every open case is lifted (lifted_rows, and per row row_outcomes); the cases themselves and their freezes stay open until lifted with POST /admin/suspension-cases/{id}/lift. A held team is released this way too. A row whose restore failed or is incomplete stays suspended (complete false); unsuspend again to retry it.

id
required
string

Team ID (UUID)

OK

Media type application/json
object
data
meta
object
request_id
string
timestamp
string
trace_id
string
data
object
complete

Complete is true only when every step above succeeded: no error field set, no project error or unprocessed project, no failed purge. The admin UI shows a success toast only then; anything else is a red “incomplete” report and a Re-run button (DEP-774). The handler always answers 200 with the outcome, so this flag is the one thing to check.

boolean
functions_error
string
functions_reconciled
boolean
hostnames_purged
integer
hostnames_still_online

HostnamesStillOnline gathers every hostname, across projects and the final purge, that may still be serving: its pointer survived, its zone could not be purged, or its cache could not be evicted. Suspend only. Re-running the suspension retries all of them.

Array<string>
lifted_rows
Array<object>
object
case_id
string
decided_at
string
hold_reason
string
id
string
last_error
string
owner_count
integer
plan_at_decision
string
resolved_at
string
resolved_by
string
role
string
state
string
suspended_by_case
boolean
team_id
string
team_name
string
via_user_id
string
notification_error
string
notification_sent
boolean
projects
Array<object>
object
domains_processed
integer
errors
Array<string>
hostnames_still_online

HostnamesStillOnline are this project’s hostnames whose take-down step still failed after its retries. Suspend only.

Array<string>
previews_processed
integer
production

Production is one of: “disabled”, “restored”, “no_rule” (the project has no production Edge Rule to touch), “no_live_deployment” (nothing to restore it to), “not_processed: …” (the context budget ran out first), or “error: …”.

string
project_id
string
project_slug
string
shares_processed
integer
purge_errors
Array<string>
row_outcomes

RowOutcomes is what lifting each open-case row did; an unsuspend_failed or unsuspend_incomplete row stays suspended and is retried by unsuspending again.

Array<object>
object
case_id
string
complete

Complete is false for unsuspend_incomplete and unsuspend_failed.

boolean
error
string
from

From is the row’s state when the lift acted on it.

string
restore

Restore is the unsuspend report when this lift ran one.

object
complete

Complete is true only when every step above succeeded: no error field set, no project error or unprocessed project, no failed purge. The admin UI shows a success toast only then; anything else is a red “incomplete” report and a Re-run button (DEP-774). The handler always answers 200 with the outcome, so this flag is the one thing to check.

boolean
functions_error
string
functions_reconciled
boolean
hostnames_purged
integer
hostnames_still_online

HostnamesStillOnline gathers every hostname, across projects and the final purge, that may still be serving: its pointer survived, its zone could not be purged, or its cache could not be evicted. Suspend only. Re-running the suspension retries all of them.

Array<string>
notification_error
string
notification_sent
boolean
projects
Array<object>
object
domains_processed
integer
errors
Array<string>
hostnames_still_online

HostnamesStillOnline are this project’s hostnames whose take-down step still failed after its retries. Suspend only.

Array<string>
previews_processed
integer
production

Production is one of: “disabled”, “restored”, “no_rule” (the project has no production Edge Rule to touch), “no_live_deployment” (nothing to restore it to), “not_processed: …” (the context budget ran out first), or “error: …”.

string
project_id
string
project_slug
string
shares_processed
integer
purge_errors
Array<string>
ssr_functions_error
string
ssr_functions_reconciled
boolean
suspended

Suspended is the team’s state AFTER the call.

boolean
transitioned_now

TransitionedNow is whether THIS call moved the flag. False on a re-run, which is also what keeps the statement of reasons from being sent twice.

boolean
zitadel_error
string
zitadel_org_deactivated
boolean
result
string
team_id
string
team_name
string
ssr_functions_error
string
ssr_functions_reconciled
boolean
suspended

Suspended is the team’s state AFTER the call.

boolean
transitioned_now

TransitionedNow is whether THIS call moved the flag. False on a re-run, which is also what keeps the statement of reasons from being sent twice.

boolean
zitadel_error
string
zitadel_org_deactivated
boolean

Example generated

{
"data": {
"complete": true,
"functions_error": "example",
"functions_reconciled": true,
"hostnames_purged": 1,
"hostnames_still_online": [
"example"
],
"lifted_rows": [
{
"case_id": "example",
"decided_at": "example",
"hold_reason": "example",
"id": "example",
"last_error": "example",
"owner_count": 1,
"plan_at_decision": "example",
"resolved_at": "example",
"resolved_by": "example",
"role": "example",
"state": "example",
"suspended_by_case": true,
"team_id": "example",
"team_name": "example",
"via_user_id": "example"
}
],
"notification_error": "example",
"notification_sent": true,
"projects": [
{
"domains_processed": 1,
"errors": [
"example"
],
"hostnames_still_online": [
"example"
],
"previews_processed": 1,
"production": "example",
"project_id": "example",
"project_slug": "example",
"shares_processed": 1
}
],
"purge_errors": [
"example"
],
"row_outcomes": [
{
"case_id": "example",
"complete": true,
"error": "example",
"from": "example",
"restore": {
"complete": true,
"functions_error": "example",
"functions_reconciled": true,
"hostnames_purged": 1,
"hostnames_still_online": [
"example"
],
"notification_error": "example",
"notification_sent": true,
"projects": [
{
"domains_processed": 1,
"errors": [
"example"
],
"hostnames_still_online": [
"example"
],
"previews_processed": 1,
"production": "example",
"project_id": "example",
"project_slug": "example",
"shares_processed": 1
}
],
"purge_errors": [
"example"
],
"ssr_functions_error": "example",
"ssr_functions_reconciled": true,
"suspended": true,
"transitioned_now": true,
"zitadel_error": "example",
"zitadel_org_deactivated": true
},
"result": "example",
"team_id": "example",
"team_name": "example"
}
],
"ssr_functions_error": "example",
"ssr_functions_reconciled": true,
"suspended": true,
"transitioned_now": true,
"zitadel_error": "example",
"zitadel_org_deactivated": true
},
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Bad Request

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string

Example generated

{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Unauthorized

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string

Example generated

{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Forbidden

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string

Example generated

{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Not Found

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string

Example generated

{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

CASE_TEAM_STATE: an open case still wants the team suspended

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string

Example generated

{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Internal Server Error

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string

Example generated

{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Service Unavailable

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string

Example generated

{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Live 022265e7 built