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

Endpoint and headers

Create an HTTPS POST endpoint and provide its URL to Blinc. For example:

https://sandbox.examplebank.com/blinc/credit-notifications

Every 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

  1. Decrypt the body, verify the header signature, then validate the timestamp and replay state.
  2. Validate the message ID and all transaction references.
  3. Confirm the notified account exists, is eligible, and uses the stated currency.
  4. Require CdtDbtInd to be CRDT; this operation does not report debits.
  5. Confirm that the reported credit has BOOK status.
  6. Match amount, currency, booking/value dates, debtor, remittance, payment method, and merchant data with the referenced transaction.
  7. 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.
  8. Sign and encrypt the acknowledgement.

Request field reference

JSON pathType / requiredMeaning and sourceConstruction, validation, and relationship
GrpHdrObject / RequiredHeader created by Blinc for this notification.Must contain MsgId and CreDtTm.
GrpHdr.MsgId35-digit text / RequiredUnique notification message ID.Follow the documented structure; reject reuse with different plaintext.
GrpHdr.CreDtTmUTC date-time / RequiredTime Blinc created the notification.Must use milliseconds and Z and agree with MsgId.
NtfctnObject / RequiredThe complete credit notification.Contains the beneficiary account and one entry.
Ntfctn.AcctObject / RequiredAccount that received or will receive the credit.ID, currency, and name must refer to one institution account.
Ntfctn.Acct.IdObject / RequiredAccount-identifier container.Use either the contracted Othr structure or another explicitly agreed form.
Ntfctn.Acct.Id.OthrObject / RequiredGeneric account-number container.Must contain Id and SchmeNm.
Ntfctn.Acct.Id.Othr.IdText / RequiredBeneficiary account number.Sensitive; validate format, existence, ownership, status, and eligibility.
Ntfctn.Acct.Id.Othr.SchmeNmObject / RequiredContainer naming the account-number scheme.Must contain Cd.
Ntfctn.Acct.Id.Othr.SchmeNm.CdText / RequiredExplains the account-number format; NUBAN means Nigerian Uniform Bank Account Number.Validate Id using this scheme.
Ntfctn.Acct.CcyThree-letter text / RequiredCurrency of the account.Must be supported and equal Ntry.Amt.Ccy.
Ntfctn.Acct.NmText / RequiredHuman-readable beneficiary/account name.Use for display and cross-checking; the account ID is authoritative.
Ntfctn.NtryObject / RequiredThe credit entry being reported.Contains amount, direction, state, dates, and transaction details.
Ntfctn.Ntry.AmtObject / RequiredAmount of the credit entry.Must contain Amt and Ccy.
Ntfctn.Ntry.Amt.AmtDecimal / RequiredCredit amount in normal currency units.Must be greater than zero and match the referenced transaction.
Ntfctn.Ntry.Amt.CcyThree-letter text / RequiredCredit currency, such as NGN.Must equal Acct.Ccy and the referenced transaction currency.
Ntfctn.Ntry.CdtDbtIndText / RequiredBlinc 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.StsText / RequiredBlinc sends the outcome of the credit. BOOK means the credit was completed successfully.Credit Notification requires exactly BOOK; reject any other status.
Ntfctn.Ntry.BookgDtObject / RequiredContainer for the booking time.Must contain Dt.
Ntfctn.Ntry.BookgDt.DtUTC date-time / RequiredWhen the credit was completed.Use canonical UTC and compare it with the reported credit details.
Ntfctn.Ntry.ValDtObject / RequiredContainer for the value time.Must contain Dt.
Ntfctn.Ntry.ValDt.DtUTC date-time / RequiredWhen the completed credit took effect.Use canonical UTC; it can differ from the completion time.
Ntfctn.Ntry.NtryDtlsObject / RequiredEntry-detail container.Must contain TxDtls.
...NtryDtls.TxDtlsObject / RequiredDetails of the transaction that produced the entry.Must contain references, related parties, and remittance information.
...TxDtls.RefsObject / RequiredGroups trace identifiers for the same transaction.All children stay unchanged when Blinc delivers the same notification again.
...Refs.EndToEndIdText / RequiredBusiness trace ID across participating systems.Treat as opaque and match the referenced payment.
...Refs.InstrIdText / RequiredOriginal payment instruction ID.Treat as opaque and do not reuse for another instruction.
...Refs.ClrSysRefText / RequiredClearing-system reference.Store for reconciliation and support.
...TxDtls.RltdPtiesObject / RequiredParties related to the credit.Must contain debtor and debtor account.
...RltdPties.DbtrObject / RequiredPerson or organisation whose account supplied the funds.Name and optional ID must match the referenced transaction.
...RltdPties.Dbtr.NmText / RequiredHuman-readable debtor name.Use for display/audit; do not use the name alone for identity.
...RltdPties.Dbtr.IdObject or null / OptionalStructured debtor identity.When supplied, validate every child and treat the value as sensitive.
...RltdPties.Dbtr.Id.Othr.IdText / ConditionalDebtor identity value.Required when Id is supplied; validate using its scheme.
...RltdPties.Dbtr.Id.Othr.SchmeNm.CdText / ConditionalScheme explaining the debtor ID, such as BVN.Required with the debtor ID.
...RltdPties.DbtrAcctObject / RequiredDebtor account container.Must contain an account ID.
...DbtrAcct.Id.Othr.IdText / RequiredAccount from which the funds originated.Sensitive; cross-check against the referenced transaction.
...DbtrAcct.Id.Othr.SchmeNm.CdText / RequiredScheme explaining the debtor account number.Validate the account format.
...TxDtls.RmtInfObject / RequiredStatement narration and optional invoice breakdown.Must contain Ustrd; Strd is optional.
...RmtInf.UstrdText / RequiredHuman-readable payment narration.Apply length/content rules and preserve it for statements.
...RmtInf.StrdObject / RequiredStructured invoice amounts and the payment-facilitator fee share.Due amount minus the adjustment must reconcile with the remitted amount.
...Strd.RfrdDocAmt.DuePyblAmtAmount object / RequiredGross amount due on the referenced document.Required whenever a notification is sent.
...Strd.RfrdDocAmt.AdjstmntAmtAndRsnObject / RequiredCarries 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.RmtdAmtAmount object / RequiredAmount 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.NbText or null / OptionalInvoice or document number.Treat as opaque and preserve exactly.
SplmtryDataObject / RequiredAdditional payment-method and merchant context.Must contain PlcAndNm and Envlp.
SplmtryData.PlcAndNmText / RequiredLabel for this extra-data block.Use AdditionalDetails.
SplmtryData.EnvlpObject / RequiredContainer for payment method and merchant.Validate both children.
...Envlp.PaymentMethodText / RequiredBlinc 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.MerchantObject / RequiredMerchant context connected to the credit.All required fields must describe the same merchant and terminal event.
...Merchant.TerminalIdText / RequiredIdentifier for the terminal or channel endpoint.Stable for the event; do not use as an authentication key.
...Merchant.MerchantNameText / RequiredHuman-readable merchant name.Use for display/reconciliation.
...Merchant.MerchantCategoryCodeText / RequiredMerchant category code describing the business type.Validate the agreed code format.
...Merchant.TerminalLocationText or null / OptionalLocation associated with the terminal.Treat location as sensitive and validate format when supplied.
...Merchant.TerminalReferenceText or null / OptionalTerminal's own transaction reference.Preserve it when Blinc delivers the same notification again and use it for reconciliation when present.
...Merchant.TerminalTimestampUTC date-time text or null / OptionalTime 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 pathType / requiredMeaning and validation
GrpHdrObject / RequiredHeader created by the institution for this acknowledgement.
GrpHdr.MsgId35-digit text / RequiredNew institution response ID; do not reuse the request ID.
GrpHdr.CreDtTmUTC date-time / RequiredCanonical UTC time the acknowledgement was created.
GrpHdr.OrgnlMsgIdText / RequiredExact copy of the notification GrpHdr.MsgId.
GrpHdr.OrgnlMsgNmIdText / RequiredMessage family for Credit Notification: camt.054.001.08.
NtfctnStsObject / RequiredBusiness acknowledgement for the notification.
NtfctnSts.OrgnlInstrIdText / RequiredCopy of request Refs.InstrId.
NtfctnSts.OrgnlEndToEndIdText / RequiredCopy of request Refs.EndToEndId.
NtfctnSts.OrgnlClrSysRefText / RequiredCopy of request Refs.ClrSysRef.
NtfctnSts.StsText / RequiredThe institution returns ACSC only after recording the notification once, or RJCT when it was not recorded. There is no other default response value.
NtfctnSts.StsRsnInfObject or null / Conditionalnull on success; required on rejection.
...StsRsnInf.Orgtr.NmText / ConditionalInstitution/component that made the rejection decision.
...StsRsnInf.Rsn.CdText / ConditionalStable reason code that explains why the institution rejected the report.
...StsRsnInf.AddtlInfText / ConditionalSimple 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

MistakeCorrect behaviour
Crediting the beneficiary when receiving a notificationTreat 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 creditReject the notification; Credit Notification supports only BOOK.
Treating a repeated notification as a new creditSend the earlier acknowledgement for the same identifiers and message.
Ignoring booking and value datesKeep both dates with the notification; they describe different points in the credit timeline.

Test before certification

  • A BOOK notification 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.


Did this page help you?