> 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/overview.md).

# Overview

*REST + JSON over a versioned **`/api/v1/`** surface, ECDSA-signed private calls, public market data — a single API for VNX stablecoins, conversions, and payment rails.*

## Overview

The VNX API is a versioned REST surface. Public static-data endpoints are authenticated via `x-app-public-key` header `GET` calls; every non read-only `/private/*` endpoint is authenticated by signing the request with an ECDSA key pair. There are no webhooks — poll the `query*` endpoints for async status.

## Base URLs

| Environment | Base URL                         |
| ----------- | -------------------------------- |
| Test (UAT)  | `https://api.uat.vnx.io/api/v1/` |
| Production  | `https://api.vnx.io/api/v1/`     |

## Authentication

Private endpoints use ECDSA (SHA256) key-pair signing. Generate a key pair in the VNX account portal at [my.vnx.io](https://my.vnx.io) and sign every `/private/*` request. See Authentication.

A `x-app-public-key` and `User-Agent` headers are required on **all** requests, public and private.

## Surface map

| Endpoint                      | Method | Auth   | Purpose                              | Reference             |
| ----------------------------- | ------ | ------ | ------------------------------------ | --------------------- |
| `/`                           | GET    | public | Service heartbeat                    | —                     |
| `/client/assets`              | GET    | public | Supported assets, units, blockchains | quotes & rails        |
| `/client/tradingPairs`        | GET    | public | Tradable symbols                     | quotes & rails        |
| `/client/quotes`              | GET    | public | Live ask/bid/last quotes             | quotes & rails        |
| `/private/accountBalance`     | POST   | signed | Account balances                     | accounts & balances   |
| `/private/depositAddress`     | POST   | signed | Deposit wallet address               | accounts & balances   |
| `/private/withdrawAddresses`  | POST   | signed | Whitelisted withdrawal addresses     | accounts & balances   |
| `/private/mintTokens`         | POST   | signed | Issue stablecoins                    | minting & withdrawals |
| `/private/burnTokens`         | POST   | signed | Burn stablecoins                     | minting & withdrawals |
| `/private/withdraw`           | POST   | signed | Withdraw to whitelisted address      | minting & withdrawals |
| `/private/querySupplyChanges` | POST   | signed | Mint/burn history                    | minting & withdrawals |
| `/private/addOrder`           | POST   | signed | Place a FOK limit order              | trading               |
| `/private/queryOrders`        | POST   | signed | Order history                        | trading               |
| `/private/queryTrades`        | POST   | signed | Trade history                        | trading               |
| `/private/addPaymentRail`     | POST   | signed | Create a payment rail                | quotes & rails        |
| `/private/queryPaymentRails`  | POST   | signed | List payment rails                   | quotes & rails        |
| `/private/deletePaymentRail`  | POST   | signed | Delete a payment rail                | quotes & rails        |
| `/private/queryPayments`      | POST   | signed | Payment history                      | quotes & rails        |

## Conventions

* **Content-Type** — `application/x-www-form-urlencoded` or `application/json` for most `/private/*` calls; `application/json` is required **only** for `/private/addPaymentRail`. Public reads are `GET`.
* **No webhooks** — there are no async callbacks. Poll the query endpoints (`querySupplyChanges`, `queryOrders`, `queryTrades`, `queryPayments`) for status.
* **Times** in ISO 8601 / RFC 3339 with timezone.
* **Trading** is limit orders only, Fill-or-Kill (FOK).

## Rate limits

Maximum **1 request per second per public key**. Pace requests accordingly.

## Errors

Errors return JSON with `code`, `status`, and `message`:

```json
{ "code": "INVALID_SIGNATURE", "status": 400, "message": "..." }
```

Business-level errors may also appear as an `error` object inside an otherwise-accepted response, so always inspect the body even on a 200.

## Related

* [Authentication](/vnx-global/developer/concepts/authentication.md)
* [Balances](/vnx-global/developer/api/balances.md)
* [Transfers](/vnx-global/developer/api/transfers.md)
* [Quotes and Conversions](/vnx-global/developer/api/quotes-and-conversions.md)
* [Trading](/vnx-global/developer/api/trading.md)
* [First API Call](/vnx-global/developer/quickstart/first-api-call.md)
