---
title: "Create a realtime transfer"
method: POST
path: "/v2/transfers/realtime"
---

# Create a realtime transfer

`POST /v2/transfers/realtime`

## Request

- Base URL: `https://api.slash.com`
- URL: `https://api.slash.com/v2/transfers/realtime`
- Auth: API key in header `X-API-Key`

Send USD to a saved RTP- or FedNow-capable destination, or queue the transfer against an information request while waiting for the recipient's bank details.

## Headers

- `X-Idempotency-Key` string, required

## Request body

- TransferCreateRealtime: Send USD to a saved RTP- or FedNow-capable destination, or queue the transfer against an information request while awaiting the recipient's bank details. Provide exactly one of `destinationId` or `informationRequestId`.
  - `amount` UsdMoney, required: A positive USD amount expressed in cents.
    - `amount` integer, required: Amount in cents. For example, `1250` represents USD 12.50.
    - `currency` 'USD', required
  - `fromAccount` string, required: Source virtual-account id with the `subaccount_` prefix.
  - `destinationId` string: Saved RTP- or FedNow-capable destination. Mutually exclusive with `informationRequestId`.
  - `informationRequestId` string: Information request used to queue the transfer until the recipient supplies a US bank account. Mutually exclusive with `destinationId`.
  - `description` string: Human-readable private transfer memo.
  - `billId` string: Bill this transfer pays, with the `bill_` prefix. The transfer is linked to the bill as a payment and the bill's status follows it. The bill must be on the same legal entity and accept a new payment.
  - `realtime` object, required
    - `remittanceInfo` string: Optional network remittance information.

## Response `200`

The created realtime transfer.

- TransferRealtime: An RTP or FedNow transfer, or a queued realtime transfer awaiting destination details.
  - `id` string, required: Transfer id with the `transfer_intent_` prefix.
  - `accountId` string, required: Account containing the source balance.
  - `fromAccount` string: Source virtual-account id, when the transfer is scoped to one.
  - `amount` Money, required: A signed monetary amount expressed in minor units.
    - `amount` integer, required: Amount in the currency's minor units.
    - `currency` string, required: Uppercase ISO 4217 currency code.
  - `description` string: Human-readable private transfer memo.
  - `statementDescriptor` string: Statement or network descriptor supplied when the transfer was created.
  - `billId` string: Bill this transfer pays, when it was linked to one, with the `bill_` prefix. Set from `billId` at creation or by `POST /v2/bills/{billId}/payments`. Absent when your key can't see that bill.
  - `transactionIds` string[], required: Transaction ids produced by this transfer.
  - `createdAt` string, date-time, required: Time the transfer was created.
  - `submittedAt` string, date-time: Time the transfer was submitted for processing.
  - `settledAt` string, date-time: Time the transfer settled.
  - `failedAt` string, date-time: Time the transfer failed.
  - `canceledAt` string, date-time: Time the transfer was canceled.
  - `recipientId` string: Recipient receiving the transfer.
  - `destinationId` string: Saved destination used for the transfer.
  - `type` 'realtime', required
  - `status` 'pending' | 'pending_destination' | 'pending_approval' | 'in_review' | 'scheduled' | 'canceled' | 'failed' | 'settled', required: Lifecycle state of a realtime (RTP/FedNow) transfer.
  - `informationRequestId` string: Information request backing a queued realtime transfer.
  - `realtime` object, required
    - `remittanceInfo` string

## Other responses

- `400`: - `amount_above_limit` — The amount is more than this account may still send on this rail within its limit. - `amount_below_minimum` — The amount is below the smallest transfer this account may send on this rail. - `destination_type_mismatch` — The destination is of a type this rail cannot send to, e.g. an `international_wire` destination for an ACH transfer. - `global_usd_account_not_supported` — The account is a Global USD account, which this request does not support. - `transfer_count_limit_reached` — The account has sent as many transfers as its limit allows for the current interval. - `invalid_request (request shape)` — The body, query, or headers failed validation, or a required header is missing. `details` has one entry per failing location, keyed by JSON pointer or header name.
- `401`: - `unauthorized` — API key authentication is missing or invalid.
- `403`: - `forbidden` — The credential is not permitted to perform this action on the resource. When the resource is a field of the request, `details` names that `field` and the `id` it received. - `ip_allowlist_required` — The legal entity does not enforce an IP allowlist. Creating or cancelling transfers requires one, and the request must come from an allowlisted IP. - `forbidden (legal entity)` — The credential is not permitted to act for the selected legal entity. - `not_available` — Public API v2 is not yet available. Use [Public API v1](https://docs.slash.com/introduction) in the meantime. - `user_api_key_required` — The API key is scoped to a legal entity rather than a user. Every v2 request needs a user API key, created under Settings → API keys in the Slash dashboard, together with the `x-legal-entity` header.
- `404`: - `not_found` — No resource matches the identifier. When the identifier is a field of the request, `details` names that `field` and the `id` it received.
- `409`: - `bill_card_request_open` — A purchase card was requested for the bill and settles it once spent, so paying it another way too would cover it twice. Cancel the card request first. - `bill_not_payable` — The bill already has a payment awaiting approval, scheduled or in flight, or it is fully paid. Unlink or void the existing payment first. - `carrier_bill_read_only` — The bill was pulled from a connected carrier portal and is managed by that connection. It can be read but not changed. - `destination_archived` — The destination was archived and can no longer receive transfers. - `insufficient_funds` — The source account does not hold enough to cover this transfer. Nothing was moved; fund the account or lower the amount and retry. - `conflict (idempotency key reused)` — A consumed `X-Idempotency-Key` was reused; the original response is not replayed.
- `429`: The request exceeded the applicable rate limit. The response body is plain text, not the error object; clients must not depend on its wording.
- `500`: - `internal` — Slash could not complete the request. Quote `referenceId` when contacting Slash support.

## Changes

- **2026-10-21** `bcb64860ba55`: 3 info
  - added the new optional request property `informationRequestId`
  - the request property `destinationId` became optional
  - added the optional property `allOf[subschema #2]/informationRequestId` to the response with the `200` status
- **2026-10-20** `6e19af06af22`: 1 warning
  - added the new `pending_destination` enum value to the `allOf[subschema #2]/status` response property for the response status `200`
- **2026-10-16** `8b5d371ffeea`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/slashfi/apis/slash-public-api/changes/v2/transfers/realtime/post.md)

---

[API](https://skmtc.dev/slashfi/apis/slash-public-api.md) - [All operations](https://skmtc.dev/slashfi/apis/slash-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/slashfi/apis/slash-public-api/revisions/eaed2d63c9e2?raw)
