Skip to main content
POST
Issue a persistent on-ramp bank account (US)
Issues a persistent US bank account (ACH, FedWire or FedNow) for the UPA. Incoming USD converts automatically to the chosen destinationAssetCode and is delivered on-chain to the UPA’s connected wallet. There is no separate settlement step, and the account is reusable indefinitely. The UPA needs an active bank_onramp provider relationship (the same regulated-banking relationship used for linked-bank payouts) and an active connected wallet on a verified destination chain and asset pair. Unverified pairs return payment_method_not_supported. Only connectedWalletId and destinationAssetCode are always required in the body. Omit recipientType, recipientName and recipientAddress together to use verified details on file, indicated by recipientOnFile in the requirements response. To override those details, or when none are on file, send all three together. A partial override is rejected. A UPA holds one on-ramp bank account per provider. Repeating the request returns the existing account rather than issuing a second set of banking coordinates. Routing is fixed when the account is issued: a request naming a different connected wallet, chain or destination asset returns 409, and an existing account cannot be re-pointed. Idempotency-Key is required and must contain 8–256 printable characters after trimming surrounding whitespace. Preserve the original body and key through a timeout or provisioning response. Discover eligible rails and wallets through Get on-ramp requirements. The response shows only the bank name and the last four account digits. Call Get deposit instructions for the full details to show the account holder. See On-ramp accounts.

Authorizations

Authorization
string
header
required

HTTP Basic auth. Username is the Stableyard app ID. Password is the app secret. The optional Stableyard-Version request header must match the environment pin.

Headers

Idempotency-Key
string
required

Required retry key for funding-account issuance: 8-256 printable characters after trimming surrounding whitespace. Retry the identical request with the same key after a timeout or provisioning response; changed input returns 409 idempotency_conflict.

Required string length: 8 - 256
Pattern: ^[^\u0000-\u001f\u007f]+$
Example:

"bank-funding-account-123-v1"

Stableyard-Version
enum<string>

Optional contract-version assertion. Omit it to use the app environment's pinned version. A different supported version is accepted only after that environment is explicitly migrated.

Available options:
2026-09-09

Path Parameters

accountId
string
required

Canonical account id returned by the Accounts API.

Example:

"acct_123"

Body

application/json

Omit recipientType, recipientName and recipientAddress to use the name and address already verified for the UPA (see recipientOnFile on the requirements). Send all three together to override them.

connectedWalletId
string
required
Pattern: ^wallet_[A-Za-z0-9_-]{3,59}$
Example:

"wallet_abc123"

destinationAssetCode
enum<string>
required

Only chain/asset pairs Stableyard has verified with the provider are accepted; unverified combinations return payment_method_not_supported.

Available options:
USDC,
USDT
rail
enum<string>
default:ach
Available options:
ach,
fedwire,
fednow
recipientType
enum<string>
Available options:
individual,
business
recipientName
string
Required string length: 1 - 200
recipientAddress
object

Response

On-ramp bank account

id
string
required
Example:

"onramp_acct_123"

accountId
string
required
status
enum<string>
required
Available options:
provisioning,
active,
requires_intervention,
disabled,
retired
rail
enum<string> | null
required
Available options:
ach,
fedwire,
fednow,
null
sourceAsset
string
required
Example:

"USD"

destinationAssetCode
string
required
Example:

"USDC"

destinationChainId
integer
required
Example:

42161

connectedWalletId
string
required

The connected wallet this bank account forwards to. Fixed when the bank account is issued: the provider cannot re-point an existing account, so a different wallet, chain or asset requires a different bank account entirely.

bankName
string | null
required
accountNumberLast4
string | null
required

Last 4 digits only. Use the deposit-instructions endpoint for the full details.

createdAt
string<date-time>
required