> For the complete documentation index, see [llms.txt](https://vnx.gitbook.io/vnx-global/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vnx.gitbook.io/vnx-global/developer/api/quotes-and-conversions.md).

# Quotes and Conversions

*Read public market data — assets, tradable pairs, and live quotes — then set up payment rails to move between fiat and stablecoins.*

## Before you begin

* Quotes and pair data are **public** `GET` endpoints; only `x-app-public-key` and `User-Agent` headers are required.
* Payment-rail endpoints are signed `/private/*` calls. See Authentication.

## Public endpoints

| Method | Path                   | Purpose                              |
| ------ | ---------------------- | ------------------------------------ |
| GET    | `/client/assets`       | Supported assets, units, blockchains |
| GET    | `/client/tradingPairs` | Tradable symbols                     |
| GET    | `/client/quotes`       | Live ask/bid/last quotes             |

### Assets

```bash
GET /api/v1/client/assets
```

Response: `timestamp` and `assets[]` where each entry has `asset`, `units[]`, and `blockchains[]{blockchain, isactive, ismintallowed}`. Use this to discover valid asset/blockchain pairs for deposits, minting, and withdrawals.

### Quotes

Optional `symbols[]` query filter; omit to fetch all.

```bash
GET /api/v1/client/quotes?symbols[]=VCHF/CHF
```

```json
{  "timestamp": "2026-06-19T09:21:33Z",  "quotes": [    {      "symbol": "VCHF/CHF",      "a": [0.95, 1000],      "b": [0.94, 1000],      "c": 0.945,      "upd": "2026-06-19T09:21:30Z",      "mint": [ { "unit": "CHF", "i": [], "r": [] } ]    }  ]}
```

`a` is `[ask_price, ask_qty]`, `b` is `[bid_price, bid_qty]`, and `c` is the last price.

## Payment rails (signed)

A payment rail is a reusable route between fiat and a stablecoin. Create one, query and reuse it, and poll payments for status — there are no webhooks.

| Method | Path                         | Content-Type       | Purpose             |
| ------ | ---------------------------- | ------------------ | ------------------- |
| POST   | `/private/addPaymentRail`    | `application/json` | Create a rail       |
| POST   | `/private/queryPaymentRails` | form-encoded       | List rails          |
| POST   | `/private/deletePaymentRail` | form-encoded       | Delete a rail by id |
| POST   | `/private/queryPayments`     | form-encoded       | Payment history     |

> **INFO:** `/private/addPaymentRail` is the **only** endpoint that takes `application/json`. The rest of `/private/*` use `application/x-www-form-urlencoded`.

### Create a rail

`railtype` is `FiatToStablecoin` or `StablecoinToFiat`. Provide `sender`, `instructions`, and the leg-specific destination.

```json
{  "railtype": "FiatToStablecoin",  "sender": {    "partyname": { "firstname": "Ada", "lastname": "Lovelace" },    "address": {      "country": "CH", "state": "ZH", "postalcode": "8001",      "city": "Zurich", "street": "Bahnhofstrasse",      "buildingno": "1", "addressline1": "", "addressline2": ""    },    "partytype": "individual"  },  "wallet": { "destination": "0xabc...", "memo": null, "dest_tag": null },  "instructions": { "asset": "VCHF", "currency": "CHF", "blockchain": "ethereum" }}
```

For `StablecoinToFiat`, replace `wallet` with `bankaccount{ destination }`.

```json
{  "railid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",  "status": "active",  "reason": null}
```

Store the `railid` (a UUID) to query, reuse, or delete the rail.

### Poll payments

Poll `/private/queryPayments` for payment status, and `/private/queryPaymentRails` to list active rails.

## Verify

A public `GET /client/quotes` returns `200` with a `quotes` array. `addPaymentRail` returns `200` with a `railid` and `status`.

## Common errors

| `code` / `status`         | Meaning                                   | Fix                                                 |
| ------------------------- | ----------------------------------------- | --------------------------------------------------- |
| `400` invalid railtype    | Not `FiatToStablecoin`/`StablecoinToFiat` | Use a valid `railtype`                              |
| `400` missing destination | Wrong leg fields                          | `wallet` for fiat→coin, `bankaccount` for coin→fiat |
| `404` rail not found      | Wrong `railid`                            | List rails via `queryPaymentRails`                  |
| `429` rate limited        | Over 1 req/sec per key                    | Backoff                                             |

## Next steps

* [Trading](/vnx-global/developer/api/trading.md)
* [Integrate Stablecoin Mint](/vnx-global/developer/guides/integrate-stablecoin-mint.md)
* [Integrate Stablecoin Redeem](/vnx-global/developer/guides/integrate-stablecoin-redeem.md)

## Related

* [API Overview](/vnx-global/developer/api/overview.md)
* [On Off ramp](/vnx-global/institutional/products/on-off-ramp.md)
* [FX Platform](/vnx-global/institutional/products/fx-platform.md)
* [Glossary](/vnx-global/glossary.md)
