Skip to content

Roll a halted, merged or failed proposal back (DAWG-120).

POST
/v1/orgs/{org}/proposals/{proposal_id}/rollback
curl --request POST \
--url https://api.updawg.net/v1/orgs/example/proposals/example/rollback

Every host it changed goes back to the snapshot it took before the change: the whole filesystem, so configuration edited and logs written since go back too. Hosts without such a snapshot are skipped, and the answer says which and why. One person who may approve may ask; the signer checks that they still may when it signs. Once asked, the proposal cannot be resumed.

org
required
string

Organization slug.

proposal_id
required
string

The prp_… id.

Asked for; the jobs are being signed.

Media typeapplication/json

A proposal’s rollback.

object
blocked

Why one cannot be asked for now. Absent when it can, or when it has been.

string | null
hosts
required

The hosts it restores, each to the snapshot it took before this proposal changed it.

Array<object>
object
host_id
required
string
hostname
required
string
job_status

The rollback job’s status once it is signed: queued, delivered, running, succeeded, failed, rejected_by_host, expired.

string | null
snapshot_id
required
string
requested
One of:

Who asked, and when. Absent until somebody does.

object
at
required
string format: date-time
by
required

The usr_… id.

string
email
required
string
name
string | null
skipped
required

Hosts the proposal changed that it cannot restore, and why.

Array<object>
object
host_id
required
string
hostname
required
string
reason
required
string
Examplegenerated
{
"blocked": "example",
"hosts": [
{
"host_id": "example",
"hostname": "example",
"job_status": "example",
"snapshot_id": "example"
}
],
"requested": {
"at": "2026-04-15T12:00:00Z",
"by": "example",
"email": "example",
"name": "example"
},
"skipped": [
{
"host_id": "example",
"hostname": "example",
"reason": "example"
}
]
}

No session.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

Not permitted for this role.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

No such proposal here.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

Not possible now, or already asked for; detail says why.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

Over the organization’s request limit. Retry-After says when to try again; RateLimit-Limit is the burst.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}