Reconciliation Reports

Successful Payments

All successful payments with reconciliation status, both matched against PSP settlements and still awaiting settlement data.

The Successful Payments report is the core of your reconciliation. It contains every successful payment processed through NjiaPay, each shown with its reconciliation status. A transaction in this report is either:

  • Matched: found in both NjiaPay and the PSP settlement file (exists_in_njia = True, exists_in_psp = True). All columns are populated, including PSP amounts, fees, and break flags.
  • Unmatched: exists in NjiaPay but no corresponding PSP settlement record was found yet (exists_in_njia = True, exists_in_psp = False). Only the NjiaPay columns are filled; all PSP columns and break flags are empty.
Last updated: March 2026

When to Use This Report

  • As your primary reconciliation worksheet. Filter to see matched vs. unmatched at a glance
  • To review processing fees charged by each PSP on matched transactions
  • To calculate your net revenue after fees and currency conversion
  • To identify amount breaks, i.e. discrepancies between what NjiaPay recorded and what the PSP settled
  • To track which successful payments are still awaiting settlement confirmation

Column Reference

The report has three groups of columns: NjiaPay side (what NjiaPay recorded), PSP side (what the PSP settlement file says), and Break flags (discrepancy indicators).

NjiaPay Columns (always populated)

ColumnDescriptionExample
njia_intent_idNjiaPay's unique payment identifier018b2f4a-9c3d-7a1e-...
njia_reference_idYour order/payment referenceACME_ORDER_50004
merchant_idYour merchant identifieracme
njia_merchant_idSame as merchant_id (included for compatibility)acme
njia_currencyCurrency the customer paid inGBP
njia_amountPayment amount in major units40.0
njia_intent_statusAlways Success in this reportSuccess
njia_attempt_idNjiaPay's attempt number1687787
njia_attempt_updated_atWhen NjiaPay last updated this transaction2025-11-25 17:15:28
created_tsTransaction timestamp used for date filtering2025-11-25 17:15:28
njia_payment_partnerPSP that processed the paymentAdyen
njia_connection_idSpecific PSP connection/accountadyen-global
njia_payment_partner_refPSP's reference ID (used to match)TQP9RN7HWXXHJMF3

PSP Columns (populated only when matched)

These columns are filled when exists_in_psp = True. When the transaction is unmatched, they are all empty.

ColumnDescriptionExample
psp_typePSP identifier in settlement fileAdyenGlobal
psp_created_timestampWhen the PSP recorded this transaction2025-09-29 23:34:31
psp_merchant_idYour merchant ID on the PSP's sideacme
psp_batch_refSettlement batch reference (links to the specific payout)156 - 2025-09-29 23:34:31+00
psp_transaction_typeTransaction classification on PSP sideSettled
psp_gross_currencyCurrency of the gross (pre-fee) amountGBP
psp_gross_amountGross amount before fees in major units40.0
psp_exchange_rateExchange rate applied by PSP (1.0 = no conversion)1.0
psp_cost_currencyCurrency in which fees were chargedGBP
psp_total_costsTotal fees deducted by the PSP in major units0.84
psp_net_currencyCurrency of the net (post-fee) amountGBP
psp_net_amountNet amount after fees, i.e. what you actually receive39.16

Reconciliation & Break Columns

ColumnDescriptionWhat to look for
exists_in_njiaWas this transaction found in NjiaPay?Always True in this report
exists_in_pspWas this transaction found in PSP settlement?True = matched, False = unmatched
break_gross_amountDo the NjiaPay amount and PSP gross amount disagree?True = investigate. Empty if unmatched.
break_currencyDo the currencies disagree?True = investigate. Empty if unmatched.
break_created_monthWere the transactions recorded in different months?True = month mismatch (common). Empty if unmatched.
Break columns are only meaningful for matched rows. When exists_in_psp = False, all break columns are empty because there is nothing to compare against yet.

Example Data

Below is an example mixing both matched and unmatched rows. Matched rows have all columns filled and break flags set to True/False, while unmatched rows have empty PSP columns and empty break flags.

NjiaPay side

njia_reference_idnjia_currencynjia_amountnjia_payment_partnernjia_connection_idnjia_payment_partner_refexists_in_psp
ACME_ORDER_50116ZAR150.0Adyenadyen-globalSD8G0HSSTU5T76I7False
ACME_ORDER_54770USD15.03Adyenadyen-globalUWS5TUOY8WE889I7False
ACME_ORDER_60325GBP40.0Adyenadyen-globalURQ0SO8IXYYJKNF4True
ACME_ORDER_59747USD22.68Adyenadyen-globalGYHAQ35SI3X54TG4True
ACME_ORDER_60268NGN3800.0StartButtonstbtn-xxxxx9160260dbdb5False
ACME_ORDER_61179NZD30.0Adyenadyen-globalXAW3KGOOOIUE0TE4True
ACME_ORDER_59279KES500.0StartButtonstbtn-xxxxx1ged0f4ad7b5False
ACME_ORDER_60429USD40.0Adyenadyen-globalX0ITD49QDQTU8DH7True

PSP side (for matched rows only)

njia_reference_idpsp_typepsp_transaction_typepsp_gross_amountpsp_exchange_ratepsp_total_costspsp_net_currencypsp_net_amountbreak_gross_amountbreak_currency
ACME_ORDER_60325AdyenGlobalSettled40.01.00.84GBP39.16FalseFalse
ACME_ORDER_59747AdyenGlobalSettled22.681.00.76USD21.92FalseFalse
ACME_ORDER_61179AdyenGlobalSettled30.00.4840.51EUR14.0FalseFalse
ACME_ORDER_60429AdyenGlobalSettled40.01.01.24USD38.76FalseFalse

Unmatched rows (ACME_ORDER_50116, 54770, 60268, 59279) have no PSP data. They are awaiting settlement file upload.

How to Read This Report

Quickly Separate Matched from Unmatched

In your spreadsheet, filter or sort by the exists_in_psp column:

  • True rows are fully reconciled. Both sides agree (check break flags for exceptions)
  • False rows are still awaiting PSP settlement confirmation

A quick summary formula:

Matched count:    =COUNTIF(report[exists_in_psp], "True")
Unmatched count:  =COUNTIF(report[exists_in_psp], "False")
Match rate:       =COUNTIF(report[exists_in_psp], "True") / COUNTA(report[exists_in_psp])

Understanding the Fee Breakdown (Matched Rows Only)

For each matched transaction, you can calculate the effective fee rate:

Fee Rate = psp_total_costs / psp_gross_amount * 100

For example, a transaction with psp_gross_amount = 40.0 GBP and psp_total_costs = 0.84 GBP has an effective fee rate of 2.1%.

Understanding Currency Conversions

When the PSP converts currencies (e.g. NZD to EUR for settlement), you will see:

  • njia_currency = NZD and psp_gross_currency = NZD (original currency matches)
  • psp_exchange_rate = 0.484 (the NZD-to-EUR rate applied)
  • psp_net_currency = EUR (the settlement currency after conversion)
  • psp_net_amount = 14.0 (what lands in your EUR account)

The formula is: psp_net_amount = (psp_gross_amount * psp_exchange_rate) - psp_total_costs

Understanding Break Flags (Matched Rows Only)

Break flags only appear on matched rows. break_created_month = True is normal and expected. It means the NjiaPay transaction was recorded in a different month than the PSP settlement batch. PSPs typically settle in batches that may lag behind the actual transaction date by days or weeks.

When to investigate:

  • break_gross_amount = True: the PSP settled a different amount than NjiaPay recorded. Check for partial refunds, chargebacks, or currency rounding.
  • break_currency = True: the currencies don't match. This can happen with certain PSP configurations.

Why Are Some Successful Payments Unmatched?

Common reasons a successful payment may not yet have a PSP settlement match:

ReasonTypical Duration
PSP settlement file not yet uploaded1–3 business days
Transaction processed through a PSP without settlement integration (e.g. StartButton, Precium)Until integration is completed
PSP reference format changed or transaction was retriedRequires manual investigation
If you see a large number of unmatched transactions for a specific PSP, check with your NjiaPay account manager whether the latest settlement files have been uploaded.

Tips for Working with This Report

Calculate Net Revenue by Currency (Matched Only)

=SUMIFS(report[psp_net_amount], report[psp_net_currency], "USD", report[exists_in_psp], "True")

Calculate Unmatched Exposure by Currency

=SUMIFS(report[njia_amount], report[njia_currency], "USD", report[exists_in_psp], "False")

Calculate Total Fees by PSP

=SUMIFS(report[psp_total_costs], report[psp_type], "AdyenGlobal", report[psp_cost_currency], "USD")

Find Transactions with Amount Breaks

Filter to exists_in_psp = True AND break_gross_amount = True to see all discrepancies at a glance.

NjiaPay Transactions

The master list of all successful payments. Use to cross-check totals.

Refunds, Chargebacks & Pending

Non-success transactions: refunds, chargebacks, and incomplete payments

Fees & Settlements

Batch-level settlement payouts and PSP fees