External Payments
Record payment activity that settled outside of Lithic's money-movement rails against a financial account
The External Payments API lets you record payment activity that happened outside of Lithic's own money-movement rails directly against a Financial Account. It acts as a ledger-recording mechanism: you tell Lithic that an amount moved in or out of a financial account through an external channel, and Lithic reflects that as a transaction with its own status, balance impact, and event history.
Use it to keep a financial account's balance in sync with money that moved on rails Lithic did not originate — for example a wire your bank processed directly, an ACH handled by another provider, or a paper check — and to backfill historical activity that is already resolved on the external side.
External payments record money that moved elsewhere; they do not originate a payment. To move money on Lithic's rails, use Payments (ACH) or Book Transfers (internal).
Core concepts
Category
The category identifies the external rail the funds moved on:
| Category | Rail |
|---|---|
EXTERNAL_WIRE | Wire transfer |
EXTERNAL_ACH | ACH |
EXTERNAL_CHECK | Check |
EXTERNAL_FEDNOW | FedNow |
EXTERNAL_RTP | Real-Time Payments (RTP) |
EXTERNAL_TRANSFER | Generic external transfer |
Payment type
The payment_type sets the direction of funds relative to the financial account:
| Payment type | Effect |
|---|---|
DEPOSIT | Funds moved into the financial account |
WITHDRAWAL | Funds moved out of the financial account |
Status
An external payment carries a transaction status:
| Status | Meaning |
|---|---|
PENDING | Recorded but not yet settled |
SETTLED | The external movement has finalized |
DECLINED | The payment was declined |
REVERSED | A settled payment was unwound |
CANCELED | A pending payment was canceled |
RETURNED | The payment was returned |
Events
Every state transition appends an event to the external payment's events array. Each event has its own type, result, amount, memo, and effective_date. Event types are named per category and per action, following the pattern {CATEGORY}_{ACTION}, where the action is one of INITIATED, SETTLED, RELEASED, CANCELED, or REVERSED — for example EXTERNAL_WIRE_INITIATED, EXTERNAL_ACH_SETTLED, or EXTERNAL_RTP_REVERSED.
For a detailed walkthrough of the status lifecycle, including how each event affects pending and available balances, see ACH Payments Lifecycle.
Lifecycle
A newly created external payment records against the financial account and begins its lifecycle. From there you drive it toward a terminal state with the action endpoints:
- Settle confirms the external movement cleared on the bank's side and moves the payment to
SETTLED. - Release releases held funds so they become available balance — analogous to an ACH hold period ending and funds moving from pending to available.
- Cancel cancels a payment that has not settled yet — for example one booked in error, or where the external movement never actually happened — and moves it to
CANCELED. - Reverse unwinds a payment that had already settled — for example a wire that was recalled — and moves it to
REVERSED.
For programs with a meaningful hold period, settle and release are distinct steps: settle confirms the movement cleared, and release governs pending-to-available balance timing. Programs without a hold period can collapse the two using progress_to (see below).
Advancing state
Normally an external payment moves through its lifecycle one step at a time: you create it, then call settle, then call release — each a separate API request. This mirrors how the money actually progresses on the external side.
Sometimes, though, you already know the payment is further along. When you record activity that has already cleared, or backfill historical payments that are fully resolved, replaying every intermediate step is unnecessary.
For those cases, the create and settle requests accept an optional progress_to parameter set to SETTLED or RELEASED. It tells Lithic to advance the payment straight to that state in a single call, generating the intermediate events along the way. For example, a create with progress_to: SETTLED books the payment and settles it at once, and a settle with progress_to: RELEASED settles and releases the funds together.
Endpoints
Create an external payment
POST https://api.lithic.com/v1/external_paymentsBooks a new external payment record against a financial account. See Create external payment for the full schema.
| Parameter | Type | Required | Notes |
|---|---|---|---|
category | enum | Yes | The external rail — see Category |
payment_type | enum | Yes | DEPOSIT or WITHDRAWAL |
financial_account_token | UUID | Yes | The financial account the payment is booked against |
amount | integer | Yes | Amount in the currency's smallest unit (e.g., cents for USD) |
effective_date | date | Yes | The date the external movement is effective |
memo | string | No | Free-text description |
user_defined_id | string | No | Your own reference identifier |
token | UUID | No | Client-provided idempotency token; becomes the transaction token |
progress_to | enum | No | SETTLED or RELEASED — create the payment already in a further state |
Get an external payment
GET https://api.lithic.com/v1/external_payments/{external_payment_token}Fetch a single external payment by token, including its full events history. See Get external payment.
List external payments
GET https://api.lithic.com/v1/external_paymentsList and filter external payments. See List external payments. Supported query parameters:
| Parameter | Notes |
|---|---|
category | Filter by external payment category |
financial_account_token | Filter to a specific financial account |
business_account_token | Filter to a business account rollup |
result | Filter by result — APPROVED or DECLINED |
status | Filter by transaction status |
begin, end, page_size, starting_after, ending_before | Standard time-range and cursor pagination |
Settle, release, cancel, and reverse
Each action endpoint takes an effective_date (required) and an optional memo. The settle endpoint additionally accepts progress_to.
POST https://api.lithic.com/v1/external_payments/{external_payment_token}/settlePOST https://api.lithic.com/v1/external_payments/{external_payment_token}/releasePOST https://api.lithic.com/v1/external_payments/{external_payment_token}/cancelPOST https://api.lithic.com/v1/external_payments/{external_payment_token}/reverse
effective_datedrives ledger and statement date logic, so it should reflect when the action is effective from an accounting standpoint — not necessarily today's date if you are backfilling historical records.
Response
An external payment response includes the transaction status, token, created, and updated timestamps, along with:
| Property | Type | Notes |
|---|---|---|
category | enum | The external rail |
payment_type | enum | DEPOSIT or WITHDRAWAL |
result | enum | APPROVED or DECLINED |
settled_amount | integer | Settled amount in the currency's smallest unit |
pending_amount | integer | Pending amount in the currency's smallest unit |
currency | string | Settling currency of the payment |
financial_account_token | UUID | The financial account the payment is booked against |
user_defined_id | string | Your reference identifier, if provided |
events | array | The payment's event history |
family | string | Always EXTERNAL_PAYMENT |
Idempotency
The optional token parameter on create lets you supply your own UUID, which becomes the transaction token. Passing the same token on a retried create call lets you safely retry without risking a duplicate booking.
Webhooks
Subscribe to these event types in the Events API to be notified of external payment activity:
external_payment.created: an external payment was recordedexternal_payment.updated: an external payment was updated — for example settled, released, canceled, reversed, or returned
