VaultRoute
Home Developers White-label OpenAPI
Sign in Create account
← Developers

API reference

Base URL: https://vaultroute.store/api · JSON over HTTPS · crypto-only billing

Authentication

Create an API key in Settings → API keys inside the dashboard. The token is shown once, starts with vrk_, and is sent as a bearer token:

curl https://vaultroute.store/api/auth/me \
  -H "Authorization: Bearer vrk_your_token_here"

Browsers signed in to the dashboard can use the same endpoints with the session cookie instead. API keys are scoped to one customer account. There are no multi-tenant or reseller keys — each deployment has its own users, keys and data.

Treat a key like a password. Revoke it from Settings if it leaks. Keys are stored as SHA-256 hashes, so the server cannot show an existing token again.

Conventions

  • Send Content-Type: application/json on POST requests.
  • Amounts are integer cents (1500 = $15.00).
  • Data quantities are bytes in responses and GB in requests (1 GB = 1,000,000,000 bytes).
  • Timestamps are ISO-8601 UTC strings.
  • Mutating order calls accept an idempotencyKey; retrying the same key returns the original order.
  • Success responses include "ok": true. Failures return an HTTP status plus { "ok": false, "error": "…", "code": "…" }.

Errors

StatusMeaning
400Invalid input, missing acknowledgement, or a non-crypto payment method.
401Missing or invalid credentials.
402Prepaid balance is too low for the order.
403Admin-only route, cross-origin browser request, or disabled account.
404Unknown resource.
409Conflict such as a duplicate email or an already-paid invoice.
429Rate limited; check the Retry-After header.
502The upstream network or payment provider could not fulfill the request.

Public endpoints

EndpointDescription
GET /api/healthLiveness probe. No auth.
GET /api/configBrand, retail prices, limits and payment mode.
GET /api/openapi.jsonThis API as an OpenAPI 3.1 document.

Accounts

EndpointDescription
POST /api/auth/registerCreate an account. Body: email, password (10+ chars), name, acceptAup: true.
POST /api/auth/loginSign in and set the session cookie. Body: email, password.
GET /api/auth/meCurrent user plus stats (balance, active lines, data balance).
POST /api/auth/logoutDestroy the current session.
POST /api/account/profileUpdate name.
POST /api/account/passwordChange password. Body: currentPassword, newPassword.
GET /api/account/api-keysList keys (prefix and metadata only, never the token).
POST /api/account/api-keysCreate a key. Body: name. The token is returned once.
DELETE /api/account/api-keys/:idRevoke a key immediately.

Dedicated IPs

EndpointDescription
GET /api/catalog/countriesAvailable countries with counts and the single-IP price.
GET /api/catalog/cities?country=USCities for a country.
POST /api/orders/quotePrice a quantity. Body: count (1–500).
POST /api/ordersBuy IPs from the prepaid balance.
GET /api/ordersOrder history.

Create an IP order. The acknowledgement is mandatory and enforced server-side:

curl -X POST https://vaultroute.store/api/orders \
  -H "Authorization: Bearer vrk_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{
    "country": "US",
    "city": "Chicago",
    "count": 2,
    "idempotencyKey": "order-2026-001",
    "acknowledgeShortLived": true
  }'

The response contains the order and the delivered lines. Lines are raw IP:port:username:password credentials; the upstream hostname is never exposed.

{
  "ok": true,
  "order": { "id": "ord_…", "type": "ip", "count": 2, "status": "paid", "…": "…" },
  "proxies": [
    {
      "host": "203.0.113.10",
      "port": 8000,
      "username": "…",
      "password": "…",
      "country": "US",
      "city": "Chicago",
      "expiresAt": "2026-11-11T10:00:00.000Z",
      "status": "active",
      "plan": "ip"
    }
  ],
  "reused": false
}
A dedicated IP can disconnect before its 24-hour window ends. No replacement IP is provided for an early disconnect, and acknowledgeShortLived: true is required on every order. Order dedicated IPs only for short tasks where that is acceptable.

Bandwidth packages

EndpointDescription
GET /api/gb/plansGB tiers, line limits and minimum purchase.
POST /api/gb/quotePrice a package. Body: gb, lines.
POST /api/gb/ordersBuy bandwidth. Body: gb, lines, country, optional city, idempotencyKey.
GET /api/gb/ordersBandwidth order history with per-order quotas.
GET /api/gb/usageCombined per-customer data balance and cutoff state.
POST /api/gb/usage/refreshAsk the server to poll usage now (throttled).
GET /api/gb/export?format=txt|csv|jsonExport live bandwidth lines.
curl -X POST https://vaultroute.store/api/gb/orders \
  -H "Authorization: Bearer vrk_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{ "gb": 10, "lines": 3, "country": "US", "idempotencyKey": "gb-2026-001" }'

GET /api/gb/usage returns the account-level balance:

{
  "ok": true,
  "usage": {
    "quotaBytes": 10000000000,
    "usedBytes": 2500000000,
    "remainingBytes": 7500000000,
    "usedGb": 2.5,
    "remainingGb": 7.5,
    "percent": 25,
    "activeOrders": 1,
    "exhaustedOrders": 0,
    "revokedLines": 0,
    "disconnectedAt": null,
    "isolated": true
  },
  "orders": [ … ],
  "syncedAt": "2026-11-10T09:00:00.000Z"
}
Usage is metered by the upstream at account level and attributed to this customer first. A customer is never charged against another customer's balance. When the combined balance reaches zero, every bandwidth line on that account is revoked together; other accounts are unaffected.

Delivered lines and health

EndpointDescription
GET /api/proxies?status=active&plan=ip|gbDelivered lines. Omit filters for everything.
GET /api/proxies/export?format=txt|csv|json&plan=ip|gbDownload lines.
POST /api/proxies/check?plan=ip|gbServer-side connectivity check for up to 50 active lines.

Crypto billing

EndpointDescription
GET /api/billing/invoicesInvoice history with provider status and checkout URL.
POST /api/billing/invoicesCreate a hosted crypto invoice. Body: amountCents and method: "crypto".
POST /api/billing/invoices/:id/syncPoll the provider as a backup for a missed callback.
curl -X POST https://vaultroute.store/api/billing/invoices \
  -H "Authorization: Bearer vrk_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{ "amountCents": 5000, "method": "crypto" }'
{
  "ok": true,
  "invoice": {
    "id": "inv_…",
    "reference": "INV-AB12CD",
    "amountCents": 5000,
    "method": "crypto",
    "provider": "nowpayments",
    "providerStatus": "waiting",
    "paymentUrl": "https://nowpayments.io/payment/?iid=…",
    "status": "pending",
    "createdAt": "2026-11-10T09:00:00.000Z"
  },
  "checkout": { "provider": "nowpayments", "url": "https://nowpayments.io/payment/?iid=…" }
}

Send the customer to checkout.url. The wallet is credited only when the provider reports finished. Card and bank methods return 400 crypto_only. If an IPN is delayed, call the sync endpoint; completed invoices stay paid and are never credited twice.

Webhooks

The deployment receives NOWPayments IPNs at https://vaultroute.store/api/webhooks/nowpayments. The server verifies the x-nowpayments-sig HMAC-SHA512 signature with the server-side IPN secret before doing anything. This endpoint is for the payment provider only; customers do not call it.

Admin endpoints

Admin accounts can use /api/admin/overview, /api/admin/users, /api/admin/orders, /api/admin/invoices, /api/admin/settings and /api/admin/usage/sync. Admin keys are ordinary API keys on an account whose role is admin. Keep such keys on the server, never in a browser bundle.

Rate limits

Sign-in, registration, invoice creation, status polling and API-key creation are rate limited per account and IP. A limited response is 429 with Retry-After in seconds. Order calls are also serialised per user with an idempotency key to prevent double charges.

OpenAPI

The machine-readable specification is at /api/openapi.json. Import it into Postman or Swagger UI and set the bearer token as your auth variable.

© 2026 VaultRoute Labs. All rights reserved.
Terms Acceptable use Privacy White-label