Status Change Webhooks

Biz Core fires a status change webhook whenever a Lead, Application, Loan, or Transaction record changes status. Each event pushes a JSON payload to your configured endpoint.

For setup, configuration, and best practices, see Setting Up Webhooks.


Event Types

EventRecordPurpose
Lead Status ChangedLead (BCB...)Fires on any Lead status change. See Lead Lifecycle for status values.
Application Status ChangedApplication (BCA...)Fires on any Application status change. See Application Statuses below.
Loan Status ChangedLoan (BCL...)Fires on any Loan status change. See Loan Statuses below.
Transaction Status ChangeTransactionFires when an individual payment transaction's status changes. See Transaction Status Change below.

The External Decision Engine push is a separate webhook pattern that requires a response contract — see External Decision Engine.

For status transition diagrams and business rules, see Records & Statuses in the user knowledge base.


Payload Structure — Record Status Webhooks

The schema in this section applies to Lead Status Changed, Application Status Changed, and Loan Status Changed events. The Transaction Status Change webhook has its own compact structure, documented in its section below.

Every record-status payload contains three groups of fields:

  1. Event-specific fields — identifiers and status for the record type that triggered the event.
  2. Customer fields — common to all events.
  3. Address & contact fields — common to all events.

If a customer field is not stored on the record, the payload still fires but the field will be null or empty.

Common Customer Fields (all events)

FieldTypeDescription
subscriptionIdstring (UUID)Your unique subscription identifier.
customerRefstringThe customer record's reference number.
firstNamestringCustomer first name.
lastNamestringCustomer surname.
dateOfBirthstring (ISO 8601)Customer date of birth.
companyNamestring | nullCompany name (for business loans only).
tradingNamestring | nullTrading name (for business loans only).
emailAddressstringCustomer email.
phoneNumberstringCustomer phone number.
phoneTypeIdnumber0 = Residential, 1 = Mobile, 2 = Business.
phoneTypestringHuman-readable phone type.
addressobjectCustomer address (see below).
customerTagsarray<string>Tags applied to the customer record.
leadIdentifiersstring (JSON)Custom URL identifiers captured at lead intake.
gaClientIDstring | nullGoogle Analytics Client ID, if captured.

Address Object

FieldDescription
premiseUnit / level / suite number, if applicable.
streetAddressStreet address.
postalCodePost code.
localitySuburb.
administrativeAreaState or territory.
countryCountry.
contactIdUnique ID for this address record.

Status History

Lead and Application payloads include a statusHistory array containing prior status transitions for the record, in chronological order. Each entry captures the transition's identifier, the status the record moved into at that point, the timestamp, and the user (or system) that triggered the change.

ℹ️ Note: Loan Status Changed does not include a statusHistory array.

The entry field names vary by event type:

EventTransition ID fieldStatus ID fieldStatus name field
Lead Status ChangedleadStatusTransitionIdleadStatusIdleadStatus
Application Status ChangedapplicationStatusTransitionIdapplicationStatusIdapplicationStatus

Common fields in each entry:

FieldDescription
*StatusTransitionIdUnique ID of this transition.
*IdThe record ID (same as the top-level record ID).
*StatusIdNumeric ID of the status entered at this transition. Useful if you prefer integer comparisons over string matching.
*StatusString name of the status entered at this transition.
statusDateISO 8601 timestamp of when the transition occurred.
userIdUUID of the user who triggered the transition, or system identifier for automatic transitions.
userHuman-readable identifier (typically the user's email).

ℹ️ Note: The top-level statusDate and the entries inside statusHistory may use different timezone offsets. Treat both as ISO 8601 with explicit offset rather than assuming a fixed zone.


Lead Status Changed

Event-specific fields

FieldDescription
leadIdUnique ID of the Lead.
leadRefBiz Core reference number for the Lead.
leadStatusCurrent status of the Lead. One of: Incomplete, Complete, Converted, Dismissed.
statusDateISO 8601 timestamp with offset for when the current status was entered.
loanRefReference of the Loan this Lead converted to, if applicable.
loanApplicationRefReference of the Application this Lead converted to, if applicable.
leadSourceValue from the leadSource= URL parameter.
leadCampaignValue from the campaign= URL parameter.
leadMediumValue from the leadMedium= URL parameter.
statusHistoryArray of prior status transitions for this Lead. See Status History above for the entry schema.

Example payload

{
  "subscriptionId": "1a468f14-605b-4550-8f0f-10efd6ff5d83",
  "leadId": "ad7a9c60-eb51-4c6c-8edf-a02b2b2181ac",
  "leadRef": "lead-ref",
  "leadStatus": "Converted",
  "statusDate": "2026-05-15T11:52:59.0434041+10:00",
  "loanRef": null,
  "customerRef": "customer-ref",
  "loanApplicationRef": "application-ref",
  "firstName": "Simon",
  "lastName": "Smith",
  "dateOfBirth": "1990-01-01T00:00:00",
  "emailAddress": "[email protected]",
  "phoneNumber": "0412345678",
  "phoneTypeId": 1,
  "phoneType": "Mobile",
  "address": {
    "premise": "Unit 33",
    "streetAddress": "22 Queen Street",
    "postalCode": "2063",
    "locality": "Sydney",
    "administrativeArea": "NSW",
    "country": "Australia",
    "contactId": "7918e32a-e6a2-41c3-b73d-144d538cb374"
  },
  "customerTags": ["Worker"],
  "leadSource": "lead-source",
  "leadCampaign": "lead-campaign",
  "leadMedium": "lead-medium",
  "leadIdentifiers": "[]",
  "gaClientID": "XYXA",
  "statusHistory": [
    {
      "leadStatusTransitionId": "fe83c80f-c708-46b7-8a01-a09c1fa7a6c9",
      "leadId": "ad7a9c60-eb51-4c6c-8edf-a02b2b2181ac",
      "leadStatusId": 0,
      "leadStatus": "Incomplete",
      "statusDate": "2026-05-13T01:52:59.0434068+00:00",
      "userId": "a6c79c35-de60-4d00-8abb-67603b270a1c",
      "user": "[email protected]"
    }
  ]
}

Application Status Changed

Application Statuses

The loanApplicationStatus field uses these string values:

StatusNumeric IDMeaning
New0Application received and in the queue to be assessed.
Processing1Application is currently being assessed.
Pending2Something is delaying the application — contact the lender for details.
Review3Assessed and a second review is required.
Withdrawn4Application has been withdrawn.
Declined5Application has been declined. declinedWithdrawnReason will be populated.
Approved6Application approved — the lender will contact the customer to proceed with settlement.
Complete7Application approved and funds disbursed. No further actions required.
Conditionally Approved8Approved with specific conditions that must be met before final approval can be granted.

The numeric applicationStatusId is available in statusHistory entries for clients that prefer integer comparison over string matching.

Event-specific fields

FieldDescription
loanApplicationIdUnique ID of the Application.
loanApplicationRefBiz Core reference number for the Application.
loanApplicationStatusCurrent status of the Application. See Application Statuses above.
declinedWithdrawnReasonReason supplied if Application was declined or withdrawn.
statusDateISO 8601 timestamp with offset for when the current status was entered.
loanRefReference of the Loan this Application converted to, if applicable.
leadRefReference of the Lead this Application originated from, if applicable.
statusHistoryArray of prior status transitions for this Application. See Status History above for the entry schema.

Example payload

{
  "subscriptionId": "aacf32a8-de05-4edd-a31a-2dfa50f70eca",
  "loanApplicationId": "3f0432e1-6bea-4dca-acc0-2458fb690edb",
  "loanApplicationRef": "application-ref",
  "loanApplicationStatus": "Declined",
  "declinedWithdrawnReason": "Not enough credit",
  "statusDate": "2026-05-15T11:52:59.0433301+10:00",
  "loanRef": "loan-ref",
  "customerRef": "customer-ref",
  "firstName": "Jerry",
  "lastName": "Kate",
  "dateOfBirth": "1990-01-01T00:00:00",
  "companyName": "OnePlusOne Pty Ltd",
  "tradingName": "OnePlusOne",
  "emailAddress": "[email protected]",
  "phoneNumber": "0400000000",
  "phoneTypeId": 0,
  "phoneType": "Residential",
  "address": { "...": "see Address Object above" },
  "customerTags": ["Student"],
  "leadRef": "lead-ref",
  "leadIdentifiers": "[]",
  "gaClientID": "XYXSA",
  "statusHistory": [
    {
      "applicationStatusTransitionId": "e7cf9889-1de9-42a0-8796-a8ffb10e4a4f",
      "applicationId": "3f0432e1-6bea-4dca-acc0-2458fb690edb",
      "applicationStatusId": 0,
      "applicationStatus": "New",
      "statusDate": "2026-05-12T01:52:59.0433374+00:00",
      "userId": "39cc9012-4552-4bd3-a3f8-fb4b98dd11ca",
      "user": "[email protected]"
    }
  ]
}

Loan Status Changed

Loan Statuses

Sourced from LoanStatusEnum in the Biz Core C# codebase. The serialized string is the Name attribute value, not the C# member name.

StatusMeaningState
ContractA contract is waiting to be signed.Pre-active
ReadyFunds are waiting to be disbursed.Pre-active
ActiveLoan is active and repayments are up to date.Open
ArrearsCustomer is behind on scheduled repayments.Open
ManagedBeing managed by the team due to special circumstances.Open
Hardship ApplicationHardship assistance request submitted and under review.Open
HardshipUnder financial hardship arrangement with special management.Open
CollectionsFallen too far behind — entered collections proceedings, default may be listed on credit file.Open
Collections: ManagedIn collections and being actively managed by the team.Open
SettledLoan settled in full.Closed
RefinancedRefinanced by a new loan.Closed
Written OffLoan was written off.Closed
SoldSold to a third party.Closed
CancelledLoan was voided — never progressed to Active.Closed

Event-specific fields

FieldDescription
loanIdUnique ID of the Loan.
loanRefBiz Core reference number for the Loan.
loanStatusCurrent status of the Loan. See Loan Statuses above.
statusDateISO 8601 timestamp with offset for when the current status was entered.
loanApplicationRefReference of the Application this Loan originated from, if applicable.
customerRefThe customer record's reference number.
leadRefReference of the Lead this Loan originated from, if applicable.

Example payload

{
  "subscriptionId": "fe081786-ac17-4704-8824-e275c070eb8f",
  "loanId": "ead0a78c-8d5d-4ca1-8f31-590addcdd1e5",
  "loanRef": "BCL001001A",
  "loanStatus": "Active",
  "statusDate": "2026-05-15T11:52:59.3534466+10:00",
  "loanApplicationRef": "BCA001001A",
  "customerRef": "BCC001001A",
  "leadRef": "BCB001001A",
  "firstName": "Test",
  "lastName": "Customer",
  "dateOfBirth": "1990-01-01T00:00:00",
  "companyName": null,
  "tradingName": null,
  "emailAddress": "[email protected]",
  "phoneNumber": "0400000000",
  "phoneTypeId": 1,
  "phoneType": "Mobile",
  "address": {
    "premise": null,
    "streetAddress": "123 Main Street",
    "postalCode": "2000",
    "locality": "Sydney",
    "administrativeArea": "NSW",
    "country": "Australia",
    "contactId": "7918e32a-e6a2-41c3-b73d-144d538cb374"
  },
  "customerTags": [],
  "leadIdentifiers": "[]",
  "gaClientID": null
}

Transaction Status Change

Fires whenever an individual payment transaction's status changes — e.g. from Scheduled to Processing, from Processing to Successful, or from Successful to Declined (a late rejection).

This is the webhook to subscribe to when implementing the recommendation in Payment Module — Step 6.

Payload structure

This event uses its own compact schema — none of the customer/address/status-history fields above apply.

FieldDescription
subscriptionIdYour unique subscription identifier.
transactionAgreementIdUUID of the parent transaction agreement.
transactionAgreementRefBiz Core reference for the agreement (BCP...).
customerIdUUID of the customer.
customerRefBiz Core customer reference (BCC...).
transactionIdUUID of the individual transaction.
transactionRefBiz Core transaction reference.
transactionDateISO 8601 timestamp of the transaction.
transactionAmountDecimal amount of the transaction.
transactionStatusNew status of the transaction. See Transaction Statuses in the Payment Module docs.
declineReasonIf transactionStatus is Declined or Late Rejection, the bank or system reason code (e.g. AccountClosed). Null otherwise.

Example payload

{
  "subscriptionId": "2467699f-33df-49eb-95e0-f8d1b09aca6a",
  "transactionAgreementId": "1bee0bf9-5fa9-4cb2-88b1-c54d6bf95c7f",
  "transactionAgreementRef": "agreement-ref",
  "customerId": "82a60f60-e4b7-45da-a628-3bc0baf78e38",
  "customerRef": "customer-ref",
  "transactionId": "c59ccc18-ab8e-4ff8-84a7-c1be4aaa4ad6",
  "transactionRef": "transaction-ref",
  "transactionDate": "2026-05-15T12:05:11.563689+10:00",
  "transactionAmount": 12.33,
  "transactionStatus": "Declined",
  "declineReason": "AccountClosed"
}

ℹ️ Decline reason codes. AccountClosed is one example; the full enumeration includes codes such as account-closed, invalid-account, insufficient-funds, payment-stop, etc. Refer to the API reference or test in UAT for the complete set.

For best practices (idempotency, source verification, monitoring), see Setting Up Webhooks.