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

# Your funding addresses — where to send USDT/USDC to top up

> Returns (creating on first use) your dedicated deposit address on each supported
chain, plus the flat funding fee.

**Only USDT or USDC on Polygon or BSC are accepted.** Stablecoins credit 1:1 with
USD, so there is no FX gap between what you send and what you can spend. Any other
asset, or any other chain, will NOT credit your balance.

A flat fee (default **$1**) is deducted per deposit. A deposit that cannot cover the
fee is not credited at all — send more than the fee.

**When it becomes spendable:** at the deposit's CONFIRMATION threshold, not the
moment it appears on-chain. We wait so a chain reorganisation cannot take back funds
you have already spent.

| Chain | Confirmations | Typical wait |
|-------|---------------|--------------|
| BSC   | 12            | ~40 seconds  |
| POL   | 128           | ~4–5 minutes |

Polygon's is deliberately deep because it has had reorganisations — fund on BSC if
you want the balance quickly.

The address is permanent and reusable; no memo or destination tag is needed. A
`wallet.deposit.confirmed` webhook fires when the balance goes live, so you need not poll.




## OpenAPI

````yaml /api-reference/openapi.json get /api/v1/vas/funding-addresses
openapi: 3.0.3
info:
  contact:
    email: support@rachfinance.com
    name: Rach Finance Support
  description: >
    Complete REST API for the Rach Finance platform — covering authentication,
    KYC, crypto payment gateway,

    Wallet-as-a-Service (WaaS) HD wallets, remittance/FX transfers, OTC trading,
    virtual accounts,

    analytics, webhooks, push notifications, and all admin operations.


    ## Authentication

    Three authentication methods are supported depending on the endpoint group:


    | Method | Header | Used For |

    |--------|--------|----------|

    | JWT Bearer | `Authorization: Bearer <token>` | Dashboard / user-facing
    endpoints |

    | API Key | `X-API-Key: <key>` | Server-to-server integrations (remittance,
    checkout, WaaS) |

    | Admin Token | `X-Admin-Token: <token>` | Admin-only operations |


    ## API Key Environments


    Every business has two server-to-server API keys. The key **prefix is
    authoritative** —

    the environment is determined by which key you send, not a toggle in your
    dashboard:


    | Prefix | Type | Behaviour |

    |--------|------|-----------|

    | `test_sk_` | Test (sandbox) | Testnet addresses, no real funds move, no
    blockchain confirmations needed |

    | `live_sk_` | Production | Mainnet addresses, real transactions, webhooks
    fire on real confirmations |


    **Use the same code path for both environments** — swap the key, not the
    logic.

    The `is_test_mode` flag is locked onto every checkout session and wallet
    operation

    at the moment the request is authenticated, so mode cannot drift mid-flow
    even if

    you later toggle sandbox mode in the dashboard.


    Sandbox toggle (`POST /api/v1/api-keys/toggle-sandbox`) only affects legacy
    keys

    (no prefix). If you use prefixed keys it has no effect.


    ## Base URL

    `https://api.rach.finance/api/v1/`


    (Rach CaaS — Card-as-a-Service — is served separately at
    `https://api.rach.finance/caas/api/v1/`.)


    ## Official SDKs


    Client libraries covering every endpoint on this page:


    | Language | Install | Source |

    |----------|---------|--------|

    | **JavaScript / Node** | `npm install rachfinance` | `sdk/javascript/` |

    | **Python** | `pip install rachfinance` | `sdk/python/` |

    | **Go** | `go get github.com/rach-finance/rachfinance-go` | `sdk/go/` |

    | **Flutter / Dart** | add `rachfinance` to `pubspec.yaml` | `sdk/flutter/`
    |


    **JavaScript quick start:**

    ```js

    const RachFinance = require('rachfinance');

    const rach = new RachFinance({ apiKey: 'live_sk_...' });

    const session = await rach.checkout.create({ amount: 100, currency: 'USD',
      customerEmail: 'user@example.com', reference: 'ORDER-001' });
    ```


    **Python quick start:**

    ```python

    from rachfinance import RachFinance

    rach = RachFinance(api_key='live_sk_...')

    session = rach.checkout.create(amount=100, currency='USD',
        customer_email='user@example.com', reference='ORDER-001')
    ```


    **Go quick start:**

    ```go

    c, _ := rachfinance.New(rachfinance.WithAPIKey("live_sk_..."))

    session, err := c.Checkout.Create(ctx, rachfinance.CreateCheckoutRequest{
        Amount: 100, Currency: "USD",
        CustomerEmail: "user@example.com", Reference: "ORDER-001",
    })

    ```


    **Flutter quick start:**

    ```dart

    final rach = RachFinance(apiKey: 'live_sk_...');

    final session = await rach.checkout.create(
        amount: 100, currency: 'USD',
        customerEmail: 'user@example.com', reference: 'ORDER-001');
    ```


    ## Common Error Format

    ```json

    { "error": "Human-readable error message" }

    ```
  title: Rach Finance API
  version: 1.0.0
servers:
  - description: Production
    url: https://api.rach.finance
  - description: Local development
    url: http://localhost:8080
security: []
tags:
  - name: Checkout (Crypto Gateway)
  - name: WaaS (Wallet-as-a-Service)
  - description: >
      Unified token swap API for merchants. Same-chain swaps on POL/BSC are
      executed via the

      Rach FiatSwapV2 smart contract; cross-chain pairs are routed through LiFi.
      Merchants

      consume one API — routing is invisible to them.


      **Auth:** Quote is public. Execute and history require `X-API-Key`.
    name: Swap
  - description: >
      Real-time crypto market data service — included with every merchant
      account.

      Prices for 100+ coins served from Rach's edge cache with no additional
      setup required.


      **Auth:** `X-API-Key` or `Authorization: Bearer <key>`. Health check is
      public.


      **Rate limit:** 120 REST requests per merchant per minute.


      **WebSocket:** Connect to `/v1/market/ws?key=<api-key>`, send a subscribe
      message, then receive

      a snapshot immediately followed by real-time price ticks as they change.
    name: Market Data
  - name: Value-Added Services
    description: >
      Airtime and data top-ups, gift cards, and utility bill payments — one
      service over

      three product families, with one order model and one status vocabulary.


      You hold a **prepaid balance**, funded with USDT or USDC on Polygon or
      BSC, and set

      your own margin on top of the price Rach quotes you. Every purchase debits
      that

      balance before anything is spent with the provider, and a failed order is
      refunded

      automatically.


      Three rules worth knowing before you integrate:


      1. `reference` is your idempotency key and must be **reused on retries** —
      repeating
         it returns the original order rather than buying twice.
      2. Amounts are validated against each operator's real denomination rules
      before any
         money moves, so a bad amount is a clean 400.
      3. A **503** means the platform is topping up its own provider balance:
      nothing was
         attempted and you were not charged.
paths:
  /api/v1/vas/funding-addresses:
    get:
      tags:
        - Value-Added Services
      summary: Your funding addresses — where to send USDT/USDC to top up
      description: >
        Returns (creating on first use) your dedicated deposit address on each
        supported

        chain, plus the flat funding fee.


        **Only USDT or USDC on Polygon or BSC are accepted.** Stablecoins credit
        1:1 with

        USD, so there is no FX gap between what you send and what you can spend.
        Any other

        asset, or any other chain, will NOT credit your balance.


        A flat fee (default **$1**) is deducted per deposit. A deposit that
        cannot cover the

        fee is not credited at all — send more than the fee.


        **When it becomes spendable:** at the deposit's CONFIRMATION threshold,
        not the

        moment it appears on-chain. We wait so a chain reorganisation cannot
        take back funds

        you have already spent.


        | Chain | Confirmations | Typical wait |

        |-------|---------------|--------------|

        | BSC   | 12            | ~40 seconds  |

        | POL   | 128           | ~4–5 minutes |


        Polygon's is deliberately deep because it has had reorganisations — fund
        on BSC if

        you want the balance quickly.


        The address is permanent and reusable; no memo or destination tag is
        needed. A

        `wallet.deposit.confirmed` webhook fires when the balance goes live, so
        you need not poll.
      responses:
        '200':
          description: Funding addresses
      security:
        - ApiKeyAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      description: |
        Business API key for server-to-server integrations.
        Key prefix determines the environment — no separate flag needed:
        `test_sk_*` = sandbox/testnet, `live_sk_*` = production/mainnet.
      in: header
      name: X-API-Key
      type: apiKey

````