Notify the payment facilitator about a successful credit
Tell the payment facilitator that its acquiring bank completed the merchant credit, without moving money or creating another credit.
Credit Notification tells the payment facilitator that its acquiring bank has successfully collected money for a merchant. The payment facilitator uses the notification to keep its own record of the successful credit. The receiving institution acknowledges the notification; receiving it does not move money or create another credit to the merchant.
Before you begin
- Implement Secure every request and response.
- Follow How to Encrypt and Decrypt Data for the request envelope and message-opening sequence.
- Follow Format identifiers and date-times.
- Read Understand common payment fields.
- Read Understand code values.
- Support lookup by message ID, instruction ID, end-to-end ID, and clearing-system reference.
- Confirm that the notification reports a completed
BOOKcredit.
Endpoint and headers
Create an HTTPS POST endpoint and provide its URL to Blinc. For example:
https://sandbox.examplebank.com/blinc/credit-notificationsEvery request must contain Content-Type: application/json, Accept: application/json, x-timestamp, and x-signature. Every response, including a business rejection, must contain Content-Type: application/json, x-timestamp, and x-signature. See Secure every request and response for what each header protects and how to validate it. Decrypt before verifying x-signature.
Request business message
{
"GrpHdr": {
"MsgId": "00000120260817130000000000000000040",
"CreDtTm": "2026-08-17T13:00:00.000Z"
},
"Ntfctn": {
"Acct": {
"Id": {
"Othr": {
"Id": "0123456789",
"SchmeNm": {
"Cd": "NUBAN"
}
}
},
"Ccy": "NGN",
"Nm": "Ada Okafor"
},
"Ntry": {
"Amt": {
"Amt": 250000,
"Ccy": "NGN"
},
"CdtDbtInd": "CRDT",
"Sts": "BOOK",
"BookgDt": {
"Dt": "2026-08-17T13:00:00.000Z"
},
"ValDt": {
"Dt": "2026-08-17T13:00:00.000Z"
},
"NtryDtls": {
"TxDtls": {
"Refs": {
"EndToEndId": "E2E-0000000040",
"InstrId": "INSTR-0000000040",
"ClrSysRef": "CLR-0000000040"
},
"RltdPties": {
"Dbtr": {
"Nm": "Example Store",
"Id": {
"Othr": {
"Id": "CREDITOR-001",
"SchmeNm": {
"Cd": "BLINC"
}
}
}
},
"DbtrAcct": {
"Id": {
"IBAN": null,
"Othr": {
"Id": "0987654321",
"SchmeNm": {
"Cd": "NUBAN"
}
}
}
}
},
"RmtInf": {
"Ustrd": "Merchant payment credit notification",
"Strd": {
"RfrdDocAmt": {
"DuePyblAmt": {
"Amt": 250000,
"Ccy": "NGN"
},
"AdjstmntAmtAndRsn": {
"Amt": {
"Amt": 1250,
"Ccy": "NGN"
},
"Rsn": "PAYMENT_FACILITATOR",
"AddtlInf": "Payment facilitator share of the transaction fee.",
"TttlCharges": { "Amt": 2500, "Ccy": "NGN" }
},
"RmtdAmt": {
"Amt": 247500,
"Ccy": "NGN"
}
},
"RfrdDocInf": {
"Nb": null
}
}
}
}
}
}
},
"SplmtryData": {
"PlcAndNm": "AdditionalDetails",
"Envlp": {
"PaymentMethod": "STATICQR",
"Merchant": {
"TerminalId": "TERM-0001",
"MerchantName": "Example Store",
"MerchantCategoryCode": "5411",
"TerminalLocation": null,
"TerminalReference": null,
"TerminalTimestamp": null
}
}
}
}Receive and acknowledge the credit report
- Decrypt the body, verify the header signature, then validate the timestamp and replay state.
- Validate the message ID and all transaction references.
- Confirm the notified account exists, is eligible, and uses the stated currency.
- Require
CdtDbtIndto beCRDT; this operation does not report debits. - Confirm that the reported credit has
BOOKstatus. - Match amount, currency, booking/value dates, debtor, remittance, payment method, and merchant data with the referenced transaction.
- Save the acknowledgement with the notification references. If Blinc sends the same notification again, send the same acknowledgement without treating it as a new credit.
- Sign and encrypt the acknowledgement.
Request field reference
| JSON path | Type / required | Meaning and source | Construction, validation, and relationship |
|---|---|---|---|
GrpHdr | Object / Required | Header created by Blinc for this notification. | Must contain MsgId and CreDtTm. |
GrpHdr.MsgId | 35-digit text / Required | Unique notification message ID. | Follow the documented structure; reject reuse with different plaintext. |
GrpHdr.CreDtTm | UTC date-time / Required | Time Blinc created the notification. | Must use milliseconds and Z and agree with MsgId. |
Ntfctn | Object / Required | The complete credit notification. | Contains the beneficiary account and one entry. |
Ntfctn.Acct | Object / Required | Account that received or will receive the credit. | ID, currency, and name must refer to one institution account. |
Ntfctn.Acct.Id | Object / Required | Account-identifier container. | Use either the contracted Othr structure or another explicitly agreed form. |
Ntfctn.Acct.Id.Othr | Object / Required | Generic account-number container. | Must contain Id and SchmeNm. |
Ntfctn.Acct.Id.Othr.Id | Text / Required | Beneficiary account number. | Sensitive; validate format, existence, ownership, status, and eligibility. |
Ntfctn.Acct.Id.Othr.SchmeNm | Object / Required | Container naming the account-number scheme. | Must contain Cd. |
Ntfctn.Acct.Id.Othr.SchmeNm.Cd | Text / Required | Explains the account-number format; NUBAN means Nigerian Uniform Bank Account Number. | Validate Id using this scheme. |
Ntfctn.Acct.Ccy | Three-letter text / Required | Currency of the account. | Must be supported and equal Ntry.Amt.Ccy. |
Ntfctn.Acct.Nm | Text / Required | Human-readable beneficiary/account name. | Use for display and cross-checking; the account ID is authoritative. |
Ntfctn.Ntry | Object / Required | The credit entry being reported. | Contains amount, direction, state, dates, and transaction details. |
Ntfctn.Ntry.Amt | Object / Required | Amount of the credit entry. | Must contain Amt and Ccy. |
Ntfctn.Ntry.Amt.Amt | Decimal / Required | Credit amount in normal currency units. | Must be greater than zero and match the referenced transaction. |
Ntfctn.Ntry.Amt.Ccy | Three-letter text / Required | Credit currency, such as NGN. | Must equal Acct.Ccy and the referenced transaction currency. |
Ntfctn.Ntry.CdtDbtInd | Text / Required | Blinc sends whether the entry adds or removes money. CRDT adds money; DBIT removes money. | Credit Notification requires exactly CRDT. Reject DBIT and never infer a missing value. |
Ntfctn.Ntry.Sts | Text / Required | Blinc sends the outcome of the credit. BOOK means the credit was completed successfully. | Credit Notification requires exactly BOOK; reject any other status. |
Ntfctn.Ntry.BookgDt | Object / Required | Container for the booking time. | Must contain Dt. |
Ntfctn.Ntry.BookgDt.Dt | UTC date-time / Required | When the credit was completed. | Use canonical UTC and compare it with the reported credit details. |
Ntfctn.Ntry.ValDt | Object / Required | Container for the value time. | Must contain Dt. |
Ntfctn.Ntry.ValDt.Dt | UTC date-time / Required | When the completed credit took effect. | Use canonical UTC; it can differ from the completion time. |
Ntfctn.Ntry.NtryDtls | Object / Required | Entry-detail container. | Must contain TxDtls. |
...NtryDtls.TxDtls | Object / Required | Details of the transaction that produced the entry. | Must contain references, related parties, and remittance information. |
...TxDtls.Refs | Object / Required | Groups trace identifiers for the same transaction. | All children stay unchanged when Blinc delivers the same notification again. |
...Refs.EndToEndId | Text / Required | Business trace ID across participating systems. | Treat as opaque and match the referenced payment. |
...Refs.InstrId | Text / Required | Original payment instruction ID. | Treat as opaque and do not reuse for another instruction. |
...Refs.ClrSysRef | Text / Required | Clearing-system reference. | Store for reconciliation and support. |
...TxDtls.RltdPties | Object / Required | Parties related to the credit. | Must contain debtor and debtor account. |
...RltdPties.Dbtr | Object / Required | Person or organisation whose account supplied the funds. | Name and optional ID must match the referenced transaction. |
...RltdPties.Dbtr.Nm | Text / Required | Human-readable debtor name. | Use for display/audit; do not use the name alone for identity. |
...RltdPties.Dbtr.Id | Object or null / Optional | Structured debtor identity. | When supplied, validate every child and treat the value as sensitive. |
...RltdPties.Dbtr.Id.Othr.Id | Text / Conditional | Debtor identity value. | Required when Id is supplied; validate using its scheme. |
...RltdPties.Dbtr.Id.Othr.SchmeNm.Cd | Text / Conditional | Scheme explaining the debtor ID, such as BVN. | Required with the debtor ID. |
...RltdPties.DbtrAcct | Object / Required | Debtor account container. | Must contain an account ID. |
...DbtrAcct.Id.Othr.Id | Text / Required | Account from which the funds originated. | Sensitive; cross-check against the referenced transaction. |
...DbtrAcct.Id.Othr.SchmeNm.Cd | Text / Required | Scheme explaining the debtor account number. | Validate the account format. |
...TxDtls.RmtInf | Object / Required | Statement narration and optional invoice breakdown. | Must contain Ustrd; Strd is optional. |
...RmtInf.Ustrd | Text / Required | Human-readable payment narration. | Apply length/content rules and preserve it for statements. |
...RmtInf.Strd | Object / Required | Structured invoice amounts and the payment-facilitator fee share. | Due amount minus the adjustment must reconcile with the remitted amount. |
...Strd.RfrdDocAmt.DuePyblAmt | Amount object / Required | Gross amount due on the referenced document. | Required whenever a notification is sent. |
...Strd.RfrdDocAmt.AdjstmntAmtAndRsn | Object / Required | Carries FeeBreakdown.PaymentFacilitatorShare and the total transaction charges. | Rsn must equal PAYMENT_FACILITATOR; Amt.Ccy and TttlCharges.Ccy must match Ntry.Amt.Ccy. A zero payment-facilitator share must still be sent explicitly, not omitted. See Remittance adjustment reasons. |
...Strd.RfrdDocAmt.RmtdAmt | Amount object / Required | Amount remitted after the total charges are deducted. | Amt must equal DuePyblAmt.Amt - AdjstmntAmtAndRsn.TttlCharges.Amt; in this example, NGN 250,000 - NGN 2,500 = NGN 247,500. Ccy must match DuePyblAmt.Ccy. |
...Strd.RfrdDocInf.Nb | Text or null / Optional | Invoice or document number. | Treat as opaque and preserve exactly. |
SplmtryData | Object / Required | Additional payment-method and merchant context. | Must contain PlcAndNm and Envlp. |
SplmtryData.PlcAndNm | Text / Required | Label for this extra-data block. | Use AdditionalDetails. |
SplmtryData.Envlp | Object / Required | Container for payment method and merchant. | Validate both children. |
...Envlp.PaymentMethod | Text / Required | Blinc sends how the payment started: STATICQR, DYNAMICQR, TAP2PAY, P2P, or the explicitly allowed DEFAULT fallback. | The canonical Credit Notification example uses STATICQR. Validate consistency with merchant and terminal fields; do not assume it when missing. |
...Envlp.Merchant | Object / Required | Merchant context connected to the credit. | All required fields must describe the same merchant and terminal event. |
...Merchant.TerminalId | Text / Required | Identifier for the terminal or channel endpoint. | Stable for the event; do not use as an authentication key. |
...Merchant.MerchantName | Text / Required | Human-readable merchant name. | Use for display/reconciliation. |
...Merchant.MerchantCategoryCode | Text / Required | Merchant category code describing the business type. | Validate the agreed code format. |
...Merchant.TerminalLocation | Text or null / Optional | Location associated with the terminal. | Treat location as sensitive and validate format when supplied. |
...Merchant.TerminalReference | Text or null / Optional | Terminal's own transaction reference. | Preserve it when Blinc delivers the same notification again and use it for reconciliation when present. |
...Merchant.TerminalTimestamp | UTC date-time text or null / Optional | Time recorded by the terminal. | Use canonical UTC and ensure it is plausible relative to booking time. |
Protected acknowledgement
Return a signed and encrypted acknowledgement whose readable plaintext is:
{
"GrpHdr": {
"MsgId": "00000120260816103501000000000000104",
"CreDtTm": "2026-08-16T10:35:01.000Z",
"OrgnlMsgId": "12345620260816103500000000000000005",
"OrgnlMsgNmId": "camt.054.001.11"
},
"NtfctnSts": {
"OrgnlInstrId": "DD-INSTR-0001",
"OrgnlEndToEndId": "DD-E2E-0001",
"OrgnlClrSysRef": "DD-CLR-0001",
"Sts": "ACSC",
"StsRsnInf": null
}
}GrpHdr.MsgId is a new institution-generated response ID. The other header fields identify when the response was created and which notification it answers. NtfctnSts groups the acknowledgement result; its three Orgnl... fields copy the request references. Sts is ACSC when recorded or RJCT when rejected. For RJCT, populate StsRsnInf.Orgtr.Nm, StsRsnInf.Rsn.Cd, and StsRsnInf.AddtlInf with the decision owner, stable reason, and corrective action.
| Response path | Type / required | Meaning and validation |
|---|---|---|
GrpHdr | Object / Required | Header created by the institution for this acknowledgement. |
GrpHdr.MsgId | 35-digit text / Required | New institution response ID; do not reuse the request ID. |
GrpHdr.CreDtTm | UTC date-time / Required | Canonical UTC time the acknowledgement was created. |
GrpHdr.OrgnlMsgId | Text / Required | Exact copy of the notification GrpHdr.MsgId. |
GrpHdr.OrgnlMsgNmId | Text / Required | Message family for Credit Notification: camt.054.001.08. |
NtfctnSts | Object / Required | Business acknowledgement for the notification. |
NtfctnSts.OrgnlInstrId | Text / Required | Copy of request Refs.InstrId. |
NtfctnSts.OrgnlEndToEndId | Text / Required | Copy of request Refs.EndToEndId. |
NtfctnSts.OrgnlClrSysRef | Text / Required | Copy of request Refs.ClrSysRef. |
NtfctnSts.Sts | Text / Required | The institution returns ACSC only after recording the notification once, or RJCT when it was not recorded. There is no other default response value. |
NtfctnSts.StsRsnInf | Object or null / Conditional | null on success; required on rejection. |
...StsRsnInf.Orgtr.Nm | Text / Conditional | Institution/component that made the rejection decision. |
...StsRsnInf.Rsn.Cd | Text / Conditional | Stable reason code that explains why the institution rejected the report. |
...StsRsnInf.AddtlInf | Text / Conditional | Simple explanation of the cause and correction. |
Fee and settlement
DuePyblAmt is the gross amount. TttlCharges is the total fee paid by the merchant, while the payment-facilitator amount in AdjstmntAmtAndRsn.Amt identifies the payment facilitator's share of that fee. RmtdAmt is the amount settled to the beneficiary after the total fee is deducted: DuePyblAmt - TttlCharges. In this example, NGN 250,000 - NGN 2,500 = NGN 247,500.
Common mistakes
| Mistake | Correct behaviour |
|---|---|
| Crediting the beneficiary when receiving a notification | Treat the message as information about a credit that has already completed; the notification itself does not move money or create a credit. |
Treating a non-BOOK status as a completed credit | Reject the notification; Credit Notification supports only BOOK. |
| Treating a repeated notification as a new credit | Send the earlier acknowledgement for the same identifiers and message. |
| Ignoring booking and value dates | Keep both dates with the notification; they describe different points in the credit timeline. |
Test before certification
- A
BOOKnotification is acknowledged as a successful credit report. - The same notification delivered again receives the same acknowledgement.
- Reused IDs with changed amount, account, state, or references reject.
DBIT, unsupported status, zero amount, currency mismatch, and unknown account reject.- Invalid encryption, signature, timestamp, or replay state fails before recording the notification.
Next
Learn how to return clear errors and handle repeated deliveries in Return clear errors and handle repeated deliveries.
Updated 3 days ago