Receive Npp Payment Return Webhook
code examples curl request post \\ \ url https //api mpay com au/nppreturneventwebhook target url \\ \ header 'accept application/json' \\ \ header 'content type application/json' \\ \ header 'authorisation ' \\ \ header 'verification signature e+afaj2w69rawbsgn+rssnfm2iseblo0mxnx9qtoh2k5mst1ceepcrvszgljzoplel2ea/iylbfgzddxvrtcnlinohsxm/smimnjbt8sq30fbvsnmjlfdnrz6foikl3e3cu9b+m4ovl8hafpohb67irndnycncvbm10qhrioiak=' \\ \ header 'webhookid 1234567' \\ \ data raw '{ "transactionid" "884231701", "datetime" "2026 09 10t14 32 11", "amount" "150 00", "accountnumber" "300000123", "accountname" "acme pty ltd", "bsb" "802 985", "payid" "payments\@acme com au", "payidname" "acme payments", "remittername" "j smith", "sourcebsb" "062 000", "sourceaccountnumber" "12345678", "sourceaccountname" "john a smith", "paymentdescription" "invoice 10023", "endtoendid" "e2e 2026 0000123", "creditorreferenceinformation" "rf18539007547034", "reconciliationrulereference" "rule acme 001", "categorypurposecode" "sala", "ultimatecreditorname" "acme holdings pty ltd", "usinumber" "12345678901spn", "usicreditorscheme" "usi", "ledgeraccountnumber" "4210000012345678", "ledgeruniquereference" "acme ledger 0007", "receiptnumber" 8842317, "refunddetails" { "inboundamount" "150 00", "refundamount" "150 00", "refundid" "991122334" } }'var myheaders = new headers(); myheaders append("accept", "application/json"); myheaders append("content type", "application/json"); myheaders append("authorisation", " "); myheaders append("verification signature", "e+afaj2w69rawbsgn+rssnfm2iseblo0mxnx9qtoh2k5mst1ceepcrvszgljzoplel2ea/iylbfgzddxvrtcnlinohsxm/smimnjbt8sq30fbvsnmjlfdnrz6foikl3e3cu9b+m4ovl8hafpohb67irndnycncvbm10qhrioiak="); myheaders append("webhookid", "1234567"); var raw = json stringify({ "transactionid" "884231701", "datetime" "2026 09 10t14 32 11", "amount" "150 00", "accountnumber" "300000123", "accountname" "acme pty ltd", "bsb" "802 985", "payid" "payments\@acme com au", "payidname" "acme payments", "remittername" "j smith", "sourcebsb" "062 000", "sourceaccountnumber" "12345678", "sourceaccountname" "john a smith", "paymentdescription" "invoice 10023", "endtoendid" "e2e 2026 0000123", "creditorreferenceinformation" "rf18539007547034", "reconciliationrulereference" "rule acme 001", "categorypurposecode" "sala", "ultimatecreditorname" "acme holdings pty ltd", "usinumber" "12345678901spn", "usicreditorscheme" "usi", "ledgeraccountnumber" "4210000012345678", "ledgeruniquereference" "acme ledger 0007", "receiptnumber" 8842317, "refunddetails" { "inboundamount" "150 00", "refundamount" "150 00", "refundid" "991122334" } }); var requestoptions = { method 'post', headers myheaders, body raw, redirect 'follow' }; fetch("https //api mpay com au/nppreturneventwebhook target url", requestoptions) then(response => response text()) then(result => console log(result)) catch(error => console log('error', error));require "uri" require "json" require "net/http" url = uri("https //api mpay com au/nppreturneventwebhook target url") https = net http new(url host, url port) https use ssl = true request = net http post new(url) request\["accept"] = "application/json" request\["content type"] = "application/json" request\["authorisation"] = " " request\["verification signature"] = "e+afaj2w69rawbsgn+rssnfm2iseblo0mxnx9qtoh2k5mst1ceepcrvszgljzoplel2ea/iylbfgzddxvrtcnlinohsxm/smimnjbt8sq30fbvsnmjlfdnrz6foikl3e3cu9b+m4ovl8hafpohb67irndnycncvbm10qhrioiak=" request\["webhookid"] = "1234567" request body = json dump({ "transactionid" "884231701", "datetime" "2026 09 10t14 32 11", "amount" "150 00", "accountnumber" "300000123", "accountname" "acme pty ltd", "bsb" "802 985", "payid" "payments\@acme com au", "payidname" "acme payments", "remittername" "j smith", "sourcebsb" "062 000", "sourceaccountnumber" "12345678", "sourceaccountname" "john a smith", "paymentdescription" "invoice 10023", "endtoendid" "e2e 2026 0000123", "creditorreferenceinformation" "rf18539007547034", "reconciliationrulereference" "rule acme 001", "categorypurposecode" "sala", "ultimatecreditorname" "acme holdings pty ltd", "usinumber" "12345678901spn", "usicreditorscheme" "usi", "ledgeraccountnumber" "4210000012345678", "ledgeruniquereference" "acme ledger 0007", "receiptnumber" 8842317, "refunddetails" { "inboundamount" "150 00", "refundamount" "150 00", "refundid" "991122334" } }) response = https request(request) puts response read body import requests import json url = "https //api mpay com au/nppreturneventwebhook target url" payload = json dumps({ "transactionid" "884231701", "datetime" "2026 09 10t14 32 11", "amount" "150 00", "accountnumber" "300000123", "accountname" "acme pty ltd", "bsb" "802 985", "payid" "payments\@acme com au", "payidname" "acme payments", "remittername" "j smith", "sourcebsb" "062 000", "sourceaccountnumber" "12345678", "sourceaccountname" "john a smith", "paymentdescription" "invoice 10023", "endtoendid" "e2e 2026 0000123", "creditorreferenceinformation" "rf18539007547034", "reconciliationrulereference" "rule acme 001", "categorypurposecode" "sala", "ultimatecreditorname" "acme holdings pty ltd", "usinumber" "12345678901spn", "usicreditorscheme" "usi", "ledgeraccountnumber" "4210000012345678", "ledgeruniquereference" "acme ledger 0007", "receiptnumber" 8842317, "refunddetails" { "inboundamount" "150 00", "refundamount" "150 00", "refundid" "991122334" } }) headers = { 'accept' 'application/json', 'content type' 'application/json', 'authorisation' ' ', 'verification signature' 'e+afaj2w69rawbsgn+rssnfm2iseblo0mxnx9qtoh2k5mst1ceepcrvszgljzoplel2ea/iylbfgzddxvrtcnlinohsxm/smimnjbt8sq30fbvsnmjlfdnrz6foikl3e3cu9b+m4ovl8hafpohb67irndnycncvbm10qhrioiak=', 'webhookid' '1234567' } response = requests request("post", url, headers=headers, data=payload) print(response text) responses // success the notification passed validation and your endpoint has accepted responsibility for it return this as soon as the payload is persisted — do not wait for downstream processing monoova treats any 2xx as a successful delivery and will not retry { "status" "received", "webhookid" 1234567, "receivedat" "2026 09 10t14 32 12" }// bad request the notification could not be parsed, or a field failed your validation monoova will not retry a notification that is rejected with a 400, so return it only for a genuinely malformed payload — never for a transient fault on your side { "status" "rejected", "errorcode" "invalid payload", "errormessage" "field 'amount' is not a valid decimal value ", "webhookid" 1234567, "receivedat" "2026 09 10t14 32 12" }// unauthorised the authorisation header was missing or did not match the value registered on the subscription, or the verification signature header failed sha256 verification against the monoova public key return this without processing the payload { "status" "rejected", "errorcode" "invalid payload", "errormessage" "field 'amount' is not a valid decimal value ", "webhookid" 1234567, "receivedat" "2026 09 10t14 32 12" }// internal server error your endpoint accepted the notification but could not process it because of a fault on your side monoova retries a notification that fails with a 5xx, so return this — rather than a 400 — whenever the failure is transient and a redelivery could succeed { "status" "rejected", "errorcode" "invalid payload", "errormessage" "field 'amount' is not a valid decimal value ", "webhookid" 1234567, "receivedat" "2026 09 10t14 32 12" }