Originating RTP Requests for Payment (RfPs)

In this tutorial we explore originating a Request for Payment (RfP) from a master account. We will also register relevant webhooks to receive status updates on our payment. Before starting this tutorial, please make sure you have the following:

  • API credentials
  • Partner ID
  • Master Account Number

This tutorial also assumes you have already opened a master account. If not, please complete the Opening an Account tutorial prior to completing this tutorial.

Get an Access Token

Before calling the COS API you must first request an access token. Once the access token has been obtained it is recommended that it is cached for the lifetime of the token. If the API starts to return a 401 response code, it is likely that your token has expired and you need to obtain a new one. More details can be found here.

Register Webhooks

Webhooks allow us to receive notifications when certain events occur within COS. After we originate our RfP in the step below, we will want to stay informed in order to track the payment through its lifecycle. For that you will need to call the webhook registration endpoint and indicate you wish to receive certain events.

Rtp.Payment.Sent will notify you in the event your payment has been sent over the RTP network.

POST /webhooks/v1/registrations
{
  "partnerId": "00000000-0000-0000-0000-000000000000",
  "eventName": "Rtp.Payment.Sent",
  "registrationType": "Push", 
  "callbackUrl": "https://cos.yourcompanysite.com/rtp-events"
}

Rtp.Payment.Received will notify you in the event a credit transfer is received as a response to your outbound RFP.

POST /webhooks/v1/registrations
{
  "partnerId": "00000000-0000-0000-0000-000000000000",
  "eventName": "Rtp.Payment.Received",
  "registrationType": "Push", 
  "callbackUrl": "https://cos.yourcompanysite.com/rtp-events"
}

To learn more about webhook registrations click here. For a full listing of available RTP webhook events click here.

Before We Begin...

The Request for Payment (RfP) message is sent by the Creditor (sending party) to the Debtor (receiving party) through their respective FIs. This message is used to request the initiation of a Credit Transfer message (a credit payment) from the party that receives the message. If the RfP is accepted by the debtor, then the bank sending the credit transfer is referred to as the debtor FI while the bank receiving the credit transfer is referred to as the creditor FI.

After receiving an RfP, the debtor FI can do one of the following:

  • The debtor FI sends a credit transfer
  • The debtor FI sends an RfP response indicating that the request has been rejected by the debtor
  • The debtor FI sends an RfP response indicating that a credit transfer will be sent
  • The debtor FI ignores the RfP

Requested Execution Date – Defines when the Credit Transfer should be sent, and can not be after the Expiry Date.
Expiry Date – Defines when the RfP expires.

🚧

Date and Time Handling

Requested Execution Date and Expiry Dates are handled as Eastern Time.

Time can be set on the Requested Execution Date and Expiry Date. However, if only the date is provided then the time will default to 12:00AM Eastern Time.

Originating a Request for Payment (RFP)

In this scenario, we'll be simulating a person-to-person (P2P) transaction where John Wick is requesting $175.00 from Peter Griffin. John Wick is the creditor because he is the receiver of the funds when Peter Griffin, the debtor, responds to John's RfP with a credit transfer.

POST /v1/payments/payment-request
{
  "accountNumber": "2686062254",
  "amount": 17500,
  "discount": 0,
  "debtor": {
    "routingNumber": "011000138",
    "accountNumber": "456789000",
    "name": "Peter Griffin",
    "addressStreetName": "Spooner St",
    "addressBuildingNumber": "33",
    "addressCity": "Quahog",
    "addressState": "RI",
    "addressPostalCode": "10025",
    "addressCountry": "US"
  },
  "requestedExecutionDate": "2021-08-17",
  "expiryDate": "2021-08-19"    
}

🚧

It is highly recommended that you include an idempotency key in your request header. This will provide duplicate protection in the event of a failure. Read more about idempotency keys here.

Here's a sample response body based on the above request:

{
    "id": "b2fd1c31-7a87-447e-9d9f-ad8600f5a822",
    "originalPaymentId": "b2fd1c31-7a87-447e-9d9f-ad8600f5a822",
    "referenceId": "R228OS497X04Y",
    "accountNumber": "2686062254",
    "amount": 17500,
    "direction": "Outbound",
    "status": "Created",
    "paymentType": "RequestForPayment",
    "source": "Api",
    "transactionAccountContext": "NotSubmitted",
    "debtor": {
        "routingNumber": "011000138",
        "accountNumber": "456789000",
        "name": "Peter Griffin",
        "addressStreetName": "Spooner St",
        "addressBuildingNumber": "33",
        "addressCity": "Quahog",
        "addressState": "RI",
        "addressPostalCode": "10025",
        "addressCountry": "US"
    },
    "creditor": {
        "routingNumber": "021214891",
        "accountNumber": "2686062254",
        "name": "John Wick",
        "addressStreetName": "110 West Ave",
        "addressCity": "Valhalla",
        "addressState": "NY",
        "addressPostalCode": "10504",
        "addressCountry": "US"
    },
    "network": {
        "businessMessageId": "B20210816021214273T1BHZK43644601467",
        "messageId": "M20210816021214273T1BHAQ17293122714",
        "createdAt": "2021-08-16T10:54:24.5348735-04:00",
        "numberOfTransactions": 1,
        "interbankSettlementAmount": 17500,
        "currency": "USD",
        "interbankSettlementDate": "2021-08-16",
        "settlementMethod": "CLRG",
        "clearingSystemCode": "TCH",
        "instructionId": "20210816021214273T1BP6MK22624348645",
        "endToEndId": "5bf3a9d6652549ae9d03ad8600f5a822",
        "fromParticipantId": "021214273T1",
        "toParticipantId": "990000001S1",
        "instructingRoutingNumber": "021214891",
        "instructedRoutingNumber": "011000138",
        "headerCreationDate": "2021-08-16T10:54:24.5348735-04:00",
        "messageCreationDateTime": "2021-08-16T10:54:24.5348735-04:00"
    },
    "serviceLevelCode": "SDVA",
    "localInstrumentProprietary": "STANDARD",
    "categoryPurpose": "CONSUMER",
    "currency": "USD",
    "chargeBearer": "SLEV",
    "paymentInfoId": "20210816021214273T1BP6MK22624348645",
    "reqExecutionDate": {
        "date": "2021-08-16T23:59:59-04:00",
        "dateType": "DtTm"
    },
    "expiryDate": {
        "date": "2021-08-18T23:59:59-04:00",
        "dateType": "DtTm"
    },
    "paymentConditions": {
        "amountModAllowed": false,
        "earlyPayAllowed": true,
        "acceptedAmount": 17500
    },
    "purpose": "NA",
    "wasRefunded": false,
    "wasPaid": false,
    "createdAt": "2021-08-16T10:54:24.5348735-04:00",
    "productId": "d3e6c8ce-3277-4cdd-bfa4-ad800131bd92",
    "partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
    "lastModifiedAt": "2021-08-16T10:54:24.5358734-04:00",
    "sendAttemptCount": 0,
    "discounts": [],
    "awaitingResponse": false
}

In the response header of every request is a Request-ID value. This is a unique identifier for your request and is useful when troubleshooting issues with our support team. It is recommended you log this identifier.

{
  "access-control-allow-credentials": "true",
  "access-control-allow-origin": "https://sandbox.crbcos.com",
  "cache-control": "no-cache",
  "content-length": "2234",
  "content-type": "application/json; charset=utf-8",
  "date": "Mon, 16 Aug 2021 14:54:24 GMT",
  "expires": "-1",
  "pragma": "no-cache",
  "request-id": "07ee7fc6-b83c-4666-9ba1-ad8600f5a81c",
  "server": "Microsoft-IIS/8.5",
  "x-aspnet-version": "4.0.30319",
  "x-frame-options": "SAMEORIGIN",
  "x-powered-by": "ASP.NET"
}

Once the payment is processed and released to the RTP network, the Rtp.Payment.Sent webhook should trigger. This event will display the ID of your outbound RfP in the resources attribute:

{
  "id": "1e6ccfc2-a11d-49da-a937-ad8600f5b886",
  "eventName": "Rtp.Payment.Sent",
  "status": "Pending",
  "partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
  "createdAt": "2021-08-16T10:54:38.523-04:00",
  "resources": [
    "rtp/v1/payments/b2fd1c31-7a87-447e-9d9f-ad8600f5a822"
  ],
  "details": []
}

Call the GET /v1/payments/{id} endpoint using the ID in the resources section above. Here's a sample response to that endpoint:

GET /v1/payments/{id}
{
    "id": "b2fd1c31-7a87-447e-9d9f-ad8600f5a822",
    "originalPaymentId": "b2fd1c31-7a87-447e-9d9f-ad8600f5a822",
    "referenceId": "R228OS497X04Y",
    "accountNumber": "2686062254",
    "amount": 17500,
    "authorizationTransactionId": "b2fd1c31-7a87-447e-9d9f-ad8600f5a822",
    "direction": "Outbound",
    "status": "Completed",
    "paymentType": "RequestForPayment",
    "source": "Api",
    "transactionAccountContext": "Complete",
    "rtpTransactionStatus": "RCVD",
    "debtor": {
        "routingNumber": "011000138",
        "accountNumber": "456789000",
        "name": "Peter Griffin",
        "addressStreetName": "Spooner St",
        "addressBuildingNumber": "33",
        "addressCity": "Quahog",
        "addressState": "RI",
        "addressPostalCode": "10025",
        "addressCountry": "US"
    },
    "creditor": {
        "routingNumber": "021214891",
        "accountNumber": "2686062254",
        "name": "John Wick",
        "addressStreetName": "110 West Ave",
        "addressCity": "Valhalla",
        "addressState": "NY",
        "addressPostalCode": "10504",
        "addressCountry": "US"
    },
    "network": {
        "messageDefId": "pain.013.001.07",
        "businessMessageId": "B20210816021214273T1BEGO25550516652",
        "messageId": "M20210816021214273T1BHAQ17293122714",
        "createdAt": "2021-08-16T10:54:24.533-04:00",
        "numberOfTransactions": 1,
        "interbankSettlementAmount": 17500,
        "currency": "USD",
        "interbankSettlementDate": "2021-08-16",
        "settlementMethod": "CLRG",
        "clearingSystemCode": "TCH",
        "instructionId": "20210816021214273T1BP6MK22624348645",
        "endToEndId": "5bf3a9d6652549ae9d03ad8600f5a822",
        "fromParticipantId": "021214273T1",
        "toParticipantId": "990000001S1",
        "instructingRoutingNumber": "021214891",
        "instructedRoutingNumber": "011000138",
        "headerCreationDate": "2021-08-16T10:54:24.917-04:00",
        "messageCreationDateTime": "2021-08-16T10:54:24.533-04:00"
    },
    "confirmedStatus": {
        "messageStatusReportId": "a81ccf95-db89-4c22-97ad-ad8600f5a8b3",
        "acceptedDateTime": "2021-08-16T10:54:24.943-04:00",
        "transactionStatus": "RCVD"
    },
    "serviceLevelCode": "SDVA",
    "localInstrumentProprietary": "STANDARD",
    "categoryPurpose": "CONSUMER",
    "currency": "USD",
    "chargeBearer": "SLEV",
    "paymentInfoId": "20210816021214273T1BP6MK22624348645",
    "reqExecutionDate": {
        "date": "2021-08-16T23:59:59-04:00",
        "dateType": "DtTm"
    },
    "expiryDate": {
        "date": "2021-08-18T23:59:59-04:00",
        "dateType": "DtTm"
    },
    "paymentConditions": {
        "amountModAllowed": false,
        "earlyPayAllowed": true,
        "acceptedAmount": 17500
    },
    "purpose": "NA",
    "wasRefunded": false,
    "wasPaid": true,
    "createdAt": "2021-08-16T10:54:24.533-04:00",
    "completedAt": "2021-08-16T10:54:25.087-04:00",
    "processingStartedAt": "2021-08-16T10:54:24.873-04:00",
    "postingCode": "OK",
    "productId": "d3e6c8ce-3277-4cdd-bfa4-ad800131bd92",
    "partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
    "lastModifiedAt": "2021-08-16T10:54:25.6257073-04:00",
    "sentAt": "2021-08-16T10:54:24.9166667-04:00",
    "sendAttemptCount": 1,
    "result": {
        "code": "OK"
    },
    "discounts": [],
    "awaitingResponse": false
}

A successfully sent Payment Request will have a status of Completed and AwaitingResponse = true.

If the debtor responds to your outbound RfP by sending a credit transfer, this will be captured by the Rtp.Payment.Received webhook event. For example:

{
  "id": "4543c296-8aa2-43a7-8401-ad8600f5b88a",
  "eventName": "Rtp.Payment.Received",
  "status": "Pending",
  "partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
  "createdAt": "2021-08-16T10:54:38.537-04:00",
  "resources": [
    "rtp/v1/payments/cc16cc34-55ab-4a95-8f79-ad8600f5a8b9"
  ],
  "details": []
}

Take the ID within the resources section and use the GET /v1/payments/{id} endpoint to query the details of the inbound credit message:

{
    "id": "cc16cc34-55ab-4a95-8f79-ad8600f5a8b9",
    "originalPaymentId": "b2fd1c31-7a87-447e-9d9f-ad8600f5a822",
    "referenceId": "R228I42Q92862",
    "accountNumber": "2686062254",
    "amount": 17500,
    "operatorCoreTransactionId": "9eabd2d4-125e-4ea5-b89e-ad8600f5a920",
    "authorizationTransactionId": "cc16cc34-55ab-4a95-8f79-ad8600f5a8b9",
    "direction": "Inbound",
    "status": "Completed",
    "paymentType": "CreditTransfer",
    "source": "ClearingHouse",
    "transactionAccountContext": "Complete",
    "rtpTransactionStatus": "ACTC",
    "debtor": {
        "routingNumber": "011000138",
        "accountNumber": "456789000",
        "name": "credittransferonly: Peter Griffin",
        "addressStreetName": "Spooner St",
        "addressBuildingNumber": "33",
        "addressCity": "Quahog",
        "addressState": "RI",
        "addressPostalCode": "10025",
        "addressCountry": "US"
    },
    "creditor": {
        "routingNumber": "021214891",
        "accountNumber": "2686062254",
        "name": "John Wick",
        "addressStreetName": "110 West Ave",
        "addressCity": "Valhalla",
        "addressState": "NY",
        "addressPostalCode": "10504",
        "addressCountry": "US"
    },
    "network": {
        "messageDefId": "pacs.008.001.08",
        "businessMessageId": "B20210816990000001S1BHGW12498461696",
        "messageId": "M20210816990000001S1BWZE98158013489",
        "createdAt": "2021-08-16T10:54:24-04:00",
        "numberOfTransactions": 1,
        "interbankSettlementAmount": 17500,
        "currency": "USD",
        "interbankSettlementDate": "2021-08-16",
        "settlementMethod": "CLRG",
        "clearingSystemCode": "TCH",
        "instructionId": "20210816021214273T1BP6MK22624348645",
        "endToEndId": "6a360928dc2e4e5e9975ad8600f5a89e",
        "transactionId": "20210816021214273T1BP6MK22624348645",
        "clearingSystemRef": "1",
        "fromParticipantId": "990000001S1",
        "toParticipantId": "021214273T1",
        "instructingRoutingNumber": "011000138",
        "instructedRoutingNumber": "021214891",
        "headerCreationDate": "2021-08-16T10:54:24-04:00",
        "messageCreationDateTime": "2021-08-16T10:54:24-04:00"
    },
    "reportedStatus": {
        "messageStatusReportId": "cc5b017f-0264-4b4a-a766-ad8600f5a8f7",
        "acceptedDateTime": "2021-08-16T10:54:25.247-04:00",
        "transactionStatus": "ACTC"
    },
    "confirmedStatus": {
        "messageStatusReportId": "9eabd2d4-125e-4ea5-b89e-ad8600f5a920",
        "acceptedDateTime": "2021-08-16T10:54:25-04:00",
        "transactionStatus": "ACTC"
    },
    "serviceLevelCode": "SDVA",
    "localInstrumentProprietary": "STANDARD",
    "categoryPurpose": "CONSUMER",
    "currency": "USD",
    "chargeBearer": "SLEV",
    "purpose": "Credit Transfer",
    "wasRefunded": false,
    "wasPaid": false,
    "createdAt": "2021-08-16T10:54:25.137-04:00",
    "completedAt": "2021-08-16T10:54:25.627-04:00",
    "processingStartedAt": "2021-08-16T10:54:25.22-04:00",
    "postingCode": "OK",
    "productId": "d3e6c8ce-3277-4cdd-bfa4-ad800131bd92",
    "partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
    "lastModifiedAt": "2021-08-16T10:54:25.6287081-04:00",
    "sendAttemptCount": 0,
    "result": {
        "code": "OK"
    },
    "discounts": [],
    "awaitingResponse": false,
    "referencedPaymentId": "b2fd1c31-7a87-447e-9d9f-ad8600f5a822"
}

When a Credit Transfer is received referencing the Payment Request, AwaitingResponse will be set to false and WasPaid will be set to true.

The status for Payment Requests that do not receive a Credit Transfer prior to the ExpiryDate will be changed to Expired.

Canceling an RfP

Partners can cancel a previously sent Request For Payment if:

  • The debtor has not responded with a reject response
  • The debtor has not responded with a credit transfer

🚧

When canceling an RfP, a Request Cancellation Code must be supplied.

POST /v1/payments/00000000-0000-0000-0000-000000000001/payment-request/cancel
{
  "reasonCode": "TECH"
}

Approving an Inbound RFP

When a Payment Request is approved, a Payment Request Response is sent to the creditor with a positive response, immediately followed by a Credit Transfer.

A received payment request with PaymentConditions.AmountModeAllowed = true allows for a different amount to be sent to the creditor FI than the amount specified in the Payment Request.

POST /v1/payments/9120FA29-5713-45BD-8BF7-AD8600FC1F16/payment-request/approve
{
  "amount": 450
}

A successfully sent response and Credit Transfer will change the Payment Request AwaitingResponse = false and WasPaid = true.

Rejecting an Inbound RFP

When an inbound RFP is rejected, COS will respond to the creditor FI by informing them that the Payment Request has been rejected. A successfully sent response will change the Payment Request AwaitingResponse = false.

POST /v1/payments/00000000-0000-0000-0000-000000000001/payment-request/reject
{
  "reasonCode": " AC06"
}

Simulating RFP Responses

Payment Request Responses can be simulated by prefixing the debtor on the outbound Payment Request.

Simulate a rejection from the receiving FI: Prefix the debtor name with “reject:”
Simulate receiving FI responding with a credit transfer: Prefix the debtor name with “credittransferonly:”
Simulate receiving FI responding with an RfP Response followed by a credit transfer: Prefix the debtor name with “includecredittransfer:”

Debtor names that do not contain any of the above prefix values will receive a positive Request For Payment Response.

📘

Note

There is currently no simulation that will trigger an "Expired" status. If you originate an outbound RFP that is accepted by the debtor FI/debtor, and a credit transfer from the debtor is not received prior to the expiry date indicated in your RFP request, then the outbound RFP status will change from "Completed" to "Expired". Additionally, the AwaitingResponse field of the outbound RFP will change to "false". [from Ticket #328557 Re: Simulating "Expired" Status for RFP]

Here's an example of a request which will simulate a rejection by the debtor (receiver):

POST /v1/payments/payment-request
{
  "accountNumber": "2645256591",
  "amount": 51000,
  "discount": 0,
  "debtor": {
    "routingNumber": "011000138",
    "accountNumber": "456789000",
    "name": "reject: John Wick",
    "addressStreetName": "123 Maple St.",
    "addressBuildingNumber": "3432",
    "addressCity": "New York",
    "addressState": "NY",
    "addressPostalCode": "10025",
    "addressCountry": "US"
  },
  "requestedExecutionDate": "2021-08-17",
  "expiryDate": "2021-08-19"
}
{
    "id": "f255daed-5019-4614-ace7-ad8600fd9e40",
    "originalPaymentId": "f255daed-5019-4614-ace7-ad8600fd9e40",
    "referenceId": "R228O07Z2JSEF",
    "accountNumber": "2645256591",
    "amount": 5100,
    "direction": "Outbound",
    "status": "Created",
    "paymentType": "RequestForPayment",
    "source": "Api",
    "transactionAccountContext": "NotSubmitted",
    "debtor": {
        "routingNumber": "011000138",
        "accountNumber": "456789000",
        "name": "reject:John Wick",
        "addressStreetName": "123 Maple St.",
        "addressBuildingNumber": "3432",
        "addressCity": "New York",
        "addressState": "NY",
        "addressPostalCode": "10025",
        "addressCountry": "US"
    },
    "creditor": {
        "routingNumber": "021214891",
        "accountNumber": "2645256591",
        "name": "John Wick CHECK Testing",
        "addressStreetName": "110 West Ave",
        "addressCity": "Valhalla",
        "addressState": "NY",
        "addressPostalCode": "10504",
        "addressCountry": "US"
    },
    "network": {
        "businessMessageId": "B20210816021214273T1BJXA14878062976",
        "messageId": "M20210816021214273T1BJVH74121589966",
        "createdAt": "2021-08-16T11:23:23.7283823-04:00",
        "numberOfTransactions": 1,
        "interbankSettlementAmount": 5100,
        "currency": "USD",
        "interbankSettlementDate": "2021-08-16",
        "settlementMethod": "CLRG",
        "clearingSystemCode": "TCH",
        "instructionId": "20210816021214273T1B0RA263421316852",
        "endToEndId": "401f507568f741c7bab6ad8600fd9e40",
        "fromParticipantId": "021214273T1",
        "toParticipantId": "990000001S1",
        "instructingRoutingNumber": "021214891",
        "instructedRoutingNumber": "011000138",
        "headerCreationDate": "2021-08-16T11:23:23.7283823-04:00",
        "messageCreationDateTime": "2021-08-16T11:23:23.7283823-04:00"
    },
    "serviceLevelCode": "SDVA",
    "localInstrumentProprietary": "STANDARD",
    "categoryPurpose": "CONSUMER",
    "currency": "USD",
    "chargeBearer": "SLEV",
    "paymentInfoId": "20210816021214273T1B0RA263421316852",
    "reqExecutionDate": {
        "date": "2021-08-16T23:59:59-04:00",
        "dateType": "DtTm"
    },
    "expiryDate": {
        "date": "2021-08-18T23:59:59-04:00",
        "dateType": "DtTm"
    },
    "paymentConditions": {
        "amountModAllowed": false,
        "earlyPayAllowed": true,
        "acceptedAmount": 5100
    },
    "purpose": "NA",
    "wasRefunded": false,
    "wasPaid": false,
    "createdAt": "2021-08-16T11:23:23.7283823-04:00",
    "productId": "d3e6c8ce-3277-4cdd-bfa4-ad800131bd92",
    "partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
    "lastModifiedAt": "2021-08-16T11:23:23.7293822-04:00",
    "sendAttemptCount": 0,
    "discounts": [],
    "awaitingResponse": false
}

Webhook details for the above request:

{
  "id": "95e8b8da-7578-4592-b50d-ad8600fdb980",
  "eventName": "Rtp.Payment.Sent",
  "status": "Pending",
  "partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
  "createdAt": "2021-08-16T11:23:46.977-04:00",
  "resources": [
    "rtp/v1/payments/f255daed-5019-4614-ace7-ad8600fd9e40"
  ],
  "details": []
}

COS will simulate a reject response for your outbound RfP. That inbound response will trigger the Rtp.Payment.Received event which contains the ID of the inbound reject payment message:

{
  "id": "4543c296-8aa2-43a7-8401-ad8600f5b88a",
  "eventName": "Rtp.Payment.Received",
  "status": "Pending",
  "partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
  "createdAt": "2021-08-16T11:54:38.537-04:00",
  "resources": [
    "rtp/v1/payments/89aa613a-89f3-4c1a-97a9-ad8600fd9eb7"
  ],
  "details": []
}

Using the GET /v1/payments/{id} endpoint with the payment ID in the resource section above, here's what the simulated rejection looks like:

GET /v1/payments/{id}
{
  "id": "89aa613a-89f3-4c1a-97a9-ad8600fd9eb7",
  "originalPaymentId": "f255daed-5019-4614-ace7-ad8600fd9e40",
  "referenceId": "R228I31UNG1P7",
  "accountNumber": "2645256591",
  "amount": 5100,
  "direction": "Inbound",
  "status": "Completed",
  "paymentType": "RequestForPaymentResponse",
  "source": "Phone",
  "transactionAccountContext": "Complete",
  "rtpTransactionStatus": "RCVD",
  "debtor": {
    "routingNumber": "011000138"
  },
  "creditor": {
    "routingNumber": "021214891",
    "name": "John Wick CHECK Testing"
  },
  "network": {
    "messageDefId": "pain.014.001.07",
    "businessMessageId": "B20210816990000001S1BBGQ93170978822",
    "messageId": "M20210816990000001S1BJUQ01232371349",
    "createdAt": "2021-08-16T11:23:24-04:00",
    "numberOfTransactions": 0,
    "interbankSettlementAmount": 0,
    "instructionId": "20210816021214273T1B0RA263421316852",
    "fromParticipantId": "990000001S1",
    "toParticipantId": "021214273T1",
    "instructingRoutingNumber": "011000138",
    "instructedRoutingNumber": "021214891",
    "headerCreationDate": "2021-08-16T11:23:24-04:00",
    "messageCreationDateTime": "2021-08-16T11:23:24-04:00"
  },
  "originalMsgRefs": {
    "messageId": "M20210816021214273T1BJVH74121589966",
    "messageNameId": "pain.013.001.07",
    "creationDateTime": "2021-08-16T11:23:23-04:00",
    "interbankSettlementAmount": 0,
    "currency": "USD",
    "paymentInfoId": "20210816021214273T1B0RA263421316852"
  },
  "reportedStatus": {
    "messageStatusReportId": "d39e82ad-0630-4b7f-b11b-ad8600fd9edc",
    "acceptedDateTime": "2021-08-16T11:23:24.25-04:00",
    "transactionStatus": "RCVD"
  },
  "transactionInfo": {
    "status": "RJCT",
    "reasonCode": "CUST"
  },
  "reqExecutionDate": {
    "date": "2021-08-16T23:59:59-04:00",
    "dateType": "DtTm"
  },
  "paymentConditions": {
    "amountModAllowed": false,
    "acceptedAmount": 0
  },
  "wasRefunded": false,
  "wasPaid": false,
  "createdAt": "2021-08-16T11:23:24.193-04:00",
  "completedAt": "2021-08-16T11:23:24.193-04:00",
  "productId": "d3e6c8ce-3277-4cdd-bfa4-ad800131bd92",
  "partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
  "lastModifiedAt": "2021-08-16T11:23:24.252445-04:00",
  "sendAttemptCount": 0,
  "result": {
    "code": "CUST"
  },
  "discounts": [],
  "awaitingResponse": false,
  "referencedPaymentId": "f255daed-5019-4614-ace7-ad8600fd9e40"
}

Within transactionInfo you'll see status RJCT and reasonCode CUST indicating that your request was rejected by the customer (debtor).

Request for Payment Using Ultimate Creditor

In this example, In this example, we'll be illustrating the use of the ultimate creditor fields within the payment transaction. Initech, a customer of Acme Co, is requesting $100 from their customer Globex Corp. Acme Co will be originating the $100 request for payment from their COS account. This means that Acme Co is the creditor, Initech is the ultimate creditor, and Globex Corp is the debtor. Here's what that request would look like:

{
  "accountNumber": "2342123458",
  "amount": 10000,
  "debtor": {
    "routingNumber": "021000021",
    "accountNumber": "222317585",
    "name": "Globex Corp",
    "addressStreetName": "World Way",
    "addressBuildingNumber": "15",
    "addressCity": "New York",
    "addressState": "NY",
    "addressPostalCode": "10013",
    "addressCountry": "US"
  },
  "creditor": {
    "accountNumber": "2342123458",
    "name": "Acme Co",
    "addressStreetName": "Any St",
    "addressBuildingNumber": "123",
    "addressCity": "Anytown",
    "addressState": "NY",
    "addressPostalCode": "11101",
    "addressCountry": "US"
  },
  "ultimateCreditor": {
    "name": "Initech",
    "addressStreetName": "Office Way",
    "addressBuildingNumber": "555",
    "addressCity": "Sometown",
    "addressState": "MA",
    "addressPostalCode": "03741",
    "addressCountry": "US"
  },
  "purpose": "Invoice PR91"
  },
}

Did this page help you?