Everything an applied change touched was read out of the account and written down before it ran. Putting it back replays that, so it is a recorded thing rather than a reconstruction.
Look before you press
curl -s https://top-rated.team/google-ads/v1/changes/chg_abc123 \ -H "X-API-KEY: $MAKEHYBRID_KEY"
The answer carries revertable, and not_revertable_because when it is false. Read that first: a change that created something new cannot be undone this way, and so can anything Google would not let us read back before the change was made.
Put it back
curl -sX POST https://top-rated.team/google-ads/v1/changes/chg_abc123/revert \ -H "X-API-KEY: $MAKEHYBRID_KEY"
It goes in as a change of its own, with its own record and its own undo — so putting something back can itself be put back. The original is marked reverted and names the change that did it.
If Google refuses the revert, nothing happened: a mutate runs whole or not at all, so the original is still applied and still exactly what it was. The refusal says so rather than leaving it marked as undone.
What was written down, and when
The undo is read out of the account in the moment before the change runs, not after it. That ordering is the whole reason this works: once a bid has moved, the number it moved from is not in the account any more, and nothing could reconstruct it except a copy taken beforehand. So one is taken.
What gets written down is the state of exactly the things the change touches — the fields named in its update masks, read back from the resources it names. A change that pauses one campaign records that campaign's status, not a snapshot of the account, which is why putting it back cannot trample a change somebody else made in the meantime.
Questions people ask
Which changes cannot be put back?
Anything that created something new — a campaign, an ad, an asset — because there was no previous state to record. The change says so in not_revertable_because before you press, rather than failing when you try.
Can I undo the undo?
Yes. Putting a change back goes in as a change of its own, with its own record and its own undo written down the same way, so it can be put back in turn.
What if somebody changed the same thing in Google Ads meanwhile?
Putting the change back writes the recorded values over whatever is there now. That is the honest behaviour for an undo, and it is the reason to read the account before pressing rather than after.