Release Hold

Use the /releaseHold endpoint to release a hold placed with Create Hold, which returns the held amount to the account's available balance. To keep the hold but change when it ends, pass a new expiresAt instead.

  • You can only release holds created through the Spidr API. Card authorization holds (pending card purchases) can't be released here.
  • You can release a hold even after the account is closed.
  • If the hold has already expired, the request still succeeds and returns released: true.
  • Include accountId if you never got a result from Create Hold.

We send a transaction.releaseHold webhook when the release or new end time takes effect. A release that ends the hold is also followed by transaction.holdExpired.

Errors you may need to handle:

  • HOLD_BUSY (409): another change to this hold is still in progress. Check List Holds, then try again.
  • HOLD_OUTCOME_UNKNOWN: we couldn't confirm the result yet. Check List Holds, then retry Release Hold if the hold is still active. Never send Create Hold again to fix this.

Hold requests don't need a ZTM session or approval.

Body Params

POST /v1/transaction/releaseHold Request body

string

The account the hold is on. Required if you never got a result from Create Hold, or if the hold ID alone doesn't identify the hold.

string
required
^(?:[0-9]+|spidr_[a-f0-9]{24})$

The hold's ID, as returned by Create Hold or List Holds. Treat it as a string; its format can vary by program.

date-time
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(([+-]\d{2}:\d{2})|Z)$

Optional. A new end time for the hold (ISO 8601, at least 60 seconds in the future). Leave it out to release the hold now.

Responses

Language
Credentials
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json