Manual holds let you place temporary restrictions on specific amounts in an account, reducing the available balance while keeping the current balance unchanged. This guide covers how to create, manage, and release manual holds through the Treasury Prime API.Documentation Index
Fetch the complete documentation index at: https://docs.treasuryprime.com/llms.txt
Use this file to discover all available pages before exploring further.
What are manual holds?
Manual holds temporarily reserve a specific amount of funds in an account, preventing those funds from being used for payments, transfers, or withdrawals. The account’s current balance remains unchanged, but the available balance decreases by the hold amount. Unlike automatic holds created by the system during payment processing (such as card authorizations or pending ACH transfers), manual holds are explicitly created and managed through the API. You control when to create them, how long they last, and when to release them. Manual holds are particularly useful when you need to prevent funds from being accessed while investigating potential fraud, resolving disputes, meeting compliance requirements, or verifying account holder information. They provide a middle ground between allowing full account access and completely locking an account. Treasury Prime supports manual holds on both Treasury Prime ledger accounts and select partner bank core systems. The feature operates similarly across both platforms, with some differences in maximum expiration periods and processing logic.Key benefits
- Fraud prevention without account disruption: Place holds on suspicious amounts while allowing legitimate transactions to continue, avoiding the need to completely lock an account.
- Flexible dispute resolution: Reserve disputed transaction amounts during investigation without permanently removing funds, maintaining customer trust while protecting your program.
- Compliance control: Meet regulatory requirements by temporarily restricting access to specific amounts during anti-money laundering (AML) reviews, sanctions screening, or other compliance processes.
- Temporary fund restrictions: Hold funds pending document verification, identity confirmation, or other operational requirements without the permanence of a withdrawal.
- Automatic expiration: Holds automatically release after a specified timeframe, reducing manual overhead and ensuring funds are not held indefinitely.
How manual holds work
Creating a manual hold involves calling thePOST /hold endpoint with the account ID and hold amount. Treasury Prime immediately reserves the specified amount from the account’s available balance and creates a hold transaction in the transaction history.
The hold remains active until you explicitly release it via the PATCH /hold/{id} endpoint, or until it reaches its expiration timestamp. During this time, the account holder cannot access the held funds for payments, transfers, or withdrawals.
When you create a hold, you specify an optional expiration timestamp. If you don’t provide one, Treasury Prime automatically sets the expiration to the maximum allowed period based on the account type. For Treasury Prime ledger accounts, this is 10 days from creation. For partner bank core accounts, this is the next processing day at 11:00 PM Pacific Time.
Treasury Prime runs an automated job every 5 minutes to check for expired holds. When a hold expires, the system automatically releases it, restores the funds to the available balance, and triggers a hold_expiration.create webhook event.
Creating a hold
When you create a manual hold:- Treasury Prime validates the request: The system checks that the account is open, not locked, and has sufficient available balance to cover the hold amount.
- Treasury Prime creates the hold transaction: A hold transaction appears in the account’s transaction history with a negative amount, reducing the available balance. The current balance remains unchanged.
-
Hold record is stored: Treasury Prime creates a manual hold object with status
active, storing the hold amount, description, expiration timestamp, and associated transaction ID. -
Webhook event fires: Treasury Prime sends a
manual_hold.createwebhook event to your configured webhook endpoints.
Example request to create a manual hold
Example response
Releasing a hold
When you release a manual hold:-
Treasury Prime validates the hold status: The system checks that the hold is in
activestatus and has not already been released or expired. - Release transaction is created: A hold release transaction appears in the transaction history with a positive amount, restoring the funds to the available balance.
-
Hold status updates: The hold object’s status changes from
activetoreleased, and Treasury Prime records the release transaction ID. -
Webhook event fires: Treasury Prime sends a
manual_hold.updatewebhook event to your configured webhook endpoints.
Example request to release a manual hold
Example response
Manual hold vs. account lock
Manual holds and account locks serve different purposes and have different scopes of impact:| Feature | Manual Hold | Account Lock |
|---|---|---|
| Purpose | Reserve specific amount of funds | Block all account activity |
| Scope | Affects available balance only | Blocks payments, cards, transfers |
| Flexibility | Can hold any amount up to available balance | All-or-nothing restriction |
| Duration | Temporary (max 10 days for ledger accounts) | Can be indefinite |
| Use case | Fraud investigation on specific transactions, disputes | Severe fraud, compliance issues, account closure |
| Impact | Account holder can still use remaining available balance | Account holder cannot perform any transactions |
Key considerations
Account and balance requirements
- Account must be open and unlocked: You can only create manual holds on accounts that are open and not locked. Attempting to create a hold on a closed or locked account returns an error.
- Sufficient available balance required: The hold amount cannot exceed the account’s available balance. Treasury Prime validates this before creating the hold and returns an error if insufficient funds are available.
- Balance impact: Manual holds reduce the available balance but do not change the current balance. The account holder sees the hold amount as unavailable for use.
- Pending network transfers block hold creation: If an account has a pending incoming network transfer, you cannot create a hold until the transfer completes. This prevents holds from interfering with expected incoming funds.
Hold lifecycle and expiration
-
Expiration timestamps must be in the future: The
expires_atvalue must be greater than the current timestamp. Treasury Prime rejects holds with expiration dates in the past. - Maximum expiration periods vary by account type: Treasury Prime ledger accounts support holds up to 10 days. Partner bank core accounts support holds until the next processing day at 11:00 PM Pacific Time, based on the bank’s processing calendar.
-
Automatic expiration runs every 5 minutes: Treasury Prime checks for expired holds every 5 minutes and automatically releases them. This means a hold may remain active for up to 5 minutes past its expiration timestamp, triggering a
hold_expiration.createwebhook event. - Holds cannot be modified after creation: You cannot change the hold amount or extend the expiration time. Release the existing hold and create a new one if you need to adjust these values.
-
Released or expired holds cannot be reactivated: Once a hold reaches
releasedorexpiredstatus, it cannot return toactivestatus. Create a new hold if needed.
Hold statuses and transactions
-
Hold statuses: Manual holds have five possible statuses:
active(currently in effect),released(manually released),expired(automatically expired),pending(creation in progress), anderror(creation failed). -
Transaction history: Manual holds create two types of transactions in the account history: a hold transaction (negative amount) when created, and a hold release transaction (positive amount) when released. Both transactions use the hold ID as their
trace_id, making it easy to find all transactions related to a specific hold. -
Release descriptions: You can provide a
hold_release_descriptionwhen creating the hold, and update it later before releasing. This description appears on the release transaction.
Webhook events
- Webhook events: Manual holds trigger three webhook events:
manual_hold.createwhen created,manual_hold.updatewhen released or updated, andhold_expiration.createwhen expired. Subscribe to these events to receive real-time notifications about hold lifecycle changes.
For detailed API endpoint documentation, parameter specifications, and response schemas, see the Manual Hold API Reference.