> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stableyard.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# Get on-ramp requirements

> Discover the funding rails and eligible wallets before issuing an on-ramp account.

Read `supportedDestinations` and `destinations` for this environment. When no rail or eligible wallet is available, `available` is `false` and `unavailableReason` says why. Any other failure returns a normal HTTP error; do not treat it as unavailable. Issuance separately requires the account's `bank_onramp` approval.

`recipientOnFile` reports whether a verified recipient name and address can be reused. When true, omit `recipientType`, `recipientName` and `recipientAddress` together at issuance. Otherwise, supply all three. This flag does not grant bank access or replace capability approval.


## OpenAPI

````yaml openapi.json GET /v2/accounts/{accountId}/onramp-bank-account-requirements
openapi: 3.1.0
info:
  title: Stableyard Partner API
  version: 2.0.0
  x-stableyard-api-version: '2026-09-09'
  x-stableyard-supported-api-versions:
    - '2026-09-09'
  summary: Backend API for UPAs, Payments, activity, and optional financial products.
  description: >

    Use this API from a trusted partner backend with an app ID and app secret.


    ## Recommended integration


    1. Call `GET /v2/partners/config` to verify credentials and discover enabled
    capabilities.

    2. Create a UPA only when your product needs a persistent Stableyard
    account.

    3. Create a receive or send Payment with `POST /v2/payments`.

    4. Redirect a payer to the returned `paymentUrl` or pass the Payment
    credentials to an official Stableyard interface SDK.

    5. Process signed webhooks and fetch the Payment by ID for reconciliation.


    Checkout execution and account-bound browser endpoints are documented in the
    separate Interfaces & SDKs reference.
  x-stableyard-documentation-surface: partner
servers:
  - url: https://prod-api.stableyard.fi
    description: Production
  - url: https://staging-api-v2.stableyard.fi
    description: Sandbox
security: []
tags:
  - name: Authentication
    x-displayName: API authentication
    description: Verify your app ID and app secret before calling UPA APIs.
  - name: Accounts
    x-displayName: UPA Accounts
    description: Create Universal Payment Accounts and manage account settings.
  - name: Deposit Addresses
    description: Create reusable receive addresses and verify inbound deposits.
  - name: Identity & KYC
    description: >-
      Verify the UPA email and run identity verification. Managed vaults and
      fiat payment rails use this same verified UPA identity.
  - name: Vaults
    description: >-
      Create policy-controlled stablecoin vaults and manage policy updates for
      accounts.
  - name: Payments
    description: >-
      Create escrow-first payments, issue partner-authenticated send
      instructions or executions, power public checkout, and reconcile
      collection through final account settlement.
  - name: Balances & Transactions
    description: >-
      Read Stableyard-posted financial activity. Balances are ledger projections
      of activity Stableyard processed; they are not live balances of externally
      controlled wallets.
paths:
  /v2/accounts/{accountId}/onramp-bank-account-requirements:
    get:
      tags:
        - Accounts
      summary: Discover on-ramp bank account options
      description: >-
        Returns the USD funding-account rails enabled for this app and
        environment, and the UPA's connected wallets on supported destination
        chains with their supported assets. Call this before rendering the
        creation form. The current delivery allowlist is Arbitrum One USDC in
        production and Arbitrum Sepolia USDC in sandbox; read
        supportedDestinations and destinations for this environment rather than
        using the general network catalog. Availability also depends on your
        app's enabled products and markets. When no rail, access, or eligible
        destination is available, the response returns available: false with a
        reason; other failures return a normal HTTP error. Issuing an account
        also requires the UPA's `bank_onramp` capability to be active, and
        rejects unsupported destination chain/asset pairs with
        payment_method_not_supported.
      operationId: getOnrampBankAccountRequirements
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
            example: acct_123
          description: Canonical account id returned by the Accounts API.
        - name: Stableyard-Version
          in: header
          required: false
          schema:
            type: string
            enum:
              - '2026-09-09'
          description: >-
            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.
      responses:
        '200':
          description: On-ramp bank account requirements
          headers:
            Stableyard-Version:
              description: >-
                Effective date-based Stableyard API contract version for this
                response.
              schema:
                type: string
                enum:
                  - '2026-09-09'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OnrampBankAccountRequirements'
              examples:
                example:
                  summary: Discover on-ramp bank account options 200 response
                  value:
                    accountId: acct_123
                    recipientOnFile: true
                    available: true
                    unavailableReason: null
                    supportedDestinations:
                      - chainId: 42161
                        networkName: Arbitrum One
                        assetCodes:
                          - USDC
                    recipientTypes:
                      - individual
                    rails:
                      - rail: ach
                        country: US
                        currency: USD
                    destinations:
                      - connectedWalletId: wallet_123
                        chainId: 42161
                        address: '0x1111111111111111111111111111111111111111'
                        label: null
                        assetCodes:
                          - USDC
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '424':
          $ref: '#/components/responses/FailedDependency'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      security:
        - partnerBasicAuth: []
components:
  schemas:
    OnrampBankAccountRequirements:
      type: object
      required:
        - accountId
        - available
        - recipientOnFile
        - unavailableReason
        - recipientTypes
        - rails
        - supportedDestinations
        - destinations
      properties:
        accountId:
          type: string
          example: acct_123
        recipientOnFile:
          type: boolean
          description: >-
            True when a verified name and address is on file, so the funding
            account can be created without recipient details.
        available:
          type: boolean
          description: >-
            True only when at least one rail is available and at least one
            connected wallet is on a supported destination.
        unavailableReason:
          type:
            - string
            - 'null'
          enum:
            - onramp_route_not_configured
            - no_eligible_destination
            - null
          description: Why the flow cannot be started, or null when it can.
        supportedDestinations:
          type: array
          description: >-
            Supported delivery chains and assets, including when this UPA has no
            eligible wallet. Listing does not grant rail access or approval.
          items:
            type: object
            additionalProperties: false
            required:
              - chainId
              - networkName
              - assetCodes
            properties:
              chainId:
                type: integer
                minimum: 1
                example: 42161
              networkName:
                type: string
                example: Arbitrum One
              assetCodes:
                type: array
                minItems: 1
                items:
                  type: string
                  enum:
                    - USDC
                    - USDT
        recipientTypes:
          type: array
          items:
            type: string
            enum:
              - individual
              - business
        rails:
          type: array
          description: >-
            Rails available in this environment. One rail can be available while
            another is not.
          items:
            type: object
            required:
              - rail
              - country
              - currency
            properties:
              rail:
                type: string
                enum:
                  - ach
                  - fedwire
                  - fednow
              country:
                type: string
                example: US
              currency:
                type: string
                example: USD
        destinations:
          type: array
          description: >-
            Connected wallets on a supported destination chain, with the asset
            codes supported on that chain.
          items:
            type: object
            required:
              - connectedWalletId
              - chainId
              - address
              - label
              - assetCodes
            properties:
              connectedWalletId:
                type: string
                pattern: ^wallet_[A-Za-z0-9_-]{3,59}$
              chainId:
                type: integer
                minimum: 1
                example: 42161
              address:
                type: string
              label:
                type:
                  - string
                  - 'null'
              assetCodes:
                type: array
                minItems: 1
                items:
                  type: string
                  enum:
                    - USDC
                    - USDT
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          type: object
          additionalProperties: false
          required:
            - code
            - message
          properties:
            code:
              type: string
              minLength: 1
              maxLength: 128
              example: bad_request
            message:
              type: string
              minLength: 1
              maxLength: 1000
              example: The request is invalid
            details: {}
  responses:
    BadRequest:
      description: Bad request
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: bad_request
              value:
                error:
                  code: bad_request
                  message: The request is invalid
    Unauthorized:
      description: Unauthorized
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: unauthorized
              value:
                error:
                  code: unauthorized
                  message: Authentication is required
    Forbidden:
      description: The app secret does not include the required scope
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: forbidden
              value:
                error:
                  code: forbidden
                  message: The credential does not allow this operation
    NotFound:
      description: Not found
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: not_found
              value:
                error:
                  code: not_found
                  message: The resource was not found
    Conflict:
      description: Conflict
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: idempotency_conflict
              value:
                error:
                  code: idempotency_conflict
                  message: >-
                    The Idempotency-Key was already used with a different
                    request
    FailedDependency:
      description: This feature is not configured for your app or environment
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: chain_config_missing
              value:
                error:
                  code: chain_config_missing
                  message: The requested network is not configured for this environment
    TooManyRequests:
      description: Too many requests. Retry after the `Retry-After` interval.
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
        Retry-After:
          description: Seconds until the caller should retry.
          schema:
            type: integer
            minimum: 1
        RateLimit-Limit:
          description: Quota for the most constrained policy.
          schema:
            type: integer
            minimum: 1
        RateLimit-Remaining:
          description: Requests remaining in that policy window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Reset:
          description: Seconds until that policy window resets.
          schema:
            type: integer
            minimum: 0
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: rate_limited
              value:
                error:
                  code: rate_limited
                  message: Too many requests
  securitySchemes:
    partnerBasicAuth:
      type: http
      scheme: basic
      description: >-
        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.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.