---
title: Send an instant payment
slug: tutorials/api/instant-payments/send-an-instant-payment
description: Originate an instant payment credit transfer from your master account and simulate a rejected credit transfer.
docTags: 
createdAt: 2024-08-09T14:02:24.022Z
---

## What you will learn

✅ How to originate an instant payment credit transfer from your master account

✅ How to simulate a rejected credit transfer

:::hint{type="info"}
If you are new to instant payments, check out the [instant payments](docId\:U_TnYPQ3-5yepG7jKD5FK) overview.

This tutorial assumes familiarity with APIs. For more information, visit [API basics](docId\:pUTTCwQ5SKLzxYzIn5D1b).
:::

&#x20;This tutorial uses this API endpoint:

| [POST /rtp/v1/payments](docId:727H0GkQerqHAFKEy67Uu)   | Transfers funds between banks in real time via an Instant Payments network |
| ------------------------------------------------------ | -------------------------------------------------------------------------- |

## Before you begin

Make sure you have:

- [API credentials](docId\:wmg-1Fqwq3bj-D3c3HFfs)&#x20;
- Your partner ID
- Your master account number
- [Registered](docId\:BN5XtgkJogBe-CtwomCbS) 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)

:::hint{type="info"}
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

:::::WorkflowBlock
::::WorkflowBlockItem
Call `POST /rtp/v1/payments`.

Some attributes are required for the call. Refer to the full list of [attributes](docId:727H0GkQerqHAFKEy67Uu).

:::hint{type="warning"}
**IMPORTANT**
We strongly recommend that you include an [idempotency key](docId\:xQC2lRsG0xVv_9NMkqxKk) in the request header to prevent duplicate payments in case of a failure.
:::

:::hint{type="info"}
Amounts in API calls and responses are written without decimal points (e.g., $175 is written as 17500).
:::

:::CodeblockTabs
POST /rtp/v1/payments request

```curl
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"
}
```
:::
::::

::::WorkflowBlockItem
A successful API call returns a JSON response containing the details of the originated credit transfer.

:::CodeblockTabs
POST /rtp/v1/payments response

```json
{
    "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 `status`attribute 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**).

:::CodeblockTabs
Sample Rtp.Payment.Sent event

```json
{
  "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:

:::::WorkflowBlock
::::WorkflowBlockItem
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).

:::CodeblockTabs
Example request: rejected credit transfer

```curl
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"
}
```
:::
::::

::::WorkflowBlockItem
The response example shows a `status` of **Rejected** on line 13.

:::CodeblockTabs
Example response: rejected credit transfer

```json
{
    "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
}
```
:::
::::

::::WorkflowBlockItem
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.

:::CodeblockTabs
Sample Rtp.Payment.Rejected event

```json
{
  "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
    }
  ]
}
```
:::
::::
:::::



