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

# Prerequisites

*Get an account, KYB clearance, an ECDSA key pair, and whitelisted withdrawal addresses before your first API call.*

## Before you begin

You will need:

* A legal entity that has cleared VNX KYB (institutional onboarding).
* Sign-off on the relevant Services Agreement: Stablecoin issuance/redemption or Crypto Conversion.
* An ECDSA key pair generated in the VNX account portal at [my.vnx.io](https://my.vnx.io). VNX stores your public key; you keep the private key.
* For withdrawals: at least one whitelisted on-chain address per supported chain, with Travel Rule originator/beneficiary data captured ahead of time.

## Steps

## Submit KYB and onboarding documents

Submit KYB and onboarding documents to your VNX onboarding contact. Institutional onboarding includes entity verification, beneficial-owner checks, and risk classification.

## Sign the relevant Services Agreement

Sign the relevant Services Agreement for the products you intend to integrate (Stablecoins, Onramp/Offramp).

## Generate an ECDSA key pair

Generate an ECDSA key pair in the VNX account portal at [my.vnx.io](https://my.vnx.io). Generate a **separate key pair per environment** (test vs production). Store the private key in a secret manager; VNX keeps only the public key. You will sign every `/private/*` request with this key — see Authentication.

## Whitelist withdrawal addresses

Whitelist withdrawal addresses in the portal for any chain you will withdraw to, capturing Travel Rule data. VCHF is deployed on 6 chains and VGBP on 4 chains. Get whitelisted addresses later with `POST /private/withdrawAddresses`.

## Obtain test access

Obtain test access to the UAT environment from your VNX onboarding contact, then run the first API call check.

## Verify

Call a public endpoint to confirm connectivity (no signing required, only `User-Agent`):

```bash
curl -H "User-Agent: MyClient/1.0" \     https://api.uat.vnx.io/api/v1/client/assets
```

Expected: HTTP 200 with the list of supported assets. If this works, move on to a signed `POST /private/accountBalance` (see first API call).

## Common errors

| Code                    | Meaning                                        | Fix                                                                                 |
| ----------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------- |
| 401 signature failure   | Bad signing string, wrong key, or stale nonce  | Re-check the signing string, public key, and that the nonce is higher than the last |
| 403 `kyb_required`      | Caller's account has not cleared KYB           | Complete institutional onboarding first                                             |
| 403 `agreement_missing` | Services Agreement not signed for this product | Sign the relevant Services Agreement                                                |
| 429 rate limited        | Exceeded 1 request/sec per public key          | Back off; see retries                                                               |

## Next steps

* [First API Call](/vnx-global/developer/quickstart/first-api-call.md)
* [Sandbox vs Production](/vnx-global/developer/quickstart/sandbox-vs-production.md)
* [Authentication](/vnx-global/developer/concepts/authentication.md)

## Related

* [First API Call](/vnx-global/developer/quickstart/first-api-call.md)
* [Sandbox vs Production](/vnx-global/developer/quickstart/sandbox-vs-production.md)
* [Glossary](/vnx-global/glossary.md)
