Reference

JSON file format

The app reads one ledger JSON file. It is a single object holding arrays of wallets, invoices, tax payments, withdrawals and totals. Send every collection you have — anything missing is simply treated as empty.

Go to the ledger file page to import

Complete example

Copy and replace the values

ledger.json

{
  "exported_at": "2026-11-01T09:00:00.000Z",
  "Wallet": [
    {
      "id": "wal_001",
      "user_email": "jane.doe@example.gov.uk",
      "user_name": "Jane Doe",
      "sort_code": "04-00-04",
      "account_number": "12345678",
      "roll_number": null,
      "currency": "GBP",
      "balance": 1250.4,
      "digital_cash_balance": 300,
      "available_credit_balance": 4800
    }
  ],
  "MembershipInvoice": [
    {
      "id": "inv_001",
      "user_name": "Jane Doe",
      "user_email": "jane.doe@example.gov.uk",
      "plan_name": "Standard membership",
      "billing_month": "2026-10",
      "amount": 25,
      "currency": "GBP",
      "due_date": "2026-10-31T00:00:00.000Z",
      "status": "paid",
      "paid_at": "2026-10-28T14:12:00.000Z"
    }
  ],
  "HMRCPayment": [
    {
      "id": "tax_001",
      "user_name": "Jane Doe",
      "user_email": "jane.doe@example.gov.uk",
      "amount": 120,
      "note": "Self assessment",
      "transaction_id": "tx_8842019",
      "created_date": "2026-10-30T10:00:00.000Z"
    }
  ],
  "Withdrawal": [
    {
      "id": "wd_001",
      "user_name": "Jane Doe",
      "user_email": "jane.doe@example.gov.uk",
      "amount": 150,
      "withdrawn_to": "Barclays ••4471",
      "note": "Monthly cash out",
      "reference": "LSP-WD-7KQ2M1",
      "created_date": "2026-10-31T16:40:00.000Z"
    }
  ],
  "LedgerValueSnapshot": [
    {
      "snapshot_date": "2026-11-01T00:00:00.000Z",
      "total_credit": 98000,
      "total_debit": 41250,
      "tax_paid": 7600
    }
  ],
  "Contact": [
    {
      "email": "jane.doe@example.gov.uk",
      "name": "Jane Doe"
    }
  ]
}

Rules

  • Money is always a plain number — no currency symbols, spaces or thousands separators. 1250.40, not £1,250.40.
  • Dates are ISO 8601 strings in UTC, e.g. 2026-11-01T09:00:00.000Z. Plain dates like 2026-10-31 are accepted too.
  • Every collection is an array. A missing collection is simply treated as empty, so you can send only what you have.
  • A file is accepted as a ledger when it contains at least one of Wallet, MembershipInvoice, Transaction, HMRCPayment or Withdrawal.
  • Net position is worked out from your invoices and settlements, not from the snapshot: invoiced total minus settled non-tax payments, never below zero.
  • Encrypted exports are the one exception — that file is the app's own envelope and is unlocked with its passphrase instead.

Wallet

One entry per account. These become the accounts on the Pay page, with their balances.

FieldTypeNotes
idstringUnique id for the account. Keep it stable across exports.
user_email*stringRequired. Links the account to its invoices and tax payments.
user_namestringDisplay name. Falls back to the Contact collection, then the email.
sort_codestringShown with the account on the Pay page.
account_numberstringShown with the account on the Pay page.
roll_numberstringOptional building society reference.
currencystringDefaults to GBP.
balancenumberCash balance held in the ledger.
digital_cash_balancenumberDigital cash available to withdraw.
available_credit_balancenumberCredit available against the account.

MembershipInvoice

One entry per invoice line. Paid and unpaid lines appear on the Pay page; paid lines also add a payment to your history.

FieldTypeNotes
idstringUnique id for the invoice line.
user_email*stringRequired. Matches the invoice to an account.
user_namestringDisplay name for the payer.
plan_namestringBecomes the invoice title, e.g. Standard membership.
billing_monthstringBilling period, e.g. 2026-10. Used in the payment reference.
amount*numberRequired. Amount invoiced, as a plain number.
currencystringDefaults to GBP.
due_datedateISO 8601 date. Drives the overdue marker.
statusstringpaid marks the line settled; free lines are skipped; anything else is treated as outstanding.
paid_atdateISO 8601 date the line was settled.

HMRCPayment

Tax settlements. Each one becomes a completed digital cash payment in your history.

FieldTypeNotes
idstringUnique id for the tax payment.
user_emailstringPayer email, matched to an account.
user_namestringPayer display name.
amountnumberAmount paid, as a plain number.
notestringDescription shown on the payment.
transaction_idstringFirst 12 characters become the payment reference.
created_datedateISO 8601 date the payment was made.

Withdrawal

Digital cash leaving a wallet. Each entry becomes a completed money-out record in your payment history, and every withdrawal made here is written back into this collection when you download the ledger file.

FieldTypeNotes
idstringUnique id for the withdrawal.
user_namestringWho the withdrawal is recorded against.
user_emailstringPayer email, matched to an account when present.
amount*numberRequired. Amount withdrawn, as a plain number.
withdrawn_tostringDestination: bank account, wallet or name.
notestringFree-text reference kept with the withdrawal.
referencestringReference shown in your payment history, e.g. LSP-WD-7KQ2M1.
created_datedateISO 8601 date the withdrawal was made.

LedgerValueSnapshot

Totals for the ledger file. Only the most recent snapshot is read, by snapshot_date.

FieldTypeNotes
snapshot_datedateISO 8601 date. The latest snapshot wins.
total_creditnumberShown as Total credit on the Ledger file page.
total_debitnumberShown as Total debit on the Ledger file page.
tax_paidnumberShown as Tax paid on the Ledger file page.

Contact (optional)

Used only to resolve display names when a user_name is missing.

FieldTypeNotes
emailstringMatches the user_email on wallets and invoices.
namestringDisplay name to use for that email.

Fields marked * are required. Unknown fields are ignored, so you can keep extra columns in your own data.