Lift a suspension case
const url = 'https://api.deploybase.eu/api/v1/api/v1/admin/suspension-cases/example/lift';const options = {method: 'POST', headers: {Authorization: '<Authorization>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.deploybase.eu/api/v1/api/v1/admin/suspension-cases/example/lift \ --header 'Authorization: <Authorization>'Closes the case and releases its frozen people, then lifts every row: a team this case suspended is restored unless another open case still wants it suspended (kept_by_other_case), a held team is released. Teams that were already suspended before the case stay suspended. teams reports each row the call acted on; a row is marked lifted only once its restore completed, so unsuspend_failed and unsuspend_incomplete rows stay suspended with last_error and complete is false. Lifting a closed case again retries exactly those rows; otherwise it changes nothing.
Authorizations
Section titled “ Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”Suspension case ID (UUID)
Responses
Section titled “ Responses ”OK
object
object
object
object
Escalation evidence: set when an open single-team case was escalated in place to a cascade class. Class/Cascades are the new values; EscalatedFrom is the class it had, Reason stays the original statement and EscalationReason is the escalating admin’s.
OpenedByEmail is resolved at read time for the admin view; never stored.
object
ConfirmedTransferee: the person became owner of the origin by a recent transfer (T1) and the admin confirmed them responsible anyway; their teams were classified like any subject’s.
Email is resolved at read time from the person’s memberships for the admin view; the case stores only the hash.
object
ClosedNow is false when the case was already closed (a re-run that retried rows).
Complete is false when any team’s restore failed or is incomplete: lift again to retry.
object
Complete is false for unsuspend_incomplete and unsuspend_failed.
From is the row’s state when the lift acted on it.
Restore is the unsuspend report when this lift ran one.
object
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.
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.
object
HostnamesStillOnline are this project’s hostnames whose take-down step still failed after its retries. Suspend only.
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: …”.
Suspended is the team’s state AFTER the call.
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.
Example
{ "data": { "case": { "class": "phishing", "escalated_from": "phishing" } }}Bad Request
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Unauthorized
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Forbidden
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Not Found
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Internal Server Error
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Service Unavailable
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Live f79d25b6 built