Instant Payments APIs
Instant payments allow individuals and businesses to transmit funds that clear and settle within seconds between US bank accounts at different US-based financial institutions. Cross River (CR) uses both the RTP via TCH and FedNow instant payment networks.
Instant Payments APIs are found in the RTP
module of our COS sandbox.
Get started with Cross River APIs.
This table presents Instant Payments APIs that we describe in detail.
Action |
API Call |
Description |
---|---|---|
Originate an instant payment credit transfer | POST /v1/payments
|
Sends a single Instant Payment |
Get instant payment service information for a specific financial institution | GET /v1/directory
|
Returns a list of instant payment-related services that are supported by a specific financial institution |
Originate an instant payment credit transfer
Originates an instant payment credit transfer.
An instant payment credit transfer sends funds from your account to the recipient account in real time. A credit transfer can be sent from a master account, a deposit account (DDA), or an associated subledger.
Cross River cannot know how another financial institution displays to their customers the information transmitted with the Originate a payment message. Contact the receiving FI directly to learn more about fields in their banking portal or on their bank statements.
Request attributes
accountNumber string Required Account that funds the payment |
|||||||||||||||||||||||||||||
amount integer Required Dollar amount of transaction in positive integral cents. For example, write $1.00 as 100. |
|||||||||||||||||||||||||||||
debtor object Conditional Debtor Business/Individual Information. Depending on configuration this might be populated automatically. child attributes
|
|||||||||||||||||||||||||||||
ultimateDebtor object Optional Ultimate Debtor Business/Individual Information child attributes
|
|||||||||||||||||||||||||||||
creditor object Required Creditor Business/Individual Information child attributes
|
|||||||||||||||||||||||||||||
ultimateCreditor object Optional Ultimate Creditor Business/Individual Information child attributes
|
|||||||||||||||||||||||||||||
purpose string Optional Internal CR field used to include a short description of purpose of the payment. The RDFI does not see this field. 50 character limit. |
|||||||||||||||||||||||||||||
remittanceData string Optional A description of the payment, meaning, the remittance advice. Use this field for any remittance information that doesn't have its own field. Not more than 140 characters. |
|||||||||||||||||||||||||||||
remittanceLocation string Optional Remittance location information child attributes
|
|||||||||||||||||||||||||||||
clientIdentifier string Optional Use this attribute to add your own unique identifying string to a payment call or COS record. This attribute is useful for idempotency purposes. |
|||||||||||||||||||||||||||||
queuedPaymentExpiresAt string Optional Date and time that a queued payment will expire (payment canceled) if the receiving FI is offline, in this format: yyyy-mm-ddThh:mm:ss[.mmm]. Not sent to TCH. |
id string The payment ID. This first appears in the initial response to the originate a payment request. This ID is in GUID format. |
|||||||||||||||||||||||||||||||||||||||||||||||
originalPaymentId string Original payment ID (only relevant if a payment didn't go through for some reason) |
|||||||||||||||||||||||||||||||||||||||||||||||
referenceId string This unique CR reference ID always begins with the first letter of the rail. In the case of Instance Payments, the ID begins with R because the API module is called RTP. |
|||||||||||||||||||||||||||||||||||||||||||||||
accountNumber string Account to fund payment |
|||||||||||||||||||||||||||||||||||||||||||||||
clientIdentifier string Use this attribute to add your own unique identifying string to a payment call or COS record. This attribute is useful for idempotency purposes. |
|||||||||||||||||||||||||||||||||||||||||||||||
amount integer Dollar amount of the transaction in positive integral cents. For example, write $1.00 as 100. |
|||||||||||||||||||||||||||||||||||||||||||||||
operatorCoreTransactionId string The instant payments-related CR system transaction ID |
|||||||||||||||||||||||||||||||||||||||||||||||
authorizationTransactionId string ID of an authorization transaction that happens when CR receives an inbound credit transfer that is a refund of a credit transfer we previously sent out of the bank. This authorization ensures that CR can post the transaction to the creditor’s (receiver’s) COS account (for example, there aren’t any restrictions or the account isn’t closed) and respond to the real-time payment network that CR can accept the transfer. |
|||||||||||||||||||||||||||||||||||||||||||||||
memoPostId string The ID of the memo post |
|||||||||||||||||||||||||||||||||||||||||||||||
memoPostRemovedAt string The data and time the memo post was removed |
|||||||||||||||||||||||||||||||||||||||||||||||
direction string (missing or bad snippet) |
|||||||||||||||||||||||||||||||||||||||||||||||
status string Transaction status:
|
|||||||||||||||||||||||||||||||||||||||||||||||
paymentType string Type of payment describing transaction funding:
|
|||||||||||||||||||||||||||||||||||||||||||||||
source string The source of the activity:
|
|||||||||||||||||||||||||||||||||||||||||||||||
transactionAccountContext string Transaction account context:
|
|||||||||||||||||||||||||||||||||||||||||||||||
rtpTransactionsStatus string Status of the payment, as set by the receiving institution. This applies to Credit Transfers. Only has a value for outbound payments. See values here. |
|||||||||||||||||||||||||||||||||||||||||||||||
debtor object Debtor Business/Individual Information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
ultimateDebtor string Ultimate Debtor Business/Individual Information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
creditor object Creditor Business/Individual Information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
ultimateCreditor string Ultimate Creditor Business/Individual Information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
network object Network information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
assignment object Assignment information when an investigation is opened. The assigner must be the sender of this confirmation and the assignee must be the receiver. child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
cancelTransaction object Cancel transaction information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
originalMsgRefs object Original message reference information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
case object Case object information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
remittanceAdvice object Remittance advice information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
reportedStatus object Reported status information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
confirmedStatus object Confirmed status information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
alternateRefundRailDetail object Details of a refunded payment child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
proprietaryData object Specifies a pre-agreed service or level of service between the parties child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
transactionInfo string Information about the transaction child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
serviceLevelCode string Specifies a pre-agreed service or level of service between the parties |
|||||||||||||||||||||||||||||||||||||||||||||||
localInstrumentPropriety string Identifies the Debtor as either a business or consumer customer of the Debtor FI. This element also indicates whether the Debtor is a domestic customer of the Debtor FI or a customer of a foreign branch or affiliate of the Debtor FI. |
|||||||||||||||||||||||||||||||||||||||||||||||
categoryPurpose string Information provided by the initiating party about payment processing, according to a list of predefined categories. Some values will trigger special processing by different parties in the payment chain. |
|||||||||||||||||||||||||||||||||||||||||||||||
initiatingPartyName string Name of the initiating party/entity |
|||||||||||||||||||||||||||||||||||||||||||||||
currency string Currency |
|||||||||||||||||||||||||||||||||||||||||||||||
chargeBearer string Specifies which party (or parties) will bear the charges associated with the processing of the credit transfer |
|||||||||||||||||||||||||||||||||||||||||||||||
remittanceIdentification string Unique identification as assigned by the initiating party to unambiguously identify the remittance information sent separately from the payment instruction, such as a remittance advice |
|||||||||||||||||||||||||||||||||||||||||||||||
remittanceData string A description of the payment, meaning, the remittance advice. Use this field for any remittance information that doesn't have its own field. Not more than 140 characters. |
|||||||||||||||||||||||||||||||||||||||||||||||
remittanceReferredDocNumber string When a Credit Transfer is being used to return funds associated with a previously completed Credit Transfer, the Identification of the original Credit Transfer that is being returned will be included in these fields. Specific to Bill Pay use cases, it may be the end customer account number within the biller system or an invoice number. |
|||||||||||||||||||||||||||||||||||||||||||||||
remittanceReferredRelatedDate string Date associated with the document of the |
|||||||||||||||||||||||||||||||||||||||||||||||
paymentInfoId string Payment information ID |
|||||||||||||||||||||||||||||||||||||||||||||||
reqExecutionDate object Required execution date information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
expiryDate object Expiry date information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
paymentConditions object Payment conditions information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
purpose string Internal CR field used to include a short description of purpose of the payment. The RDFI does not see this field. 50 character limit. |
|||||||||||||||||||||||||||||||||||||||||||||||
wasRefunded boolean True if the payment was refunded, otherwise false |
|||||||||||||||||||||||||||||||||||||||||||||||
wasPaid boolean True if the payment was received, otherwise false |
|||||||||||||||||||||||||||||||||||||||||||||||
duplicatedPaymentId string If the payment was duplicated, the payment ID of the duplicate. This is a GUID format ID. |
|||||||||||||||||||||||||||||||||||||||||||||||
createdAt string Time the credit transfer was created. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|||||||||||||||||||||||||||||||||||||||||||||||
rejectedAt string Time when the credit transfer was rejected. If not rejected, null. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|||||||||||||||||||||||||||||||||||||||||||||||
completedAt string Time when the credit transfer was completed. If not completed, null. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|||||||||||||||||||||||||||||||||||||||||||||||
canceledAt string Time when the credit transfer was canceled. If not canceled, null. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|||||||||||||||||||||||||||||||||||||||||||||||
timedOutAt date-time Time when the credit transfer timed out. If it didn't time out, null. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|||||||||||||||||||||||||||||||||||||||||||||||
failedAt string Time when the credit transfer failed. If it didn't fail, null. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|||||||||||||||||||||||||||||||||||||||||||||||
expiredAt string Time when the credit transfer expired. If not expired, null. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|||||||||||||||||||||||||||||||||||||||||||||||
processingStartedAt date-time Time when the credit transfer started processing. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|||||||||||||||||||||||||||||||||||||||||||||||
postingCode string Includes OK (posted), RES (account restricted), NSF (insufficient funds in the account sending the wire) |
|||||||||||||||||||||||||||||||||||||||||||||||
productId string ID in GUID format of your specific product type on which the account is based. Provided by CR. In this case, the CR account involved in the transfer. |
|||||||||||||||||||||||||||||||||||||||||||||||
partnerId string Your ID in the CR system. This ID is in GUID format. |
|||||||||||||||||||||||||||||||||||||||||||||||
lastModifiedAt string Internal CR value. Date and time the database entry was last modified. |
|||||||||||||||||||||||||||||||||||||||||||||||
refundsPaymentId string ID of the payment refund. This ID is in GUID format. |
|||||||||||||||||||||||||||||||||||||||||||||||
sentAt string When the credit transfer was sent. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|||||||||||||||||||||||||||||||||||||||||||||||
sendAttemptCount integer Number of attempts made to send the credit transfer |
|||||||||||||||||||||||||||||||||||||||||||||||
result object Results information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
remittanceLocation object Remittance location information child attributes
|
|||||||||||||||||||||||||||||||||||||||||||||||
awaitingResponse boolean True if waiting for a message response, otherwise false. |
|||||||||||||||||||||||||||||||||||||||||||||||
referencePaymentId string CR payment ID relating to situations where a credit transfer is related to a previous payment. This ID is in GUID format. |
|||||||||||||||||||||||||||||||||||||||||||||||
limitsEligibleOn string The validation that occurs when a payment is originated to see if that payment is within the partner daily limit. This is a CR internal field. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|||||||||||||||||||||||||||||||||||||||||||||||
networkPlatform string The payment network platform used to send the payment. Values are either |
|||||||||||||||||||||||||||||||||||||||||||||||
queuedPaymentExpiresAt string Date and time that a queued payment will expire (payment canceled) if the receiving FI is offline, in this format: yyyy-mm-ddThh:mm:ss[.mmm]. Not sent to TCH. |
|||||||||||||||||||||||||||||||||||||||||||||||
queuedPaymentExpiresAfterInSeconds string Time interval in seconds after which a queued payment will expire if the receiving FI is offline. Not sent to TCH. If you provide values for both |
curl -X POST
--header 'Content-Type: application/json'
--header 'Accept: application/json'
--header 'Authorization: Bearer <token>'
-d '{ \
"accountNumber": "2553179843",
"amount": 15000,
"creditor": {
"routingNumber": "011000138",
"accountNumber": "456789000",
"name": "Corey Hendly",
"addressStreetName": "Spooner St",
"addressBuildingNumber": "34",
"addressCity": "Quahog",
"addressState": "RI",
"addressPostalCode": "00093",
"addressCountry": "US"
},
"purpose": "gift money"
}
Sample response
{
"id": "7b5f4bfb-8595-452b-914e-ad9400f7b8e3",
"originalPaymentId": "7b5f4bfb-8595-452b-914e-ad9400f7b8e3",
"referenceId": "R242O0354Y055",
"accountNumber": "2553179843",
"amount": 15000,
"direction": "Outbound",
"status": "Created",
"paymentType": "CreditTransfer",
"source": "Api",
"transactionAccountContext": "NotSubmitted",
"debtor": {
"routingNumber": "021214891",
"accountNumber": "2553179843",
"name": "P Griffin",
"addressStreetName": "Main St",
"addressBuildingNumber": "31",
"addressCity": "New York",
"addressState": "NY",
"addressPostalCode": "10000",
"addressCountry": "US"
},
"creditor": {
"routingNumber": "011000138",
"accountNumber": "456789000",
"name": "Corey Hendly",
"addressStreetName": "Spooner St",
"addressBuildingNumber": "34",
"addressCity": "Quahog",
"addressState": "RI",
"addressPostalCode": "00093",
"addressCountry": "US"
},
"network": {
"businessMessageId": "B20210830021214273T1BNSI93853549430",
"messageId": "M20210830021214273T1BEML46024873029",
"createdAt": "2021-08-30T11:01:55.7404545-04:00",
"numberOfTransactions": 1,
"interbankSettlementAmount": 15000,
"currency": "USD",
"interbankSettlementDate": "2021-08-30",
"settlementMethod": "CLRG",
"clearingSystemCode": "TCH",
"instructionId": "20210830021214273T1B4S0534677157734",
"endToEndId": "9a2638dc8cbe48f18d8cad9400f7b8e3",
"transactionId": "20210830021214273T1B4S0534677157734",
"fromParticipantId": "021214273T1",
"toParticipantId": "990000001S1",
"instructingRoutingNumber": "021214891",
"instructedRoutingNumber": "011000138",
"headerCreationDate": "2021-08-30T11:01:55.7404545-04:00",
"messageCreationDateTime": "2021-08-30T11:01:55.7404545-04:00"
},
"serviceLevelCode": "SDVA",
"localInstrumentProprietary": "STANDARD",
"categoryPurpose": "CONSUMER",
"currency": "USD",
"chargeBearer": "SLEV",
"purpose": "gift money",
"wasRefunded": false,
"wasPaid": false,
"createdAt": "2021-08-30T11:01:55.7404545-04:00",
"productId": "13362d99-f04e-455b-9363-abc10151c27c",
"partnerId": "bd7a716f-6349-43ef-89cd-aa2200f15977",
"lastModifiedAt": "2021-08-30T11:01:55.7414531-04:00",
"sendAttemptCount": 0,
"discounts": [],
"awaitingResponse": false
}
Get instant payment service information for a specific financial institution
Returns a list of instant payment-related services that are supported by a particular financial institution. If the bank supports both TCH and FedNow instant payments, the call returns service codes for each network.
For FedNow, an FI must register each RTN separately. An FI can have some but not all RTNs registered for FedNow.
Add query parameters to filter the response the API returns to all GET calls.
Use pagination to control presentation of your results.
Query parameters
name string Optional Name of financial institution |
|
routingNumber string Optional Routing number of the specific account in the financial institution a payment is going to. For example, the number on a check. |
|
participantId string Optional 11-digit participant ID |
|
institutionRoutingNumber string Optional Routing number of the financial institution |
|
networkPlatform string Optional The payment network platform used to send the payment. Values are either |
Response attributes
routingNumber string Routing number of the specific account in the financial institution a payment would go to. For example, the number on a check. |
|
participantId string Financial institution's 11-digit RTP participant ID |
|
name string Name of the financial institution |
|
institutionRoutingNumber string Routing number of the financial institution |
|
institutionName string Name of the financial institution |
|
receiveServices string Messages the receiving FI can accept |
|
receivingConnection string Financial institution code |
|
participantActivationDate string Activation date of instant payment network participant |
|
extractionDateTime string Date and time the directory was extracted |
|
lastModifiedAt string Internal CR value. Date and time the database entry was last modified. |
|
networkPlatform string The payment network platform used to send the payment. Values are either |
|
onlineStatus string Whether the FI is currently online or not:
|
|
onlineStatusChangedAt string Date and time the FI online status last changed. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
Sample request
curl -X GET
--header 'Accept: application/json'
--header 'Authorization: Bearer <token>'
'https://sandbox.crbcos.com/Rtp/v1/directory?filter.routingNumber=200000009'
Sample response
{
"routingNumber": "200000009",
"participantId": "200000020T1",
"name": "ACI",
"institutionRoutingNumber": "200000020",
"institutionName": "ACI",
"receiveServices": [
"ACK",
"CRDT",
"RFI",
"RFIR",
"RFP",
"RFPR",
"RFRF",
"RFRFR",
"RMT"
],
"receivingConnection": "ACI2",
"participantActivationDate": "4/30/2019 12:00:00 AM",
"extractionDateTime": "9/29/2022 7:00:00 AM",
"lastModifiedAt": "2022-09-29T14:23:01.9180766-04:00",
"networkPlatform": "TCH",
"onlineStatus": 1,
"onlineStatusChangedAt": "2022-09-15T12:22:04.9180766-04:00"
},
{
"routingNumber": "200000009",
"participantId": null,
"name": "ACI",
"institutionRoutingNumber": null,
"institutionName": null,
"receiveServices": [
"RFPR",
"CTSR"
],
"receivingConnection": null,
"participantActivationDate": null,
"extractionDateTime": null,
"lastModifiedAt": "2022-09-29T14:23:01.9180766-04:00",
"networkPlatform": "FedNow",
"onlineStatus": 1,
"onlineStatusChangedAt": "2022-09-15T12:22:04.9180766-04:00"
}
Associated webhooks events
Event Name |
Description |
---|---|
Rtp.Payment.Sent |
RTP payment has been successfully sent to the receiving institution and the funds are available in the receiver's bank account |
Rtp.Payment.Received |
Inbound payment has been received from another institution and has successfully posted to an account in COS |
Rtp.Payment.Rejected |
Payment has been rejected by the receiving institution or RTP Network. The payment originated from an account with insufficient funds. |
Rtp.Payment.Canceled |
Payment was canceled at the request of the partner or a payment with a status of ResearchRequired has been canceled |
Rtp.Payment.ResearchRequired |
No response was received for an outbound payment, manual research is required to determine if the payment should be completed or canceled |
Rtp.Hold.Escalated |
A hold relating to either an outbound payment was marked for escalation by a member of the Operations team. Commonly this is used to indicate additional documentation or action is needed by the partner. |
Rtp.Refund.Requested |
Request has been received to refund a previously accepted credit transfer |
Rtp.Payment.Queued |
The receiving institution is offline. The payment will be processed when the receiving institution is back online. |
RTP.Limits.Utilization.Changed |
This webhook fires when the percentage of successful transfers hits 5%, and fires again every time the transfer interval goes up 5% (at 5%, 10%, 15% and so on). |
Related topics
Instant Payments at Cross River
Tutorials
How to originate an instant payment
How to use the RTP directory API