> ## 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.

# List top 250 coins by market cap

> Returns a paginated list of coins ranked by market capitalisation.
Data is served from Rach's edge cache — no external quota is consumed per merchant request.




## OpenAPI

````yaml /api-reference/openapi.json get /v1/market/coins
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
paths:
  /v1/market/coins:
    get:
      tags:
        - Market Data
      summary: List top 250 coins by market cap
      description: >
        Returns a paginated list of coins ranked by market capitalisation.

        Data is served from Rach's edge cache — no external quota is consumed
        per merchant request.
      operationId: marketListCoins
      parameters:
        - in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - in: query
          name: limit
          schema:
            default: 50
            maximum: 250
            minimum: 1
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  as_of:
                    description: Unix timestamp of the last successful price refresh
                    example: 1751584800
                    type: integer
                  coins:
                    items:
                      $ref: '#/components/schemas/CoinMarket'
                    type: array
                  limit:
                    example: 50
                    type: integer
                  page:
                    example: 1
                    type: integer
                  total:
                    example: 250
                    type: integer
                type: object
          description: Paginated coin list
        '401':
          description: Missing or invalid API key
        '503':
          description: Market data not yet available
      security:
        - ApiKeyAuth: []
components:
  schemas:
    CoinMarket:
      description: Market data for one coin.
      properties:
        ath:
          example: 73738
          type: number
        ath_change_percentage:
          example: -15.35
          type: number
        ath_date:
          example: '2024-03-14T07:10:36.635Z'
          type: string
        atl:
          example: 67.81
          type: number
        atl_change_percentage:
          example: 91950.24
          type: number
        atl_date:
          example: '2013-07-06T00:00:00.000Z'
          type: string
        circulating_supply:
          example: 19700000
          type: number
        current_price:
          example: 62409
          type: number
        high_24h:
          example: 63000
          type: number
        id:
          description: Coin identifier
          example: bitcoin
          type: string
        image:
          example: https://cdn.rach.finance/coins/bitcoin.png
          format: uri
          type: string
        last_updated:
          example: '2026-07-04T01:00:00.000Z'
          type: string
        low_24h:
          example: 61500
          type: number
        market_cap:
          example: 1234567890000
          type: number
        market_cap_rank:
          example: 1
          type: integer
        max_supply:
          example: 21000000
          nullable: true
          type: number
        name:
          example: Bitcoin
          type: string
        price_change_24h:
          example: 800.5
          type: number
        price_change_percentage_1h_in_currency:
          example: 0.34
          nullable: true
          type: number
        price_change_percentage_24h:
          example: 2.15
          type: number
        price_change_percentage_7d_in_currency:
          example: 5.12
          nullable: true
          type: number
        symbol:
          example: btc
          type: string
        total_supply:
          example: 21000000
          nullable: true
          type: number
        total_volume:
          example: 32000000000
          type: number
      type: object
  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

````