RTP Guide
This page explains how MEMEH handles RTP status updates and what partner applications should consume. It is an implementation guide (simplified). The RTP specification remains the canonical reference.
Lifecycle
The lifecycle is intentionally small. These are the outcomes partners need to implement reliably.
| ISO code | Business label | Meaning | Merchant action | Terminal |
|---|---|---|---|---|
| RCVD | RECEIVED | Request to Pay received/acknowledged by the ecosystem. Awaiting payer action or completion. | Show Pending. Do not fulfil. | No |
| ACSP | PAID | Payment completed and confirmed. This is the fulfilment confirmation. | Fulfil / deliver. | Yes |
| RJCT | REJECTED | Request was rejected (payer declined or validation failed). Include a reason code. | Stop. Do not fulfil. Show reason. | Yes |
| CANC | CANCELLED | Request was cancelled. Reason is optional depending on flow. | Stop. Mark cancelled. | Yes |
Status codes
Bank/adapter systems typically set TxSts and often mirror it in GrpSts. MEMEH stores the status code and maps it to a partner-friendly status.
Acknowledged; awaiting payer decision or completion. Not safe to fulfil.
Completed. This is the fulfilment confirmation used by merchant applications.
Final negative outcome. Include a reason code wherever possible.
Final termination. Reason optional depending on flow.
Reason codes
Negative outcomes can include a reason via StsRsnInf → Rsn → Prtry plus optional AddtlInf. MEMEH forwards the reason to partners as reason_code and may include a safe message.
MEMEH mapping
ISO-aligned input from bank/adapter is stored and normalized. Partners receive a stable contract.
| TxSts / GrpSts | Partner status | What it means |
|---|---|---|
| RCVD | RECEIVED | Acknowledged; pending payer action. |
| ACSP | PAID | Completed; fulfilment confirmation. |
| RJCT | REJECTED | Rejected; include reason code. |
| CANC | CANCELLED | Cancelled; terminated. |
{
"rtp_id": "TXN-123",
"status": "PAID|RECEIVED|REJECTED|CANCELLED",
"status_code": "ACSP|RCVD|RJCT|CANC",
"reason_code": "DCBP|LTXD|...|null",
"message": "safe message",
"event_time": "ISO-8601"
}
{
"OrgnlGrpInfAndSts": { "GrpSts": "RJCT" },
"OrgnlPmtInfAndSts": {
"TxInfAndSts": {
"OrgnlEndToEndId": "TXN-123",
"OrgnlUETR": "ef73139a-2efb-4279-aa27-5d9b350121cb",
"TxSts": "RJCT",
"StsRsnInf": {
"Rsn": { "Prtry": "DCBP" },
"AddtlInf": "Declined by payer"
}
}
}
}
{
"rtp_id": "TXN-123",
"status": "PAID",
"status_code": "ACSP",
"reason_code": null,
"message": "Payment confirmed (paid). You may fulfil/deliver.",
"event_time": "2026-03-28T05:42:41Z"
}
Examples
Partners should implement these three cases and treat them as contract tests.
{
"rtp_id": "TXN-123",
"status": "RECEIVED",
"status_code": "RCVD",
"reason_code": null,
"message": "Request received and acknowledged. Awaiting payer action.",
"event_time": "2026-03-28T05:41:02Z"
}
{
"rtp_id": "TXN-123",
"status": "PAID",
"status_code": "ACSP",
"reason_code": null,
"message": "Payment confirmed (paid). You may fulfil/deliver.",
"event_time": "2026-03-28T05:42:41Z"
}
{
"rtp_id": "TXN-123",
"status": "REJECTED",
"status_code": "RJCT",
"reason_code": "DCBP",
"message": "Request to Pay rejected. Do not fulfil.",
"event_time": "2026-03-28T05:44:02Z"
}
- • Treat ACSP as the only fulfilment confirmation.
- • Render RCVD as “Pending”. Do not fulfil.
- • For RJCT, store and display the reason code (and safe message).
- • Make status updates idempotent per RTP identifier and event time.
Glossary
ISO 20022 field meanings used in RTP status updates. This glossary is shared across the portal for consistency.