Added

Holds API added to Ledger Solutions

Release Date

Mar 3, 2026

Products Affected

Ledger and Financial Accounts

Impact

Added new Holds API

Audience

Customers using Ledger and Money Movement

Action Required

None, this change is additive only

Overview

Lithic has added a new Holds API to our Ledger Solutions offering. Holds can be used to reserve funds which will be used for a specific purpose, before that use actually happens. Holds are considered a new family of transaction.

Details

Holds reduce available_balance and increasing pending_balance without affecting the total. Holds can be resolved in three ways:

  • Settlement — linked to a payment (wire, ACH, or book transfer)
  • Manual void — explicitly voided via API
  • Expiration — automatically expired after the expiration_datetime

Status Lifecycle

PENDING ──► SETTLED   (via HOLD_SETTLED — linked to payment)
        ──► VOIDED    (via HOLD_VOIDED — manually voided)
        └──► EXPIRED   (via HOLD_EXPIRED — expiration_datetime passed)
StatusDescriptionpending_amountCan Void?
PENDINGHold is active and reserving fundsHold amount✅ Yes
SETTLEDHold was consumed by a payment0❌ No
VOIDEDHold was manually cancelled0❌ No
EXPIREDHold automatically expired0❌ No

API Endpoints


MethodDescriptionEndpoint
POSTCreate a hold/financial_accounts/{financial_account_token}/holds
POSTVoid an active hold/holds/{token}/void
GETGet a single hold/holds/{token}
GETList holds for an account/financial_accounts/{financial_account_token}/holds


Request & Response Examples

Create a Hold

Request: POST /v1/financial_accounts/{financial_account_token}/holds

{
  "amount": 1000,
  "memo": "Reserve for upcoming payment",
  "user_defined_id": "my-hold-123",
  "expiration_datetime": "2026-03-09T12:00:00Z"
}
FieldTypeRequiredNotes
amountinteger✅ YesAmount in cents
memostringNoOptional description
user_defined_idstringNoUser-supplied identifier
expiration_datetimeISO 8601 datetimeNoMust be ≥ 2 hours in the future

Response (200 OK):

{
  "token": "550e8400-e29b-41d4-a716-446655440000",
  "family": "HOLD",
  "status": "PENDING",
  "result": "APPROVED",
  "financial_account_token": "fa-uuid-here",
  "pending_amount": 1000,
  "currency": "USD",
  "user_defined_id": "my-hold-123",
  "expiration_datetime": "2026-03-09T12:00:00Z",
  "created": "2026-03-02T10:00:00Z",
  "updated": "2026-03-02T10:00:00Z",
  "events": [
    {
      "token": "event-uuid",
      "type": "HOLD_INITIATED",
      "result": "APPROVED",
      "detailed_results": ["APPROVED"],
      "amount": 1000,
      "created": "2026-03-02T10:00:00Z",
      "memo": "Reserve for upcoming payment",
      "settling_transaction_token": null
    }
  ]
}

Insufficient balance: If the account lacks sufficient funds, the hold is still created but returned with "result": "DECLINED" and "pending_amount": 0.


Void a Hold

Request: POST /v1/holds/{token}/void

{
  "memo": "Canceling hold"
}

Response (200 OK): Returns the hold object with "status": "VOIDED" and "pending_amount": 0, plus a HOLD_VOIDED event appended to the events array.



Event Types

Event TypeDescriptionWhen It Occurs
HOLD_INITIATEDHold was createdOn successful hold creation
HOLD_VOIDEDHold was manually cancelledWhen void API is called
HOLD_EXPIREDHold automatically expiredWhen expiration_datetime passes (via cron job)
HOLD_SETTLEDHold was consumed by paymentWhen linked payment settles

Balance Impact

StateAvailablePendingTotal
Before Hold$1000$0$1000
After $300 Hold$700$300$1000
After Resolution$1000$0$1000

Placing a hold reduces available balance and increases pending balance. The total balance is always unchanged. On void, settlement, or expiration, the pending amount is released back to available.


Payment Integration (Linked Holds)

Holds can be optionally linked to payments (book transfers, outbound wires, outbound ACH) using the hold_token parameter. This enables atomic fund reservation during payment processing.

Supported Payment Types

Payment TypeEndpointhold_token Support
Book Transfers/v1/book_transfers✅ Yes
Outbound Wires/v1/internal/wires/outbound✅ Yes
Outbound ACH/v1/internal/ach/transfers✅ Yes

Flow

  1. Create a hold → receive hold_token
  2. Create payment with "hold_token": "<hold_token>" in the request body
  3. System validates: hold exists, status is PENDING, not expired, amount is sufficient
  4. On payment success → hold transitions to SETTLED; settling_transaction_token is populated
  5. On payment failure → hold remains PENDING and can be reused or voided

Release Timeline

Available now: March 3, 2026.

User Impact

This change is additive only. Learn more about Ledger APIs via our API Reference

If you have any questions or concerns, please contact us via the HELP link in your Lithic Dashboard.


The Lithic changelog has an RSS feed! To monitor for new update announcements, subscribe with your preferred RSS reader.