Every payment is tracked in a ledger keyed by its lcPaymentId (lcpay_…). You store this one
id; we map it to the underlying processor objects so you never have to.
Statuses
A payment’s status reflects where it is in its life:
| Status | Meaning |
|---|---|
requires_payment_method | Created; awaiting a payment method. |
requires_confirmation | Method attached; awaiting confirmation. |
requires_action | Extra authentication needed (e.g. 3-D Secure). |
processing | In progress — typically ACH, awaiting settlement. |
requires_capture | Authorized (manual capture); awaiting capture. |
succeeded | Completed — money captured. Safe to fulfill. |
canceled | Canceled before completion. |
failed | The payment attempt failed. |
refunded | Fully refunded. |
partially_refunded | Part of the amount was refunded. |
disputed | A chargeback was opened. |
dispute_won / dispute_lost | The dispute was resolved. |
Typical flows
- Card, online:
requires_payment_method→succeeded - Card, manual capture:
requires_payment_method→requires_capture→succeeded - ACH:
requires_payment_method→processing→succeeded - Refund:
succeeded→partially_refunded/refunded
Tip
Treat succeeded as the only signal to fulfill. Everything else is either in progress or
terminal-but-unpaid.
Reading status
Look up any payment by its id at any time:
curl https://payments.leffelconsulting.com/v1/payments/lcpay_9f2c... \
-H "X-Api-Key: lc_live_XXXXXXXXXXXXXXXXXXXX"
Combine this with webhooks: react to callbacks in real time, and use
GET /v1/payments/{id} as the authoritative source when you need to check on demand.