Skip to main content
A hold reserves an amount on one account. available drops at once and posted does not move. Holds need the holds:write scope.
A wallet with 500,000 then reads:

Ending a hold

Capture posts some or all of it. credits says where the value goes, and the debit leg on the held account is added for you. Leave amount out to capture everything still held.
After a partial capture the hold stays ACTIVE with captured: "40000", and the rest stays reserved. When all of it is captured, the status becomes CAPTURED. Release gives back what is still held, and the status becomes RELEASED. Expiry happens by itself once expiresAt passes: the status becomes EXPIRED and the money is back. A hold without expiresAt stays until you end it.

A hold behind a pending entry

For a payout whose final legs you already know, protect a pending entry with the hold, by giving holdId. The hold’s reservation covers the debit, so it is not counted twice.
From then on, the entry is in charge of the hold. Capturing or releasing such a hold directly gets HOLD_IN_USE, with the entry in details.entry_id. holdId needs "pending": true.