Fire a row-addressed reversal against a decided simulated spend
/v1/simulated-spends/{id}/reversalRequires an API client bearer token.
Fires one FULL 0400 reversal against the named simulated spend, which must be `decided` with an `approved` decision. The reversal is recorded as a NEW child simulation (`parent_simulation_id` names the original) — the original row is never mutated; poll `GET /v1/simulated-spends/{id}` with the returned `simulation_id` (the CHILD, not the path id) to see it reach a decision. Requires an Idempotency-Key header: a retry with the SAME key replays the same child result rather than firing a second reversal. Works regardless of the card’s current state (releasing a hold is always safe) — unlike the increment route, this one has no active-card gate. A reversal/increment CHILD cannot itself be reversed (it carries no reversible wire identity of its own); reverse the ORIGINAL instead.
Parameters
Path parameters
| Name | Required | Description |
|---|---|---|
| id | required |
Header parameters
| Name | Required | Description |
|---|---|---|
| Idempotency-Key | required | Client-chosen. An identical retry with the same key returns the stored response; reusing the key with a different payload returns 409. |
Example
curl -X POST https://api.rigid.fi/v1/simulated-spends/{id}/reversal \
-H "Authorization: Bearer $RIGID_API_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"Responses
202The reversal was accepted for transmission.
400Validation error
401Authentication required
403Live mode — row-addressed reversal fires are a test-mode-only surface
404Simulation not found
409The original is not a `decided`, `approved` spend; has no recorded network transaction id (a pre-RIGID-517 row); has no recorded wire identity (a pre-Task-8 row — re-fire the original); IS ITSELF a reversal/increment child (child rows carry no reversible wire identity — reverse the original instead); or the Idempotency-Key was reused with a different payload
500Internal server error