FinBaze for Platforms

Reference

Generated from the event catalogue the API runs on: 126 events are available, 2 are planned (registered, not sent yet; platformEventCatalog shows the status). Concepts, retries and replay: Events and webhooks.

The envelope#

Every delivery is a POST with a JSON body:

{
  "id": "evt_3f2b1c9e-5a47-4d1e-9c0b-2a6d8e7f1b10",
  "object": "event",
  "type": "bank_transaction.booked",
  "apiVersion": "2026-11-01",
  "created": "2026-03-02T10:00:00.000Z",
  "occurredAt": "2026-03-02T09:59:58.000Z",
  "sequence": "1000",
  "livemode": false,
  "platform": "00000000-0000-4000-8000-0000000000aa",
  "company": {
    "id": "00000000-0000-4000-8000-0000000000bb",
    "externalId": "biz-1001"
  },
  "request": null,
  "data": {
    "object": {
      "__typename": "BankTransaction",
      "id": "3f2b1c9e-5a47-4d1e-9c0b-2a6d8e7f1b34"
    }
  }
}
Field
idevt_…, the event id. Dedupe on it.
typeThe event type.
apiVersionThe API version the payload is written in.
created, occurredAtWhen FinBaze recorded the event, and when it happened.
sequenceA string that grows with every event. Use it to order; gaps are normal.
livemodefalse in the sandbox.
platformYour platform id.
company{ id, externalId } of the company, or null for platform-level events.
request{ id } of the request that caused it, when there was one (the X-Request-Id).
data.objectA snapshot of the object as of the event, or the event's own fields.
data.detailsEvent-specific fields beside the snapshot, for events that define them.

Headers and signature#

Header
X-FinBaze-Signaturet=<unix seconds>,v1=<hex>[,v1=<hex>]: HMAC-SHA256 of <t>.<raw body> keyed with the endpoint's whsec_… secret. Two v1 values while a secret rotates.
X-FinBaze-Event, X-FinBaze-Event-Id, X-FinBaze-Event-SequenceType, id and sequence, so you can route before parsing.
X-FinBaze-DeliveryThe delivery id (one event can have several deliveries).
X-FinBaze-TimestampThe unix timestamp used in the signature.
X-FinBaze-Api-VersionThe API version of the payload.
X-FinBaze-Replay1 on a replayed delivery.

Accept timestamps within 5 minutes. Verification code in Node, Python and PHP: webhook receivers.

Planned events are listed so you can see what is coming; you cannot subscribe to them yet.

Companies, users and sessions#

Company lifecycle and transfers, platform users, access requests from your users, embed sessions.

EventStatusObjectModule
company.archivedavailablecompanyA closed company was archived: users removed, consents revoked, retention date set.
company.closedavailablecompanyA company was closed: obligations end at the effective date; final returns and exports stay possible.
company.createdavailablecompanyA company was created for the platform.
company.features.updatedavailablecompanyThe features available to a company changed (allowance or limits).
company.reactivatedavailablecompanyA suspended company was reactivated.
company.reopenedavailablecompanyA closed company was reopened (or an archived one restored as closed by FinBaze).
company.requirements.updatedavailablecompanyWhat a company still has to provide changed (for now: its filing authorisation, tax_*_authorisation). data.details.reason says why.
company.suspendedavailablecompanyA company was suspended (read-only; no filings, automations or outbound mail).
company.transfer.cancelledavailablenoneA pending transfer was cancelled.
company.transfer.createdavailablenoneThe company admin started a transfer to another platform or to direct FinBaze.
company.transferred_inavailablecompanyA company arrived from another platform. Set up its users and collect consent again.
company.transferred_outavailablenoneA company left the platform (to another platform or to direct FinBaze). The last event the platform receives for it.
company.updatedavailablecompanyA company's details changed.
embed_session.usedavailableembed_sessionAn embed session was exchanged for a token.
platform_user.createdavailableplatform_userA platform user was created.
platform_user.deactivatedavailableplatform_userA platform user was deactivated.
platform_user.deprovisionedavailableplatform_userA platform user was deprovisioned: access removed and every token revoked.
user.invite_requestedavailableuser_access_requestA company admin asked, in users-and-access, to give someone access. FinBaze sends no invitation and creates no account: the platform decides.
user.removal_requestedavailableuser_access_requestA company admin asked to remove someone’s access. The access stays until the platform calls removePlatformUserAccess.
user.role_change_requestedavailableuser_access_requestA company admin asked to change a person’s role. Nothing changes until the platform calls setPlatformUserAccess.

Bookkeeping#

Invoices, quotes, relations and bank transactions.

EventStatusObjectModule
attachment.matchedplannedprocess_documentprocess_documentsA document was matched to a transaction.
bank_account.createdavailablebank_accountbankingA bank account was added to a company.
bank_account.updatedavailablebank_accountbankingA bank account changed.
bank_transaction.bookedavailablebank_transactionbankingA bank transaction was booked.
bank_transaction.createdavailablebank_transactionbankingA bank transaction arrived (feed, file or import).
bank_transaction.needs_receiptavailablebank_transactionbankingA booked transaction still needs a receipt.
bank_transaction.needs_reviewavailablebank_transactionbankingA transaction needs a person to look at it.
bank_transaction.unbookedavailablebank_transactionbankingThe booking of a bank transaction was undone.
journal_entry.createdavailablejournal_entrysettlementsA journal entry was booked through the platform API.
purchase_invoice.approvedavailablepurchase_invoicepurchase_invoicesA purchase invoice was approved.
purchase_invoice.createdavailablepurchase_invoicepurchase_invoicesA purchase invoice was received or created.
purchase_invoice.dueavailablepurchase_invoicepurchase_invoicesA purchase invoice is due.
purchase_invoice.paidavailablepurchase_invoicepurchase_invoicesA purchase invoice was paid.
purchase_invoice.processedavailablepurchase_invoicepurchase_invoicesA purchase invoice was processed.
quote.acceptedavailablequotequotesA quote was accepted.
quote.sentavailablequotequotesA quote was sent.
relation.bank_account_changedavailablerelationrelationsThe bank account of a relation changed.
relation.createdavailablerelationrelationsA relation was created.
relation.updatedavailablerelationrelationsA relation changed.
reminder.paidavailablereminderremindersA reminder was paid.
reminder.sentavailablereminderremindersA payment reminder was sent.
sales_invoice.createdavailablesales_invoicesales_invoicesA sales invoice was created through the platform API.
sales_invoice.creditedavailablesales_invoicesales_invoicesA sales invoice was credited.
sales_invoice.finalisedavailablesales_invoicesales_invoicesA sales invoice was numbered and booked.
sales_invoice.overdueavailablesales_invoicesales_invoicesA sales invoice is overdue.
sales_invoice.paidavailablesales_invoicesales_invoicesA sales invoice was paid.
sales_invoice.sentavailablesales_invoicesales_invoicesA sales invoice was sent.

Data in#

Bulk jobs, data sources, feed health, records and flow runs.

EventStatusObjectModule
bulk_job.completedavailablebulk_jobA bulk job finished.
bulk_job.failedavailablebulk_jobA bulk job failed.
data_source_file.failedavailabledata_source_fileA statement file could not be processed.
data_source_file.processedavailabledata_source_fileA statement file was processed.
data_source.backfill_completedavailabledata_source_attachmentThe history of a data source finished loading.
data_source.resync_requestedavailabledata_source_attachmentA person in the partner portal asked for a period of a company to be delivered again. data.object.from and data.object.to name the days; deliver them with the usual feed calls.
feed.balance_mismatchavailablefeed_accountbankingA delivered balance does not match the transactions.
feed.delayedavailablefeed_accountbankingA bank feed is later than usual.
feed.gap_detectedavailablefeed_accountbankingA bank feed stopped delivering.
feed.recoveredavailablefeed_accountbankingA bank feed is healthy again.
flow_run.failedavailableflow_runcustom_recordsA flow template failed.
flow_run.succeededavailableflow_runcustom_recordsA flow template ran.
record.createdavailablecustom_recordcustom_recordsA custom record was created.
record.transitionedavailablecustom_recordcustom_recordsA custom record moved to another state.
record.updatedavailablecustom_recordcustom_recordsA custom record changed.

Tax#

Filings, consent, payments and reservations.

EventStatusObjectModule
tax_authorisation.grantedavailabletax_authorisationtax_filingsA company user authorised FinBaze to file the listed taxes (companyId, taxes, channel, stepUp, at). No IP or user agent.
tax_authorisation.revokedavailabletax_authorisationtax_filingsA filing authorisation was revoked for the listed taxes (channel is how: embed, headless, platform, admin or lifecycle).
tax_filing.acceptedavailabletax_filingtax_filingsA tax return was accepted.
tax_filing.draft_readyavailabletax_filingtax_filingsA tax return draft is ready.
tax_filing.paidavailabletax_filingtax_filingsThe payment of a tax return was matched.
tax_filing.readyavailabletax_filingtax_filingsA tax return is ready to be submitted.
tax_filing.rejectedavailabletax_filingtax_filingsA tax return was rejected.
tax_filing.submittedavailabletax_filingtax_filingsA tax return was submitted.
tax_payment.dueavailabletax_filingtax_filingsA tax payment is due.
tax_payment.overdueavailabletax_filingtax_filingsA tax payment is overdue.
tax_reservation.advisedavailablenoneA new tax reservation advice was computed.
tax_signal.createdavailabletax_signalai.tax.signalsA tax signal was raised.

Payroll#

Pay runs and payslips.

EventStatusObjectModule
pay_run.approvedavailablepay_runpayrollA pay run was approved.
pay_run.calculatedavailablepay_runpayrollA pay run was calculated.
pay_run.paidavailablepay_runpayrollA pay run was paid.
payslip.finalisedavailablepayslippayrollA payslip was finalised.

Documents and messages#

Documents and rendering, messages, exports, domains.

EventStatusObjectModule
custom_action.invokedavailablenoneA user invoked one of your custom actions.
custom_domain.status_changedavailablecustom_domainA custom domain for public pages changed status.
document_request.cancelledavailabledocument_requestdocument_requestsA document request was cancelled.
document_request.createdavailabledocument_requestdocument_requestsA document request was created.
document_request.fulfilledavailabledocument_requestdocument_requestsA document request was fulfilled.
document.failedavailableprocess_documentprocess_documentsA document could not be processed.
document.needs_reviewplannedprocess_documentprocess_documentsA document needs a person to look at it.
document.official_copy_createdavailablenoneThe official copy of a document was stored.
document.processedavailableprocess_documentprocess_documentsA document was processed.
document.receivedavailableprocess_documentprocess_documentsA document was received.
document.render_failedavailablenoneA custom template or partner render failed or timed out; FinBaze used its own layout.
document.render_rejectedavailablenoneA PDF the platform rendered failed the required-content checks; FinBaze used its own layout.
document.render_requestedavailablenoneA document needs to be rendered by the platform. The payload has the data model and signed links to files that go with it (the invoice UBL), valid 15 minutes.
export.destination_expiringavailableexport_destinationdata_exportCredentials of an export destination expire soon.
export.failedavailableexport_rundata_exportA scheduled export failed.
export.readyavailableexport_rundata_exportA scheduled export is ready.
message.createdavailablenoneA message needs to be delivered by the platform.
message.unacknowledgedavailablenoneA delivered message was not acknowledged in time.

Delegated actions#

Payment requests, payment links and step-up challenges.

EventStatusObjectModule
payment_link.requestedavailablenoneA payment link is needed for an invoice.
payment_request.createdavailablenoneA payment request was created; pay it and use the end-to-end id.
payment_request.paidavailablenoneThe bank transaction of a payment request was matched.
payment_request.updatedavailablenoneA payment request changed status.
step_up.requiredavailablenoneA step-up confirmation is required for a high-risk action.

Accounting firms#

Accountant connections.

EventStatusObjectModule
firm.access_requestedavailablefirm_engagementAn accounting firm asked for access to a company. Show the request in your own UI; the company decides in accountant-connect.
firm.authority_changedavailablefirm_engagementThe company changed which taxes the firm files.
firm.connectedavailablefirm_engagementAn accounting firm now works the company in the FinBaze firm dashboard.
firm.connection_declinedavailablefirm_engagementA request between a company and a firm was declined (or withdrawn).
firm.connection_expiredavailablefirm_engagementA request between a company and a firm expired after 14 days without an answer.
firm.connection_requestedavailablefirm_engagementA company invited an accounting firm; the firm has not accepted yet.
firm.disconnect_scheduledavailablefirm_engagementThe engagement ends at a set time because accountant access was hidden for the company; the key can still be shown again to cancel it.
firm.disconnectedavailablefirm_engagementThe engagement ended: firm access, BECON use and HMRC client authorisations stopped; the books stay with the company.

Support#

Support requests, escalations and consented access.

EventStatusObjectModule
support.access_expiredavailablesupport_access_grantA support grant reached its end.
support.access_grantedavailablesupport_access_grantA support access request was approved; FinBaze support can view the company until expiresAt.
support.access_requestedavailablesupport_access_grantFinBaze support asked to view a company. The company admin decides.
support.access_revokedavailablesupport_access_grantA live support grant was ended early.
support.break_glassavailablesupport_access_grantFinBaze opened a company without consent (two admins, read only, at most two hours).
support.escalation.createdavailablesupport_escalationAn escalation to FinBaze support was created.
support.escalation.updatedavailablesupport_escalationAn escalation changed status or severity, or got a comment.
support.requestedavailablesupport_requestA company user asked for help in contact-support and the platform handles support (partner_first).

Platform: policies, quotas and agents#

Policy changes, quotas, usage reports, partner alerts and agent tasks.

EventStatusObjectModule
agent_task.completedavailableagent_taskai.agentsAn agent task completed.
agent_task.failedavailableagent_taskai.agentsAn agent task failed.
agent_task.waiting_approvalavailableagent_taskai.agentsAn agent task waits for approval.
agent_task.waiting_inputavailableagent_taskai.agentsAn agent task waits for input.
billing.usage.reportedavailableplatform_usageThe month's usage was closed and reported.
platform.alertavailableplatform_alertSomething needs the platform's attention: a failing or disabled webhook endpoint, a stalled feed, a rejected filing.
policy.activatedavailableplatform_policyA policy version was activated (also by a promotion).
quota.reachedavailablenoneA company reached one of its quotas for the month.

Sandbox#

Test clocks and the sandbox reset.

EventStatusObjectModule
sandbox.reset.completedavailablesandbox_resetThe nightly or manual reset of the platform sandbox finished (sandbox only).
test_clock.failedavailabletest_clockA test clock stopped because the advance failed (sandbox only).
test_clock.readyavailabletest_clockA test clock finished advancing (sandbox only).