FinBaze for Platforms

Changelog

2026-11-11: payout, sales and SFTP feeds, quotes, shipped Z-report (Wave 3)#

  • Payout feeds. ingestPayoutTransactions(source, company, account, payouts) takes up to 500 payouts of a payout_feed source onto the company's PSP account (upsertFeedBankAccount with type: psp). PayoutFeedInput carries payoutDate, arrivalDate, the net amountMinor (positive), grossMinor, feesMinor, the reference the bank statement shows, destination { iban account }, status (paid, in_transit: not accepted until paid, PENDING_NOT_BOOKED) and reverses for a payout that failed. Idempotent by externalId; a changed payout is IMMUTABLE_TRANSACTION. Scope monetary_accounts:write.
  • Transfer matcher. A payout is paired with the credit on one of the company's bank accounts (same amount, around the arrival day, the reference in the statement text or the destination IBAN), whichever arrives first, also when the credit comes through Lunch Flow or a statement file (hourly). Both sides are booked on the suspense ledger, where they cancel out; bank_transaction.booked follows as for any booking. payoutTransferMatches(source, company, payouts) (monetary_accounts:read) lists the pairs with confidence and rationale.
  • Sales and purchase feeds. ingestSalesInvoices (sales_feed source) and ingestPurchaseInvoices (purchase_feed) take up to 500 invoices with the same fields and rules as upsertSalesInvoice and upsertPurchaseInvoice; the invoices carry the source.
  • Read-only partner data. Invoices from a sales or purchase feed and hours from an hours feed are read-only for the company's users, like delivered bank rows: changing the facts (customer, dates, amounts, lines, tax) or deleting answers PARTNER_SOURCED_READ_ONLY with the source's name. Processing stays open: ledgers, cost centres and projects on purchase lines, approval, payment and booking. Reopening a delivered sales invoice is refused too; corrections are credit notes from you.
  • SFTP statement pickup. A source with delivery: { sftp: true } accepts camt.053, camt.052 and MT940 files in its folder on the FinBaze SFTP server (<platform id>/<source key>/). FinBaze picks them up within a minute, imports them like an upload (receivedVia: sftp on dataSourceFiles, same dedup and events) and moves them to processed/<date>/; a file it cannot take moves to failed/ with a .error.txt beside it. SFTP accounts are set up per platform on request.
  • Quotes. upsertQuote(input) and bulk object=quotes (quotes:write): draft quotes with your own id, lines as on sales invoices, expectedTotalMinor as a guard. Sending stays in FinBaze; a sent quote accepts metadata only and cannot be deleted.
  • Bank detail provenance. A bank account change through your token (including bulk jobs and flow runs) records your platform; changes by your backend count as platform_push.
  • Custom records. FinBaze ships a z_report record type and a pos-z-report template (flowTemplates lists it as shipped). Your own z_report type replaces the shipped one; activateFlowTemplate(key: "pos-z-report", version: 1) copies the shipped template into your platform and activates the copy, it never runs on its own. Expressions can read previous.data (the record's data before the change that started the run) next to previous.status; testFlowTemplate takes previousData per sample record. Records in bulk: object=custom_records with lines like upsertCustomRecord ({ company?, externalId, type, status?, data, metadata?, occurredAt? }, custom_records:write). A record pushed without status keeps its current state.
  • Promotion. The sandbox bundle carries a new policy kind records: your active record types and flow templates. Confirming the import in production defines the types, saves and activates the templates and retires active templates that are not in the bundle. PolicyKind gains records.