API reference
Top-ups
Add funds by card, crypto or wire.
13 operationsBase URL https://packetexchange.io/api/v1Postman collection
BrowseTop-ups
List your top-ups
GET/
- Access
- API key. Full-access keys only; not reachable by scoped keys.
- Rate limit
- 100 requests per second (the default)
Your 50 most recent top-ups of every method and status.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
methodrequireddata[].method | string | stripe = cardOne of crypto, wire, stripe, x402 |
amountUsdrequireddata[].amountUsd | money | USD as a decimal string with exactly 6 places, e.g. "0.012500". |
statusrequireddata[].status | string | -One of pending, confirmed, rejected |
cryptoTokenrequireddata[].cryptoToken | string | null | - |
cryptoNetworkrequireddata[].cryptoNetwork | string | null | - |
cryptoTxHashrequireddata[].cryptoTxHash | string | null | - |
wireReferencerequireddata[].wireReference | string | null | - |
depositAddressrequireddata[].depositAddress | string | null | - |
depositMemorequireddata[].depositMemo | string | null | - |
createdAtrequireddata[].createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
confirmedAtrequireddata[].confirmedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Start a card top-up
POST/
- Access
- API key. Scoped keys need
billing:write. - Rate limit
- 100 requests per second (the default)
- Safe retries
- Send
X-Idempotency-Key; a replay within 24 hours returns the first response. - Moves money
- Starts a payment to top up your balance.
Creates a pending top-up and a card payment to confirm client-side with clientSecret and publishableKey. The balance is credited when the card processor confirms the payment. If card payments are not enabled, the pending top-up is returned with a message instead. Requires identity verification when the platform enforces it (403 KYC_REQUIRED), and is subject to account flags and top-up velocity limits.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string | Any unique string (a UUID is ideal). Replays within 24 hours return the first response instead of acting twice. |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
amountUsdrequired | number | -5 to 10000 |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
topupIdrequireddata.topupId | string (uuid) | - |
amountUsdrequireddata.amountUsd | number | Echo of the requested amount (JSON number) |
methodrequireddata.method | string | -One of stripe |
statusrequireddata.status | string | -One of pending |
clientSecretdata.clientSecret | string | - |
publishableKeydata.publishableKey | string | null | - |
messagedata.message | string | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
KYC_REQUIRED,STRIPE_ERROR
Top up with an x402 USDC payment
POST/
- Access
- API key. Scoped keys need
billing:write. - Rate limit
- 100 requests per second (the default)
- Moves money
- Starts a payment to top up your balance.
Pay-per-request top-up using the x402 protocol. Call once without an X-PAYMENT header to receive a 402 challenge with the payment requirements; retry with a signed X-PAYMENT header to settle and be credited in the same request. A replayed payment returns the original top-up with already: true. It settles real USDC on Base mainnet into your live balance, so test keys are refused with 403 TEST_KEY_NOT_ALLOWED. Requires identity verification when the platform enforces it (403 KYC_REQUIRED), and is subject to account flags and top-up velocity limits.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
amountUsdrequired | number | -5 to 50000 |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
topupIdrequireddata.topupId | string (uuid) | - |
amountUsdrequireddata.amountUsd | number | - |
methodrequireddata.method | string | -One of x402 |
statusrequireddata.status | string | -One of pending, confirmed |
networkdata.network | string | - |
txHashdata.txHash | string | - |
payerdata.payer | string | - |
newBalancedata.newBalance | number | Balance after crediting (JSON number) |
alreadydata.already | boolean | - |
messagedata.message | string | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
KYC_REQUIRED,TEST_KEY_NOT_ALLOWED
Start a crypto top-up
POST/
- Access
- API key. Scoped keys need
billing:write. - Rate limit
- 10 requests per minute
- Safe retries
- Send
X-Idempotency-Key; a replay within 24 hours returns the first response. - Moves money
- Starts a payment to top up your balance.
Returns where to send funds. When a unique deposit address (or memo) could be allocated, autoCredit is true and the deposit credits automatically on confirmation; otherwise send to the shared address quoting reference and it is credited after manual verification. A memo, when present, is mandatory. Requires identity verification when the platform enforces it (403 KYC_REQUIRED), and is subject to account flags and top-up velocity limits.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string | Any unique string (a UUID is ideal). Replays within 24 hours return the first response instead of acting twice. |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
amountUsdrequired | number | -5 to 50000 |
tokenrequired | string | -One of BTC, ETH, USDT, USDC, SOL |
networkrequired | string | -One of bitcoin, ethereum, solana, tron, polygon |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
topupIdrequireddata.topupId | string (uuid) | - |
amountUsdrequireddata.amountUsd | number | - |
tokenrequireddata.token | string | -One of BTC, ETH, USDT, USDC, SOL |
networkrequireddata.network | string | -One of bitcoin, ethereum, solana, tron, polygon |
depositAddressrequireddata.depositAddress | string | - |
memorequireddata.memo | string | null | - |
referencerequireddata.reference | string | - |
autoCreditrequireddata.autoCredit | boolean | - |
statusrequireddata.status | string | -One of pending |
messagerequireddata.message | string | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
KYC_REQUIRED
Start a wire-transfer top-up
POST/
- Access
- API key. Scoped keys need
billing:write. - Rate limit
- 100 requests per second (the default)
- Safe retries
- Send
X-Idempotency-Key; a replay within 24 hours returns the first response. - Moves money
- Starts a payment to top up your balance.
Returns bank details and a reference you must quote on the transfer. Credited within 1-3 business days of receipt. 503 WIRE_UNAVAILABLE when wire is not offered. Requires identity verification when the platform enforces it (403 KYC_REQUIRED), and is subject to account flags and top-up velocity limits.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string | Any unique string (a UUID is ideal). Replays within 24 hours return the first response instead of acting twice. |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
amountUsdrequired | number | -100 to 100000 |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
topupIdrequireddata.topupId | string (uuid) | - |
amountUsdrequireddata.amountUsd | number | - |
wireReferencerequireddata.wireReference | string | - |
bankDetailsrequireddata.bankDetails | object | - |
bankNamerequireddata.bankDetails.bankName | string | - |
accountNamerequireddata.bankDetails.accountName | string | - |
ibanrequireddata.bankDetails.iban | string | - |
swiftrequireddata.bankDetails.swift | string | - |
currencyrequireddata.bankDetails.currency | string | -One of USD |
statusrequireddata.status | string | -One of pending |
messagerequireddata.message | string | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
KYC_REQUIRED,WIRE_UNAVAILABLE
List available top-up methods and their limits
GET/
- Access
- API key. Full-access keys only; not reachable by scoped keys.
- Rate limit
- 100 requests per second (the default)
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
striperequireddata.stripe | object | - |
enabledrequireddata.stripe.enabled | boolean | - |
minAmountrequireddata.stripe.minAmount | number | - |
maxAmountrequireddata.stripe.maxAmount | number | - |
currencyrequireddata.stripe.currency | string | - |
processingTimerequireddata.stripe.processingTime | string | - |
cryptorequireddata.crypto | object | - |
enabledrequireddata.crypto.enabled | boolean | - |
minAmountrequireddata.crypto.minAmount | number | - |
maxAmountrequireddata.crypto.maxAmount | number | - |
tokensrequireddata.crypto.tokens | string[] | - |
networksrequireddata.crypto.networks | string[] | - |
processingTimerequireddata.crypto.processingTime | string | - |
wirerequireddata.wire | object | - |
enabledrequireddata.wire.enabled | boolean | - |
minAmountrequireddata.wire.minAmount | number | - |
maxAmountrequireddata.wire.maxAmount | number | - |
currencyrequireddata.wire.currency | string | - |
processingTimerequireddata.wire.processingTime | string | - |
bankDetailsrequireddata.wire.bankDetails | object | null | - |
bankNamerequireddata.wire.bankDetails.bankName | string | - |
accountNamerequireddata.wire.bankDetails.accountName | string | - |
ibanrequireddata.wire.bankDetails.iban | string | - |
swiftrequireddata.wire.bankDetails.swift | string | - |
currencyrequireddata.wire.bankDetails.currency | string | -One of USD |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Start saving a card for auto-recharge
POST/
- Access
- API key. Full-access keys only; not reachable by scoped keys.
- Rate limit
- 100 requests per second (the default)
- Moves money
- Starts a payment to top up your balance.
Returns a client secret to collect and save a card for later unattended charges. 503 STRIPE_DISABLED when card payments are off.
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
clientSecretrequireddata.clientSecret | string | null | - |
publishableKeyrequireddata.publishableKey | string | null | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
STRIPE_DISABLED,STRIPE_ERROR
List your saved cards
GET/
- Access
- API key. Full-access keys only; not reachable by scoped keys.
- Rate limit
- 100 requests per second (the default)
Brand, last 4 and expiry only. Empty when card payments are off or no card is saved.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string | - |
brandrequireddata[].brand | string | - |
last4requireddata[].last4 | string | - |
expMonthrequireddata[].expMonth | integer | null | - |
expYearrequireddata[].expYear | integer | null | - |
isDefaultrequireddata[].isDefault | boolean | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Set your default card
POST/
- Access
- API key. Full-access keys only; not reachable by scoped keys.
- Rate limit
- 100 requests per second (the default)
- Moves money
- Starts a payment to top up your balance.
The default card is the one auto-recharge charges.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
paymentMethodIdrequired | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
defaultPaymentMethodIdrequireddata.defaultPaymentMethodId | string | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
STRIPE_DISABLED
Remove a saved card
DELETE/
- Access
- API key. Full-access keys only; not reachable by scoped keys.
- Rate limit
- 100 requests per second (the default)
- Moves money
- Starts a payment to top up your balance.
Removing the default card also clears it as default, which stops auto-recharge from charging.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
removedrequireddata.removed | string | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Get your auto-recharge settings
GET/
- Access
- API key. Full-access keys only; not reachable by scoped keys.
- Rate limit
- 100 requests per second (the default)
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
enabledrequireddata.enabled | boolean | - |
thresholdrequireddata.threshold | string | null | USD, 2-decimal string: recharge when the balance falls below this |
amountrequireddata.amount | string | null | USD, 2-decimal string: how much each recharge adds |
dailyCaprequireddata.dailyCap | string | null | USD, 2-decimal string: most that auto-recharge may charge per UTC day |
hasDefaultCardrequireddata.hasDefaultCard | boolean | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Update your auto-recharge settings
PUT/
- Access
- API key. Full-access keys only; not reachable by scoped keys.
- Rate limit
- 100 requests per second (the default)
- Moves money
- Starts a payment to top up your balance.
Send only the fields to change; null clears a value. Enabling requires a default card and both a threshold and an amount.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
enabled | boolean | - |
threshold | number | null | -0 to 100000 |
amount | number | null | -5 to 10000 |
dailyCap | number | null | -0 to 100000 |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as AutoRecharge, shown earlier on this page. |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List your pending top-ups with payment instructions
GET/
- Access
- API key. Full-access keys only; not reachable by scoped keys.
- Rate limit
- 100 requests per second (the default)
Pending crypto and wire top-ups with the address or bank details to complete them. Pending top-ups expire after 7 days. amountUsd here is a plain JSON number.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
methodrequireddata[].method | string | -One of crypto, wire, stripe, x402 |
amountUsdrequireddata[].amountUsd | number | - |
statusrequireddata[].status | string | -One of pending |
referencerequireddata[].reference | string | null | - |
createdAtrequireddata[].createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
ageHoursrequireddata[].ageHours | integer | - |
expiresInDaysrequireddata[].expiresInDays | integer | - |
tokendata[].token | string | null | - |
networkdata[].network | string | null | - |
depositAddressdata[].depositAddress | string | null | - |
bankDetailsdata[].bankDetails | object | null | - |
bankNamerequireddata[].bankDetails.bankName | string | - |
accountNamerequireddata[].bankDetails.accountName | string | - |
ibanrequireddata[].bankDetails.iban | string | - |
swiftrequireddata[].bankDetails.swift | string | - |
currencyrequireddata[].bankDetails.currency | string | -One of USD |
instructionsrequireddata[].instructions | string | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.