Send an instant payment
What you will learn
✅ How to originate an instant payment credit transfer from your master account
✅ How to simulate a rejected credit transfer
If you are new to instant payments, check out the instant payments overview.
This tutorial assumes familiarity with APIs. For more information, visit API basics.
This tutorial uses this API endpoint:
Transfers funds between banks in real time via an Instant Payments network |
|---|
Before you begin
Make sure you have:
- Your partner ID
- Your master account number
- Registered the following webhook events:
Rtp.Payment.Sent | Confirms that payment successfully sent to the receiving institution; funds available in the recipient’s account |
|---|---|
Rtp.Payment.Received | Confirms payment received and posted to an account the Cross River system |
Rtp.Payment.Rejected | Payment rejected by the receiving institution or Instant Payments network. |
You should be familiar with these terms:
Financial institution (FI) | The bank or credit union facilitating the transfer of funds between parties |
|---|---|
Debtor | The account initiating and sending a payment through the Instant Payments network |
Creditor | The account receiving funds through the Instant Payments network |
Originate a credit transfer
Instant payment credit transfers allow funds to move from your account to the recipient's account in real time. Transfers can originate from master accounts or subledgers.
- The debtor sends the payment, and the creditor receives it.
- Cross River supports three network platforms:
- RTP® via The Clearing House (TCH)
- FedNow®
- CRNow
In this tutorial, you are the debtor. You will send an outbound credit transfer of $175 from your master account to C. Brown using a specified network platform.
Possible Outcomes:
- Accepted Transfer: Funds are posted to the recipient’s account.
- Status: ACTC (Accepted)
- Rejected Transfer: Payment is rejected by the creditor FI or the network. No funds are transferred.
- Status: RJCT (Rejected)
- No Response: The transfer times out, resulting in rejection.
- Status: RJCT (Rejected)
- Accepted Without Posting: The payment is accepted but funds are not immediately posted. The creditor FI can accept or reject the transfer within 24 hours.
- Status: ACWP (Accepted Without Posting)
Cross River cannot confirm how the receiving FI displays payment details. Contact the recipient FI directly for specifics on how the payment will appear.
To initiate a credit transfer
Call POST /rtp/v1/payments.
Some attributes are required for the call. Refer to the full list of attributes.
IMPORTANT We strongly recommend that you include an idempotency key in the request header to prevent duplicate payments in case of a failure.
Amounts in API calls and responses are written without decimal points (e.g., $175 is written as 17500).
POST /Rtp/v1/payments
{
"accountNumber": "2955057589",
"amount": 10000,
"creditor": {
"routingNumber": "011000138",
"accountNumber": "456789000",
"name": "Richard Robert",
"addressStreetName": "Speedway Blvd",
"addressBuildingNumber": "3366",
"addressCity": "Talladega",
"addressState": "AL",
"addressPostalCode": "35096",
"addressCountry": "US"
},
"purpose": "Sponsor donation",
"clientIdentifier": "3e4ac46c-fa9e-4654-80b8-83f971622dfd"
}A successful API call returns a JSON response containing the details of the originated credit transfer.
{
"id": "8177d9d1-e706-49f3-b0a3-b300009ffcf3",
"originalPaymentId": "8177d9d1-e706-49f3-b0a3-b300009ffcf3",
"referenceId": "R169O74976262",
"accountNumber": "2955057589",
"clientIdentifier": "3e4ac46c-fa9e-4654-80b8-83f971622dfd",
"amount": 1500,
"direction": "Outbound",
"status": "Created",
"paymentType": "CreditTransfer",
"source": "Api",
"transactionAccountContext": "NotSubmitted",
"debtor": {
"routingNumber": "021214891",
"accountNumber": "2955057589",
"name": "Dim Mak",
"addressStreetName": "400 Kelby St",
"addressCity": "Fort Lee",
"addressState": "NJ",
"addressPostalCode": "07024",
"addressCountry": "US"
},
"creditor": {
"routingNumber": "011000138",
"accountNumber": "456789000",
"name": "Richard Robert",
"addressStreetName": "Speedway Blvd",
"addressBuildingNumber": "3366",
"addressCity": "Talladega",
"addressState": "AL",
"addressPostalCode": "35096",
"addressCountry": "US"
},
"network": {
"businessMessageId": "B20250618021214273T1BUBT97200579713",
"messageId": "M20250618021214273T1BZZD70574502544",
"createdAt": "2025-06-18T05:42:29.9268876-04:00",
"numberOfTransactions": 1,
"interbankSettlementAmount": 1500,
"currency": "USD",
"interbankSettlementDate": "2025-06-18",
"settlementMethod": "CLRG",
"clearingSystemCode": "TCH",
"instructionId": "20250618021214273T1B7OD838696205667",
"endToEndId": "eb80f3de5bf84751bdf7b300009ffcf3",
"transactionId": "20250618021214273T1B7OD838696205667",
"fromParticipantId": "021214273T1",
"toParticipantId": "990000001S1",
"instructingRoutingNumber": "021214891",
"instructedRoutingNumber": "011000138",
"headerCreationDate": "2025-06-18T05:42:29.9268876-04:00",
"messageCreationDateTime": "2025-06-18T05:42:29.9268876-04:00"
},
"serviceLevelCode": "SDVA",
"localInstrumentProprietary": "STANDARD",
"categoryPurpose": "CONSUMER",
"currency": "USD",
"chargeBearer": "SLEV",
"purpose": "Sponsor donation",
"wasRefunded": false,
"wasPaid": false,
"createdAt": "2025-06-18T05:42:29.9268876-04:00",
"productId": "29f3022a-ccfc-42eb-aa8f-b29500f13d00",
"partnerId": "1101a33d-fbd9-4b9e-b169-b29500f12407",
"lastModifiedAt": "2025-06-18T05:42:29.9268876-04:00",
"sendAttemptCount": 0,
"discounts": [],
"awaitingResponse": false,
"limitsEligibleOn": "2025-06-18T05:42:29.9268876-04:00",
"networkPlatform": "TCH"
}The statusattribute in the response indicates that your payment was created. It does not indicate that your payment was successful.
Payment status webhook events
When a credit transfer (pacs.008) is sent to the instant payments network, the Rtp.Payment.Sent webhook fires. The event body includes the payment ID in the details section (e.g., 7b5f4bfb-8595-452b-914e-ad9400f7b8e3).
{
"id": "7af80bc3-4f1c-4842-b60e-ad9400fb59db",
"eventName": "Rtp.Payment.Sent",
"status": "Pending",
"partnerId": "bd7a716f-6349-43ef-89cd-aa2200f15977",
"createdAt": "2021-08-30T11:15:08.623-04:00",
"resources": [
"rtp/v1/payments/7b5f4bfb-8595-452b-914e-ad9400f7b8e3"
],
"details": [
{
"paymentId": "7b5f4bfb-8595-452b-914e-ad9400f7b8e3",
"paymentType": "CreditTransfer",
"resultCode": "OK",
"resultAdditionalInfo": null,
"coreTransactionId": "3e04e9b9-e80f-4f5f-9a0b-b04a011d23df",
"memoPostId": "4820a916-f062-49ad-9519-b04a011d2372",
"accountNumber": "2553179843",
"postingCode": "OK",
"rtpTransactionStatus": "ACTC",
"purpose": null,
"awaitingResponse": "False",
"referencedPaymentId": null
}
]
}Simulate rejected credit transfers
You can simulate a rejected response from the creditor:
Call POST /rtp/v1/payments (same as initiating a credit transfer), but add reject: before the creditor’s name (see line 9 in the request example).
POST /v1/payments
{
"accountNumber": "2553179843",
"amount": 15000,
"creditor": {
"routingNumber": "011000138",
"accountNumber": "456789000",
"name": "reject:Cleveland Brown",
"addressStreetName": "Main St",
"addressBuildingNumber": "34",
"addressCity": "New York",
"addressState": "NY",
"addressPostalCode": "00093",
"addressCountry": "US"
},
"purpose": "gift money"
}The response example shows a status of Rejected on line 13.
{
"id": "7b5f4bfb-8595-452b-914e-ad9400f7b8e3",
"originalPaymentId": "7b5f4bfb-8595-452b-914e-ad9400f7b8e3",
"referenceId": "R242O0354Y055",
"accountNumber": "2553179843",
"amount": 15000,
"operatorCoreTransactionId": "2da7c99c-5804-4757-98c1-ad9400fa6c2c",
"memoPostId": "7b5f4bfb-8595-452b-914e-ad9400f7b8e3",
"memoPostRemovedAt": "2021-08-30T11:14:44.973-04:00",
"direction": "Outbound",
"status": "Rejected",
"paymentType": "CreditTransfer",
"source": "Api",
"transactionAccountContext": "Rejected",
"rtpTransactionStatus": "RJCT",
"debtor": {
"routingNumber": "021214891",
"accountNumber": "2553179843",
"name": "P Griffin",
"addressStreetName": "Main Street",
"addressBuildingNumber": "31",
"addressCity": "New York",
"addressState": "NY",
"addressPostalCode": "00093",
"addressCountry": "US"
},
"creditor": {
"routingNumber": "011000138",
"accountNumber": "456789000",
"name": "C Brown",
"addressStreetName": "Main St",
"addressBuildingNumber": "34",
"addressCity": "New York",
"addressState": "NY",
"addressPostalCode": "00093",
"addressCountry": "US"
},
"network": {
"messageDefId": "pacs.008.001.08",
"businessMessageId": "B20210830021214273T1BQPZ97287285414",
"messageId": "M20210830021214273T1BEML46024873029",
"createdAt": "2021-08-30T11:01:55.74-04:00",
"numberOfTransactions": 1,
"interbankSettlementAmount": 15000,
"currency": "USD",
"interbankSettlementDate": "2021-08-30",
"settlementMethod": "CLRG",
"clearingSystemCode": "TCH",
"instructionId": "20210830021214273T1B4S0534677157734",
"endToEndId": "9a2638dc8cbe48f18d8cad9400f7b8e3",
"transactionId": "20210830021214273T1B4S0534677157734",
"clearingSystemRef": "001",
"fromParticipantId": "021214273T1",
"toParticipantId": "990000001S1",
"instructingRoutingNumber": "021214891",
"instructedRoutingNumber": "011000138",
"headerCreationDate": "2021-08-30T11:11:45.373-04:00",
"messageCreationDateTime": "2021-08-30T11:01:55.74-04:00"
},
"confirmedStatus": {
"messageStatusReportId": "2da7c99c-5804-4757-98c1-ad9400fa6c2c",
"acceptedDateTime": "2021-08-30T11:11:45.4-04:00",
"transactionStatus": "ACTC"
},
"serviceLevelCode": "SDVA",
"localInstrumentProprietary": "STANDARD",
"categoryPurpose": "CONSUMER",
"currency": "USD",
"chargeBearer": "SLEV",
"purpose": "gift money",
"wasRefunded": false,
"wasPaid": false,
"createdAt": "2021-08-30T11:01:55.74-04:00",
"completedAt": "2021-08-30T11:14:45.05-04:00",
"processingStartedAt": "2021-08-30T11:11:45.247-04:00",
"postingCode": "OK",
"productId": "13362d99-f04e-455b-9363-abc10151c27c",
"partnerId": "bd7a716f-6349-43ef-89cd-aa2200f15977",
"lastModifiedAt": "2021-08-30T11:14:45.0505825-04:00",
"sentAt": "2021-08-30T11:11:45.3733333-04:00",
"sendAttemptCount": 1,
"result": {
"code": "OK"
},
"discounts": [],
"awaitingResponse": false
}The Rtp.Payment.Rejected event is triggered when a credit transfer is rejected.
- The details object in the event contains the payment ID from the response body (e.g., 7b5f4bfb-8595-452b-914e-ad9400f7b8e3).
- The resultCode in the details object provides the rejection reason.
- Example: AC06 – Account is blocked.
{
"id": "06afb069-dc90-48ea-b642-b04a0126580f",
"eventName": "Rtp.Payment.Rejected",
"status": "Pending",
"partnerId": "1e5d3f04-ae24-4af6-9e30-aecf012b99dd",
"createdAt": "2023-07-25T13:51:40.417-04:00",
"resources": [
"rtp/v1/payments/7b5f4bfb-8595-452b-914e-ad9400f7b8e3"
],
"details": [
{
"paymentId": "7b5f4bfb-8595-452b-914e-ad9400f7b8e3",
"paymentType": "CreditTransfer",
"resultCode": "AC06",
"resultAdditionalInfo": null,
"postingCode": "RES",
"rtpTransactionStatus": null,
"purpose": null,
"referencedPaymentId": null
}
]
}