Undo an action
POST /rest/v1/actions/{id}/undo
Undoes an action within 30 days, as a NEW action linked to it. Per changed value: if it still holds what the action wrote, the old value is restored; if it already holds the old value, nothing to do; if it was changed again since (by someone, or by a channel), it's a conflict and it's left as is. Quantities are reversed as a delta, so sales in between are respected (never oversold). Restored products are re-sent to their channels. Send "dry_run": true first to preview. Irreversible actions (delist, shipment notice, disconnect) answer not_reversible with what can be done instead. Requires the scope of the original action.
Required scope: the one that made the change: products:write (products, imports), inventory:write (stock, prices, variants), channels:write (channel settings).
Authorization
apiKey Authorization: Bearer nbl_live_... (or nbl_test_... for test mode). Test-mode writes are validated and simulated but never persisted and never touch channels; simulated results are marked simulated.
In: header
Path Parameters
Header Parameters
Unique client-generated key (max 255 chars), stored 24h.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/actions/act_66f0a1/undo" \ -H "Content-Type: application/json" \ -d '{}'{ "object": "undo", "status": "undone", "outcome": "undone", "action_id": "string", "undo_of": "string", "items": [ { "product_id": "string", "channel_account_id": "string", "restored": [ "string" ], "unchanged": [ "string" ], "conflicts": [ { "path": "string", "reason": "changed_since", "current": null } ] } ]}Last updated on October 18, 2026
Need help?
Email us and a human replies, usually within one business day.