Stablecoin Payments Lifecycle
Learn about the stablecoin payment event lifecycle you can expect to see on the Lithic platform.
This page documents the lifecycle of a stablecoin payment and the events you can expect to see on it. Most stablecoin activity is pay-ins — deposits sent on-chain to one of a Financial Account's blockchain addresses. Funds can also be withdrawn back out on-chain to a registered external wallet, which has its own lifecycle documented below. For an overview of how stablecoin funding fits into a card program, see Stablecoin at Lithic.
Stablecoin payments appear as payment transactions with category set to STABLECOIN, retrievable through the same endpoints and webhooks as ACH and wire payments. As with those rails, the type, result, and detailed_results parameters within the event object are the most useful in understanding what has happened to a given payment.
Possible enum values for event.type:
STABLECOIN_RECEIVED: Event indicates that Lithic has observed a confirmed on-chain deposit to one of the Financial Account's blockchain addresses, and the funds are pending release to the available balance (pay-ins only)STABLECOIN_INITIATED: Event indicates that a withdrawal was initiated and the funds have been placed on hold (withdrawals only)STABLECOIN_REVIEWED: Event indicates that the payment has completed review. This step completes automatically today and requires no action from youSTABLECOIN_SENT: Event indicates that the withdrawal has been accepted for on-chain submission to the destination address and is pending confirmation (withdrawals only)STABLECOIN_SETTLED: For a pay-in, event indicates that the funds have been released to the available balance of the Financial Account and are spendable. For a withdrawal, event indicates that the transfer has been confirmed on-chain. This is the terminal event in both casesSTABLECOIN_REJECTED: Event indicates that the withdrawal failed and the hold placed at initiation has been reversed, returning the funds to the Financial Account (withdrawals only)
Possible enum values for event.result:
APPROVED: The event occurred with a successful outcomeDECLINED: The event occurred with an unsuccessful outcome
Possible enum values for detailed_results:
APPROVED: No further detail; the event occurred as expectedFUNDS_INSUFFICIENT: Indicates that the Financial Account did not have sufficient available balance to cover a withdrawalACCOUNT_INVALID: Indicates that the destination wallet for a withdrawal was not in a valid, transactable state — for example, its verification had not completed, or it had failed verification
detailed_results is shared across all payment categories, so the schema lists values that belong to other rails (for example, the ACH transaction limit results).
The on-chain transaction hash
Once a stablecoin transfer exists on the blockchain, the external_id parameter on the event carries its on-chain transaction hash — the stablecoin equivalent of an ACH trace number or a wire IMAD. Use it to look the transfer up on a block explorer, or to reconcile a Lithic payment against your own or your customer's view of the chain.
The hash is carried on the events that reflect on-chain activity; events that record internal lifecycle steps have a null external_id. On a pay-in, the hash is on the STABLECOIN_RECEIVED event. On a withdrawal, external_id is null at STABLECOIN_INITIATED, STABLECOIN_REVIEWED, and STABLECOIN_SENT — the sent event marks the withdrawal being accepted for submission, before the transaction reaches the blockchain. Expect the hash on the terminal event, provided the transfer was broadcast: a withdrawal that fails before reaching the chain has no hash, so its STABLECOIN_REJECTED event's external_id is null.
On-chain payments are final in both directions. There is no stablecoin equivalent of an ACH return: a settled pay-in cannot be reversed, and a settled withdrawal cannot be recalled. Funds are moved back the other way as a separate payment.
Stablecoin Pay-Ins
event.type sequence:

A pay-in has already settled on the blockchain before Lithic observes it, so there is only one permutation — there is no declined, rejected, or returned pay-in sequence.
All three events are typically emitted within seconds of each other, because there is no hold period and the review step is automatic. Do not depend on observing the payment in an intermediate state — a webhook for STABLECOIN_RECEIVED may reach you after the payment has already reached STABLECOIN_SETTLED. Treat the presence of a STABLECOIN_SETTLED event, rather than the order in which webhooks arrive, as the signal that funds are spendable.
Sequence 1: Successful pay-in ("Happy Path")
A successful stablecoin pay-in contains three events at the end of its lifecycle: received, reviewed, and settled. The funds are credited to the available balance of the Financial Account at the settled event.
The example below shows the parameters most relevant to the lifecycle:
{
"category": "STABLECOIN",
"status": "SETTLED",
"result": "APPROVED",
"token": "6d5a2718-9b79-4473-aa1e-6bbf7433ea6f",
"financial_account_token": "6127238d-cb85-50bc-86aa-264654a11be9",
"settled_amount": 10000,
"pending_amount": 0,
"currency": "USD",
"events": [
{
"amount": 10000,
"type": "STABLECOIN_RECEIVED",
"result": "APPROVED",
"detailed_results": ["APPROVED"],
"created": "2026-05-05T18:16:09Z",
"token": "34c5b9d2-2d6a-540b-90fe-fa202b418242",
"external_id": "0x7351585460bd657f320b9afa02a52c26d89272d0d10cc29913eb8b28e64fd906"
},
{
"amount": 10000,
"type": "STABLECOIN_REVIEWED",
"result": "APPROVED",
"detailed_results": ["APPROVED"],
"created": "2026-05-05T18:16:11Z",
"token": "5f6255f8-4016-5e66-aedf-2e3c76027e04",
"external_id": null
},
{
"amount": 10000,
"type": "STABLECOIN_SETTLED",
"result": "APPROVED",
"detailed_results": ["APPROVED"],
"created": "2026-05-05T18:16:11Z",
"token": "7eec03f2-2fac-4485-bc4b-0526d8bff3ba",
"external_id": null
}
],
"created": "2026-05-05T18:16:09Z",
"updated": "2026-05-05T18:16:11Z"
}Amounts are reported in cents of US dollars, at par with the stablecoin amount received. A deposit of 100 USDC produces a settled_amount of 10000.
Stablecoin Pay-In Balance Impacts
The below table shows if/how balances are impacted per transaction event for stablecoin pay-ins to prepaid accounts.
event.type | Pending Balance | Available Balance |
|---|---|---|
STABLECOIN_RECEIVED | None | None |
STABLECOIN_REVIEWED | None | None |
STABLECOIN_SETTLED | None | Increased |
Unlike an ACH debit origination, a stablecoin pay-in never occupies the pending balance: the deposit has already settled on-chain, so there is nothing to hold and the credit goes straight to the available balance once the payment reaches STABLECOIN_SETTLED.
Stablecoin Withdrawals
A withdrawal sends stablecoin out of a Financial Account, on-chain, to an external wallet. The destination must already be registered with Lithic and have reached an ENABLED verification state — see Withdrawals.
Possible event.type sequences:

Funds are placed on hold at STABLECOIN_INITIATED and leave the account for good at STABLECOIN_SETTLED. Unlike a pay-in, a withdrawal is a transfer Lithic submits on your behalf, so there is a genuine window between STABLECOIN_SENT and the terminal event during which it is in flight and not yet final.
A withdrawal can also sit at STABLECOIN_REVIEWED for a period if submission is delayed — for example while Lithic retries a transient submission failure. The funds remain held, no action is needed from you, and the withdrawal proceeds to STABLECOIN_SENT once the submission succeeds.
Sequence 1: Successful withdrawal ("Happy Path")
A successful withdrawal contains four events at the end of its lifecycle: initiated, reviewed, sent, and settled. The funds move to the pending balance at initiation and clear out of pending at the settled event.
{
"category": "STABLECOIN",
"status": "SETTLED",
"result": "APPROVED",
"token": "b41a9e02-4c7d-4f8a-9c3b-2ad5e6f70189",
"financial_account_token": "6127238d-cb85-50bc-86aa-264654a11be9",
"settled_amount": 25000,
"pending_amount": 0,
"currency": "USD",
"events": [
{
"amount": 25000,
"type": "STABLECOIN_INITIATED",
"result": "APPROVED",
"detailed_results": ["APPROVED"],
"created": "2026-05-06T14:02:11Z",
"token": "1d9c4f60-8b2e-5a71-93cd-6f0e2b7a4519",
"external_id": null
},
{
"amount": 25000,
"type": "STABLECOIN_REVIEWED",
"result": "APPROVED",
"detailed_results": ["APPROVED"],
"created": "2026-05-06T14:02:13Z",
"token": "8a3b7e15-2c6d-5f49-b0e1-74d9c2a6f830",
"external_id": null
},
{
"amount": 25000,
"type": "STABLECOIN_SENT",
"result": "APPROVED",
"detailed_results": ["APPROVED"],
"created": "2026-05-06T14:02:19Z",
"token": "f47c1b93-5e0a-5d82-a6b4-31e8f7c05d26",
"external_id": null
},
{
"amount": 25000,
"type": "STABLECOIN_SETTLED",
"result": "APPROVED",
"detailed_results": ["APPROVED"],
"created": "2026-05-06T14:03:47Z",
"token": "6e2d8a04-9f31-5c76-8b5e-0a4c7d1b9e32",
"external_id": "0x3b9f2c81ad47e650f1c8b2d094a7e3f5c6082be914d7a3059fbc8e12d740a6b3"
}
],
"created": "2026-05-06T14:02:11Z",
"updated": "2026-05-06T14:03:47Z"
}Sequence 2: Unsuccessful withdrawal due to an issue with the destination or balance
A withdrawal can fail at the point of the API request, but it can also fail after the payment object is created. In this case there will be a single initiated event with a declined result — for example because the available balance no longer covers the withdrawal, or because the destination wallet is not in a transactable state. The declined initiated event causes the overall payment object result to be declined, indicating that no future events are expected for the payment.
{
"category": "STABLECOIN",
"status": "DECLINED",
"result": "DECLINED",
"token": "c85f3d17-6a29-4e0b-bd41-7f2c9e850a63",
"financial_account_token": "6127238d-cb85-50bc-86aa-264654a11be9",
"settled_amount": 0,
"pending_amount": 0,
"currency": "USD",
"events": [
{
"amount": 25000,
"type": "STABLECOIN_INITIATED",
"result": "DECLINED",
"detailed_results": ["ACCOUNT_INVALID"],
"created": "2026-05-06T14:02:11Z",
"token": "1d9c4f60-8b2e-5a71-93cd-6f0e2b7a4519",
"external_id": null
}
],
"created": "2026-05-06T14:02:11Z",
"updated": "2026-05-06T14:02:11Z"
}Sequence 3: Unsuccessful withdrawal because the transfer failed on-chain
A withdrawal that is submitted but then fails to complete on-chain will have four events: initiated, reviewed, sent, and rejected. The rejected event reverses the hold placed at initiation and returns the funds to the Financial Account. It causes the overall payment object result to be declined, indicating that no further events are expected for the payment.
{
"category": "STABLECOIN",
"status": "DECLINED",
"result": "DECLINED",
"token": "b41a9e02-4c7d-4f8a-9c3b-2ad5e6f70189",
"financial_account_token": "6127238d-cb85-50bc-86aa-264654a11be9",
"settled_amount": 0,
"pending_amount": 0,
"currency": "USD",
"events": [
{
"amount": 25000,
"type": "STABLECOIN_INITIATED",
"result": "APPROVED",
"detailed_results": ["APPROVED"],
"created": "2026-05-06T14:02:11Z",
"token": "1d9c4f60-8b2e-5a71-93cd-6f0e2b7a4519",
"external_id": null
},
{
"amount": 25000,
"type": "STABLECOIN_REVIEWED",
"result": "APPROVED",
"detailed_results": ["APPROVED"],
"created": "2026-05-06T14:02:13Z",
"token": "8a3b7e15-2c6d-5f49-b0e1-74d9c2a6f830",
"external_id": null
},
{
"amount": 25000,
"type": "STABLECOIN_SENT",
"result": "APPROVED",
"detailed_results": ["APPROVED"],
"created": "2026-05-06T14:02:19Z",
"token": "f47c1b93-5e0a-5d82-a6b4-31e8f7c05d26",
"external_id": null
},
{
"amount": 25000,
"type": "STABLECOIN_REJECTED",
"result": "DECLINED",
"detailed_results": ["APPROVED"],
"created": "2026-05-06T14:04:02Z",
"token": "2f8e6b31-7d05-5a94-9c62-e13b8f0a5d47",
"external_id": "0x3b9f2c81ad47e650f1c8b2d094a7e3f5c6082be914d7a3059fbc8e12d740a6b3"
}
],
"created": "2026-05-06T14:02:11Z",
"updated": "2026-05-06T14:04:02Z"
}Stablecoin Withdrawal Balance Impacts
The below table shows if/how balances are impacted per transaction event for withdrawals from prepaid accounts. The impacts are reversed for credit accounts.
event.type | Pending Balance | Available Balance |
|---|---|---|
STABLECOIN_INITIATED | Increased | Decreased |
STABLECOIN_REVIEWED | None | None |
STABLECOIN_SENT | None | None |
STABLECOIN_SETTLED | Decreased | None |
STABLECOIN_REJECTED | All postings rolled back | All postings rolled back |
This is the same shape as an ACH credit origination: the funds are reserved out of the available balance the moment the withdrawal is initiated, so a customer cannot spend them on a card while the transfer is in flight.
Reconciling a payment to the blockchain
A pay-in is attributed to a Financial Account by the deposit address it was sent to, and a withdrawal by the account it was initiated from, so financial_account_token always tells you whose money moved. To tie a payment to a specific on-chain transfer, use the external_id on the events, as described in The on-chain transaction hash.
The originating wallet address of a pay-in and the network a payment travelled over are not exposed on the payment object. If a customer reports a deposit they cannot see, reconcile on the amount, timestamp, and transaction hash, and contact your Lithic representative if the payment is missing.
Updated about 5 hours ago
