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.

Note

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

/rtp/v1/payments

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.

Note

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.

ultimateDebtor

object

Optional 

Ultimate Debtor Business/Individual Information

creditor

object

Required  

Creditor Business/Individual Information

ultimateCreditor

object

Optional 

Ultimate Creditor Business/Individual Information

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

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.

Response attributes

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:

  • Created

  • Pending

  • Processing

  • Completed

  • Rejected

  • Canceled

  • Hold

  • TimedOut

  • Finalizing

  • Failed

  • ResearchRequired

  • Expired

  • Authorized

paymentType

string

Type of payment describing transaction funding:

  • CreditTransfer

  • SystemTimeout

  • ReturnRequest

  • ReturnResponse

  • RemittanceAdvice

  • RequestForInformation

  • PaymentAck

  • RequestForPayment

  • RequestForPaymentResponse

  • RequestForInformationResponse

  • RequestForPaymentCancellation

  • Unknown

source

string

The source of the activity:

  • Phone

  • Fax

  • Email

  • ClearingHouse

  • Api

  • RtpSystemTimeout

  • OpsPortal

  • PartnerPortal

  • ReturnOfFunds

  • AutoResend

transactionAccountContext

string

Transaction account context:

  • NotSubmitted

  • Pending

  • Processing

  • Complete

  • Reversal

  • MemoPost

  • TimedOut

  • Canceled

  • Rejected

  • AuthOnly

  • NotSet

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

ultimateDebtor

string

Ultimate Debtor Business/Individual Information

creditor

object

Creditor Business/Individual Information

ultimateCreditor

string

Ultimate Creditor Business/Individual Information

network

object

Network information

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.

cancelTransaction

object

Cancel transaction information

originalMsgRefs

object

Original message reference information

case

object

Case object information

remittanceAdvice

object

Remittance advice information

reportedStatus

object

Reported status information

confirmedStatus

object

Confirmed status information

alternateRefundRailDetail

object

Details of a refunded payment

proprietaryData

object

Specifies a pre-agreed service or level of service between the parties

transactionInfo

string

Information about the transaction

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 remittanceReferredDocNumber. Formatted as yyyy-mm-dd

paymentInfoId

string

Payment information ID

reqExecutionDate

object

Required execution date information

expiryDate

object

Expiry date information

paymentConditions

object

Payment conditions information

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

remittanceLocation

object

Remittance location information

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 TCH (for RTP via TCH) or FedNow.

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 queuedPaymentExpiresAt and this attribute, this attribute takes precedence.

Back to top

Copy
Request sample
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"
}
Copy

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

/rtp/v1/directory

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.

Note

For FedNow, an FI must register each RTN separately. An FI can have some but not all RTNs registered for FedNow.

Best practice

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 TCH (for RTP via TCH) or FedNow.

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 TCH (for RTP via TCH) or FedNow.

onlineStatus

string

Whether the FI is currently online or not:

  • 0 (SignedOff)

  • 1 (SignedOn)

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]

Back to top

Copy

Sample request

curl -X GET
--header 'Accept: application/json'
--header 'Authorization: Bearer <token>'
'https://sandbox.crbcos.com/Rtp/v1/directory?filter.routingNumber=200000009'
Copy

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).

Back to top

Related topics

Instant Payments at Cross River

Instant Payments queuing

Instant Payments limits

Error codes

Tutorials

How to originate an instant payment

How to use the RTP directory API

 

Back to top