curl https://api.liddie.io/api/v1/payments/6a0000000000000000000001 \
-H "Authorization: Bearer lid_live_..."
const res = await fetch('https://api.liddie.io/api/v1/payments/6a0000000000000000000001', {
headers: { 'Authorization': 'Bearer lid_live_...' }
});
const payment = await res.json();
{
"_id": "<string>",
"status": "<string>",
"currency": "<string>",
"createdAt": {},
"updatedAt": {},
"expiresAt": {},
"quoteExpiresAt": {},
"amount": 123,
"amountPaid": 123,
"fiatAmount": 123,
"fiatCurrency": "<string>",
"exchangeRate": 123,
"basis": "<string>",
"feeAmount": 123,
"quotedFeeAmount": 123,
"commissionAmount": 123,
"sweepCostCrypto": 123,
"netAmount": 123,
"quotedNetAmount": 123,
"settledFeeAmount": 123,
"settledNetAmount": 123,
"settledStampIncomplete": true,
"grossFiat": 123,
"commissionFiat": 123,
"networkFeeFiat": 123,
"feeFiat": 123,
"netFiat": 123,
"feeBearer": "<string>",
"publicKey": "<string>",
"merchantSettlementAddress": "<string>",
"txIds": [
{}
],
"confirmations": 123,
"crossChainAutoAcceptAt": {},
"repeatDepositChildIds": [
{}
],
"source": "<string>",
"idempotencyKey": "<string>",
"shortSlug": "<string>",
"invoiceUrl": "<string>",
"aml": {
"status": "<string>",
"riskScore": 123,
"checkedAt": {}
},
"metadata": {},
"merchantOrderId": "<string>",
"customerId": "<string>",
"extraId": "<string>"
}Payments
Get a payment
Fetch a single Liddie payment by id — full fee breakdown in crypto and fiat, deposit transaction data, cross-chain details, and your passthrough fields.
GET
/
api
/
v1
/
payments
/
{paymentId}
curl https://api.liddie.io/api/v1/payments/6a0000000000000000000001 \
-H "Authorization: Bearer lid_live_..."
const res = await fetch('https://api.liddie.io/api/v1/payments/6a0000000000000000000001', {
headers: { 'Authorization': 'Bearer lid_live_...' }
});
const payment = await res.json();
{
"_id": "<string>",
"status": "<string>",
"currency": "<string>",
"createdAt": {},
"updatedAt": {},
"expiresAt": {},
"quoteExpiresAt": {},
"amount": 123,
"amountPaid": 123,
"fiatAmount": 123,
"fiatCurrency": "<string>",
"exchangeRate": 123,
"basis": "<string>",
"feeAmount": 123,
"quotedFeeAmount": 123,
"commissionAmount": 123,
"sweepCostCrypto": 123,
"netAmount": 123,
"quotedNetAmount": 123,
"settledFeeAmount": 123,
"settledNetAmount": 123,
"settledStampIncomplete": true,
"grossFiat": 123,
"commissionFiat": 123,
"networkFeeFiat": 123,
"feeFiat": 123,
"netFiat": 123,
"feeBearer": "<string>",
"publicKey": "<string>",
"merchantSettlementAddress": "<string>",
"txIds": [
{}
],
"confirmations": 123,
"crossChainAutoAcceptAt": {},
"repeatDepositChildIds": [
{}
],
"source": "<string>",
"idempotencyKey": "<string>",
"shortSlug": "<string>",
"invoiceUrl": "<string>",
"aml": {
"status": "<string>",
"riskScore": 123,
"checkedAt": {}
},
"metadata": {},
"merchantOrderId": "<string>",
"customerId": "<string>",
"extraId": "<string>"
}Fetch a single payment by id, with the complete fee breakdown in crypto and fiat, deposit transaction data, and your passthrough fields.
curl https://api.liddie.io/api/v1/payments/6a0000000000000000000001 \
-H "Authorization: Bearer lid_live_..."
const res = await fetch('https://api.liddie.io/api/v1/payments/6a0000000000000000000001', {
headers: { 'Authorization': 'Bearer lid_live_...' }
});
const payment = await res.json();
Calling this on a timer to watch for status changes? Use webhooks/IPN instead — transitions are pushed to your server the moment they happen.
Authorization
- API-key scope:
payments:read· JWT team permission:payments:view
string
required
24-hex id from create/list. Malformed → 400; foreign/unknown → 404.
Response fields
string
Payment identity (24-hex id).
string
Lifecycle status — see the Payments overview.
string
Ticker the payer pays in.
string (ISO date)
Creation instant.
string (ISO date)
Last update instant.
string (ISO date)
Invoice expiry instant.
string (ISO date)
Crypto-quote validity deadline.
number
Crypto payable amount (crypto units).
number
What actually arrived (crypto units).
number
Your original fiat price.
string
Your display currency (USD by default).
number
The quote rate used.
Fee breakdown
Fees are reported on one of two bases, surfaced in the
basis field ("quoted" or "settled"). Before settlement (and for chains that don’t re-run the fee) everything is on the quoted basis. Once the sweep stamps settled money, feeAmount/netAmount switch to the settled (re-run) values, the original quote moves to quotedFeeAmount/quotedNetAmount, and the optional settledFeeAmount/settledNetAmount/settledStampIncomplete fields appear. The commissionAmount + sweepCostCrypto split sums to the quote fee only — after a fee re-run it does not sum to the served feeAmount, and commissionFiat/networkFeeFiat are omitted entirely. Reconcile on feeAmount/netAmount with basis, not on the split.string
"quoted" or "settled" — which basis feeAmount/netAmount are reported on. Present on every payment (and on list rows).number
Total fee in crypto (commission + network-fee provision). On the
settled basis this is the re-run fee, not the quote.number
The original quoted total fee in crypto — present once the fee has been re-run at settlement, so you can still see the quote alongside the settled
feeAmount.number
Platform commission portion, in crypto. Belongs to the quote basis:
commissionAmount + sweepCostCrypto sums to quotedFeeAmount, not to a re-run feeAmount.number
Network-fee provision portion, in crypto. Quote-basis (see
commissionAmount).number
What you are credited, in crypto. On the
settled basis this is the settled net; the quote is in quotedNetAmount.number
The original quoted net in crypto — present once settled values are stamped.
number
Optional. The settled (re-run) total fee in crypto, when stamped.
number
Optional. The settled net in crypto, when stamped.
boolean
Optional.
true while settled money has been stamped only partially — treat settled figures as not yet final.number
Fiat gross. With
feeBearer:"customer", grossFiat = price + fee (the payer covers it) and netFiat = your full price.number
Commission in fiat. Quote-basis, and omitted once the fee is re-run at settlement.
number
Network-fee provision in fiat. Quote-basis, and omitted once the fee is re-run at settlement.
number
Fee in fiat.
number
Net in fiat.
string
"customer" or "merchant" — who absorbs the fee (a store setting).Deposit & settlement
string
The deposit address.
addressRole is "primary" (or "repeat" for repeat-deposit children).string
Where your funds settle.
array
Deposit transaction hashes.
number
Current confirmation count.
string (ISO date)
If a wrong-currency deposit is pending auto-accept: the deadline instant. See Accept a cross-chain deposit.
array
Child payment ids created by repeat deposits to this address.
Your data & metadata
string
"api" (created with an API key) or "platform" (dashboard).string
Echoed if you sent one.
string
Public invoice id.
string
Hosted checkout path, not a full URL — prepend the checkout host:
https://dash.liddie.io + invoiceUrl.object
any JSON
Your passthrough data.
string
Your passthrough data.
string
Your passthrough data.
string
Your passthrough data.
Never returned: private keys, derivation indexes, wallet internals.
Errors
| Status | Body | Why |
|---|---|---|
| 400 | {"error":"Invalid ID format"} | malformed id |
| 404 | {"error":"Payment not found"} | unknown or foreign id |
See also
- Payments overview: what each
statusvalue means and how the dashboard groups them. - Webhooks & IPN: push-based status updates so you don’t have to poll this endpoint.
- Accept a cross-chain deposit: what to call when
crossChainAutoAcceptAtis set.