Reconciliation
Reconciliation answers two questions: what did this deposit consist of, and does what we collected match what we recorded? Flint's ledger is built for both. Every movement of your balance is a balance transaction carrying a gross amount, a fee, a net, and a link back to the object that caused it.
This guide covers matching at the money level. For what Flint charges to process a payment, see Processing Fees.
The Ledger Is the Source of Truth#
Order totals tell you what a buyer owed. Balance transactions tell you what actually reached your balance, which is the number that has to match your bank.
Each entry carries three signed amounts:
amount_money: the gross movement.fee_money: Flint's fee on it, negative because it reduces your balance. Zero on most movement types.net_money: the real effect on your balance.
Because fee_money is already signed, the three add rather than subtract:
net_money = amount_money + fee_money
5000 gross + (-175) fee = 4825 net
curl "https://api.withflintpay.com/v1/balance-transactions?created_after=2026-07-01T00:00:00Z&page_size=50" \
-H "Authorization: Bearer YOUR_API_KEY"
Summing net_money over a set of transactions gives you what those events did to your balance. Do not subtract fee_money afterward: net_money already accounts for it, and subtracting a negative would add the fee back rather than remove it.
order_id is present when the movement belongs to an order. related_object points back to the object that produced the entry for payment, refund, payout, and payout destination movements. Dispute movements carry no related_object today, so match those by order_id and created_at against the dispute itself.
What Each Movement Type Means#
type tells you what a row is. Filter on it rather than inferring from the sign, because more than one type can post negative.
paymentposts positive, withfee_moneycarrying the processing fee. Net is what the payment added to your balance.refundposts negative for the principal only. The original payment's processing fee is not returned, so a refunded payment leaves you down that fee. See Refunds.disputeposts negative for the disputed principal only, so itsfee_moneyis0. Any event fee is assessed through Flint billing instead of this ledger.dispute_reversalposts positive when you win. See Disputes.returnposts negative when a payment that already settled is pulled back afterward, such as an ACH return. Itsfee_moneyis0; any ACH return event fee appears in Flint billing.recoveryposts positive when a refund fails and the money comes back to you.payoutposts negative: money leaving your Flint balance for your bank.payout_failure,payout_cancellation, andpayout_reversalreturn the money when a deposit does not land.payout_holdandpayout_hold_releasemove funds into and out of a pending payout. They are internal to the payout lifecycle, not new money, so a period that contains a hold without its release will not tie out on its own.reserve_holdandreserve_releasemove funds into and out of a held reserve. Like payout holds, they change what is available without changing what you earned.payout_advanceandpayout_advance_fundingcover an advance of funds and the repayment that funds it. Most integrations never see them.merchant_billing_paymentposts negative when Flint collects what you owe Flint out of your balance.fee_moneyis zero, so net equals the gross.merchant_billing_payment_reversalposts positive when one of those collections comes back, and itsrelated_balance_transaction_idsnames the collection it reverses. See Flint Billing.adjustmentis the catch-all for a correction posted against your balance. Readdescriptionto see what it covers.
Corrections are always appended as new dated rows. Flint never rewrites a settled amount, so a row you already reconciled will not change under you.
Matching a Deposit#
A payout is the deposit. List payouts to find the one matching a bank line item, then read its amount, status, and arrival:
curl "https://api.withflintpay.com/v1/payouts?page_size=20" \
-H "Authorization: Bearer YOUR_API_KEY"
A payout tracks its own lifecycle through arrival, including failures and reversals, so a deposit that never landed is visible as a failed or reversed payout rather than a silent gap. See the Money Movement API Reference.
Practical Guidance#
- Reconcile in the original currency. Every amount stays in the currency it was collected in, and Flint never blends currencies into one total. Group by
currencybefore summing anything. - Use webhooks to build the ledger incrementally.
balance_transaction.createdfires once per ledger entry and carries the same signed amounts, so you can accumulate as events arrive instead of re-listing. Deduplicate bybalance_transaction_id. See Webhook Events. - Expect settlement lag. Funds move from pending to available on their own schedule, and ACH payments succeed days after confirmation. A payment recorded today may not be in a deposit until later, so reconcile on the ledger's own timestamps rather than assuming same-day settlement.
Next Steps#
- Processing Fees: what Flint charges and when the fee becomes final.
- Reports: the same ledger as a downloadable CSV, plus order, payment, Flint billing, payout, and tax reports.
- Flint Billing: what you owe Flint, the credit you hold, and how Flint collects.
- Money & Currency: minor units, signed fields, and the amount conventions used here.
- Money Movement API reference: balances, balance transactions, payouts, and payout destinations.
