NPS & NIP Payment Events
BankLingo automatically dispatches process events for every payment message exchanged over NPS (NIBSS Payment System) and NIP. These events let you build BPMN workflows that react to transfers, mandates, direct debits, requests to pay, and account reports — without polling databases or writing custom integration code.
All events are dispatched with triggeredBy: "BankLingoPaymentService".
How Payloads Work​
Each event carries a standard payload dictionary in the process context. The keys documented below are available in BPM conditions and script tasks using standard variable syntax (e.g., {{ payload.msgId }}).
Common fields present in every NPS event:
| Field | Type | Description |
|---|---|---|
messageType | string | ISO 20022 message name, e.g. "pacs.008", "pain.009" |
provider | string | Always "NPS" for NPS events; "nip" etc. for NIP |
Transfer Events​
OnOutboundTransferInitiated — value 403​
Fired when a customer-initiated outbound transfer has been submitted to NPS or NIP and is awaiting a settlement response.
Entity type: TransferRequest (102)
Entity ID: the OutwardCreditTransferRequest.ID
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pacs.008" (NPS) or "nip.credit.transfer" (NIP) or "transfer.initiation" |
msgId | string | NPS MsgId if assigned, otherwise SessionID |
sessionId | string | Internal session reference |
senderAccountNumber | string | Originator account number |
senderName | string | Originator account name |
beneficiaryAccountNumber | string | Destination account number |
beneficiaryName | string | Beneficiary account name |
beneficiaryBankCode | string | Destination institution code |
amount | decimal | Transfer amount |
provider | string | "nps" or "nip" |
Example use cases:
- Trigger a compliance hold for transfers above a threshold
- Notify an approver for large or unusual transfers
- Start a fraud-screening subprocess
OnOutboundTransferSettled — value 404​
Fired when NPS returns a successful pacs.002 confirming that the outbound transfer was settled.
Entity type: TransferRequest (102)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pacs.002" |
msgId | string | MsgId of the pacs.002 |
originalMsgId | string | MsgId of the original pacs.008 |
sessionId | string | Internal session reference |
senderAccountNumber | string | Originator account |
beneficiaryAccountNumber | string | Beneficiary account |
beneficiaryName | string | Beneficiary name |
beneficiaryBankCode | string | Destination institution code |
amount | decimal | Settled amount |
status | string | Final settlement status |
reasonCode | string | NPS reason code (empty on success) |
detail | string | Human-readable reason detail |
provider | string | "NPS" |
OnOutboundTransferRejected — value 405​
Fired when NPS returns a pacs.002 rejection for an outbound transfer.
Entity type: TransferRequest (102)
Same payload structure as OnOutboundTransferSettled, with non-empty reasonCode and detail.
OnInboundDirectDebitReceived — value 504​
Fired when another institution sends us a pacs.003 direct debit request (they are the creditor, our customer is the debtor).
Entity type: InwardTransaction (14)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pacs.003" |
msgId | string | Inbound MsgId |
senderAccountNumber | string | Debtor (our customer) account number |
senderBankCode | string | Debtor bank code |
beneficiaryAccountNumber | string | Creditor account number |
beneficiaryBankCode | string | Creditor bank code |
debtorName | string | Debtor name |
amount | decimal | Debit amount |
responseCode | string | Response code sent back to NPS |
provider | string | "NPS" |
OnOutboundDirectDebitInitiated — value 505​
Fired when we send a pacs.003 direct debit as the creditor bank (we are debiting a customer at another bank).
Entity type: TransferRequest (102)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pacs.003" |
senderAccountNumber | string | Our creditor account |
beneficiaryAccountNumber | string | Debtor account at other bank |
amount | decimal | Debit amount |
mandateId | string | Mandate reference this debit is under |
npsStatusCode | string | NPS synchronous status |
provider | string | "NPS" |
Mandate Events​
OnMandateInitiationReceived — value 2500​
Fired when another institution sends us a pain.009 requesting a mandate against one of our customers.
Entity type: NibssMandate (311)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.009" |
msgId | string | pain.009 GrpHdr MsgId |
mandateId | string | Mandate reference number |
debtorAccountNumber | string | Our customer's account (the debtor) |
debtorBankCode | string | Our bank code (debtor agent) |
creditorAccountNumber | string | Creditor account at requesting bank |
creditorName | string | Creditor name |
creditorBankCode | string | Requesting bank code |
amount | decimal | Collection amount |
accepted | bool | Whether we accepted the mandate |
provider | string | "NPS" |
OnMandateInitiationSent — value 2501​
Fired when we send a pain.009 to initiate a mandate against a customer at another bank.
Entity type: NibssMandate (311)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.009" |
msgId | string | pain.009 MsgId |
mandateId | string | Mandate reference number |
debtorAccountNumber | string | Debtor account at other bank |
debtorBankCode | string | Debtor's bank code |
creditorAccountNumber | string | Our creditor account |
creditorName | string | Our creditor name |
amount | decimal | Collection amount |
provider | string | "NPS" |
OnMandateAcceptanceReceived — value 2502​
Fired when we receive a pain.012 acceptance/rejection response for a mandate we initiated (pain.009).
Entity type: NibssMandate (311)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.012" |
originalMsgId | string | MsgId of the original pain.009 |
mandateId | string | Mandate reference number |
accepted | bool | true if accepted, false if rejected |
provider | string | "NPS" |
OnMandateAmendmentReceived — value 2503​
Fired when another institution sends us a pain.010 to amend an existing mandate.
Entity type: NibssMandate (311)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.010" |
mandateId | string | Original mandate reference |
debtorAccountNumber | string | Our customer's account |
debtorBankCode | string | Our bank code |
creditorAccountNumber | string | Creditor account |
creditorName | string | Creditor name |
accepted | bool | Whether we accepted the amendment |
provider | string | "NPS" |
OnMandateAmendmentSent — value 2504​
Fired when we send a pain.010 to amend a mandate we initiated.
Entity type: NibssMandate (311)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.010" |
originalMandateId | string | Mandate reference being amended |
provider | string | "NPS" |
OnMandateCancellationReceived — value 2505​
Fired when another institution sends us a pain.011 to cancel a mandate.
Entity type: NibssMandate (311)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.011" |
mandateId | string | Mandate reference being cancelled |
debtorAccountNumber | string | Our customer's account |
debtorBankCode | string | Our bank code |
accepted | bool | Whether we accepted the cancellation |
provider | string | "NPS" |
OnMandateCancellationSent — value 2506​
Fired when we send a pain.011 to cancel a mandate we initiated.
Entity type: NibssMandate (311)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.011" |
mandateId | string | Mandate reference |
creditorAccountNumber | string | Our creditor account |
debtorAccountNumber | string | Debtor account at other bank |
debtorBankCode | string | Debtor's bank code |
reasonCode | string | Cancellation reason code |
provider | string | "NPS" |
OnMandateCollectionInitiated — value 2507​
Fired when a mandate-based collection (debit) transfer has been submitted to NPS.
Entity type: TransferRequest (102)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "mandate.collection" |
sessionId | string | Internal session reference |
debtorAccountNumber | string | Account being debited |
debtorBankCode | string | Debtor's bank code |
creditorAccountNumber | string | Our creditor account |
amount | decimal | Collection amount |
responseCode | string | Response code from NPS |
provider | string | "nps" or other provider |
Request to Pay (RTP) Events​
OnRequestToPayReceived — value 2600​
Fired when another institution sends us a pain.013 Request to Pay — they want our customer to approve a payment.
Entity type: TransferRequest (102)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.013" |
msgId | string | GrpHdr message ID |
paymentInformationId | string | PmtInfId from pain.013 |
debtorAccountNumber | string | Our customer who must pay |
debtorName | string | Debtor name |
debtorBankCode | string | Our bank code |
creditorAccountNumber | string | Creditor account at requesting bank |
creditorName | string | Creditor name |
creditorBankCode | string | Requesting bank code |
amount | decimal | Requested payment amount |
narration | string | Payment narration |
expiryDateTime | datetime | Request expiry |
clientCode | string | Our customer's client code (if resolved) |
provider | string | "NPS" |
OnRequestToPayInitiated — value 2601​
Fired when we send a pain.013 requesting payment from a customer at another bank.
Entity type: TransferRequest (102)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.013" |
creditorAccountNumber | string | Our account expecting payment |
debtorAccountNumber | string | Debtor account at other bank |
amount | decimal | Requested amount |
npsStatusCode | string | NPS synchronous response code |
provider | string | "NPS" |
OnRequestToPayDecided — value 2602​
Fired when our customer approves or rejects an inbound Request to Pay (pain.013) via internal decision.
Entity type: TransferRequest (102)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.014" |
paymentInformationId | string | PmtInfId being decided |
msgId | string | Original request message ID |
decision | string | "approved" or "rejected" |
reasonCode | string | Rejection reason code (empty if approved) |
debtorAccountNumber | string | Our customer's account |
debtorName | string | Debtor name |
debtorBankCode | string | Our bank code |
creditorAccountNumber | string | Creditor account |
creditorName | string | Creditor name |
creditorBankCode | string | Creditor bank code |
amount | decimal | Amount from the original request |
provider | string | "NPS" |
OnRequestToPayStatusReceived — value 2603​
Fired when we receive a pain.014 response to a Request to Pay we sent — the other bank's customer has made a decision.
Entity type: TransferRequest (102)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.014" |
originalPmtInfId | string | PmtInfId from our original pain.013 |
status | string | Decision status |
provider | string | "NPS" |
EasyPay Events (pain.001 / pain.008 / pain.002)​
OnBulkCreditTransferInitiated — value 2700​
Fired when an EasyPay credit transfer (pain.001) is submitted to NPS.
Entity type: TransferRequest (102)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.001" |
msgId | string | NPS MsgId assigned to this transfer |
sessionId | string | Internal session reference |
senderAccountNumber | string | Originator account |
beneficiaryAccountNumber | string | Beneficiary account |
beneficiaryName | string | Beneficiary name |
amount | decimal | Transfer amount |
provider | string | "NPS" |
OnBulkDirectDebitInitiated — value 2701​
Fired when an EasyPay direct debit (pain.008) is submitted to NPS.
Entity type: TransferRequest (102)
Same payload structure as OnBulkCreditTransferInitiated, with messageType = "pain.008".
OnBulkPaymentStatusReceived — value 2702​
Fired when NPS returns a pain.002 payment status report for an EasyPay submission.
Entity type: TransferRequest (102)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "pain.002" |
originalMsgId | string | MsgId of the original pain.001 or pain.008 |
sessionId | string | Internal session reference |
senderAccountNumber | string | Originator account |
beneficiaryAccountNumber | string | Beneficiary account |
beneficiaryBankCode | string | Destination institution code |
status | string | Group payment status |
reasonCode | string | NPS reason code |
detail | string | Human-readable reason detail |
amount | decimal | Amount |
provider | string | "NPS" |
Account Report Events (camt)​
OnAccountReportRequested — value 2800​
Fired when we send a camt.060 account report request to another bank.
Entity type: None (0)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "camt.060" |
msgId | string | Our camt.060 MsgId |
accountNumber | string | Account we are requesting a report for |
reportType | string | "camt.052" or "camt.053" |
beneficiaryBankCode | string | Institution we sent the request to |
provider | string | "NPS" |
OnAccountReportRequestReceived — value 2801​
Fired when another institution sends us a camt.060 requesting an account report.
Entity type: None (0)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "camt.060" |
msgId | string | Inbound camt.060 MsgId |
accountNumber | string | Account being requested |
senderBankCode | string | Institution that sent the request |
reportType | string | "camt.052" or "camt.053" |
clientCode | string | Client code of the account owner (if resolved) |
provider | string | "NPS" |
Example use case: Auto-generate the report in a background subprocess and send a camt.052/053 response.
OnAccountReportReceived — value 2802​
Fired when we receive a camt.052 intraday account report in response to a camt.060 we sent.
Entity type: None (0)
| Payload field | Type | Source |
|---|---|---|
messageType | string | "camt.052" |
msgId | string | Inbound camt.052 MsgId |
originalMsgId | string | MsgId of the camt.060 we sent |
accountNumber | string | Account the report covers |
senderBankCode | string | Institution that sent the report |
entryCount | int | Number of transaction entries in the report |
provider | string | "NPS" |
OnAccountStatementReceived — value 2803​
Fired when we receive a camt.053 end-of-day statement in response to a camt.060 we sent.
Entity type: None (0)
Same payload structure as OnAccountReportReceived, with messageType = "camt.053".
Configuring a Process Trigger​
To react to any of the events above, create a process definition in the BPM Designer and set its start event to one of these trigger types.
Example — auto-approve small transfers:
process: auto-approve-small-nps-transfer
startEvent:
trigger: OnOutboundTransferInitiated
condition: "payload.amount < 50000 && payload.provider == 'nps'"
tasks:
- name: "Approve transfer"
type: ServiceTask
action: "approveTransfer(payload.sessionId)"
Example — react to mandate acceptance:
process: notify-on-mandate-accepted
startEvent:
trigger: OnMandateAcceptanceReceived
condition: "payload.accepted == true"
tasks:
- name: "Send notification"
type: ServiceTask
action: "sendSms(payload.debtorAccountNumber, 'Your direct debit mandate has been set up.')"
Event Reference Table​
| Event | Value | Message | Direction | Entity |
|---|---|---|---|---|
| OnOutboundTransferInitiated | 403 | pacs.008 / nip | Outbound | TransferRequest (102) |
| OnOutboundTransferSettled | 404 | pacs.002 | Inbound callback | TransferRequest (102) |
| OnOutboundTransferRejected | 405 | pacs.002 | Inbound callback | TransferRequest (102) |
| OnInboundDirectDebitReceived | 504 | pacs.003 | Inbound | InwardTransaction (14) |
| OnOutboundDirectDebitInitiated | 505 | pacs.003 | Outbound | TransferRequest (102) |
| OnMandateInitiationReceived | 2500 | pain.009 | Inbound | NibssMandate (311) |
| OnMandateInitiationSent | 2501 | pain.009 | Outbound | NibssMandate (311) |
| OnMandateAcceptanceReceived | 2502 | pain.012 | Inbound | NibssMandate (311) |
| OnMandateAmendmentReceived | 2503 | pain.010 | Inbound | NibssMandate (311) |
| OnMandateAmendmentSent | 2504 | pain.010 | Outbound | NibssMandate (311) |
| OnMandateCancellationReceived | 2505 | pain.011 | Inbound | NibssMandate (311) |
| OnMandateCancellationSent | 2506 | pain.011 | Outbound | NibssMandate (311) |
| OnMandateCollectionInitiated | 2507 | mandate.collection | Outbound | TransferRequest (102) |
| OnRequestToPayReceived | 2600 | pain.013 | Inbound | TransferRequest (102) |
| OnRequestToPayInitiated | 2601 | pain.013 | Outbound | TransferRequest (102) |
| OnRequestToPayDecided | 2602 | pain.014 | Internal | TransferRequest (102) |
| OnRequestToPayStatusReceived | 2603 | pain.014 | Inbound | TransferRequest (102) |
| OnBulkCreditTransferInitiated | 2700 | pain.001 | Outbound | TransferRequest (102) |
| OnBulkDirectDebitInitiated | 2701 | pain.008 | Outbound | TransferRequest (102) |
| OnBulkPaymentStatusReceived | 2702 | pain.002 | Inbound callback | TransferRequest (102) |
| OnAccountReportRequested | 2800 | camt.060 | Outbound | None (0) |
| OnAccountReportRequestReceived | 2801 | camt.060 | Inbound | None (0) |
| OnAccountReportReceived | 2802 | camt.052 | Inbound | None (0) |
| OnAccountStatementReceived | 2803 | camt.053 | Inbound | None (0) |