All systems operational Amsterdam · Paris · Reykjavík +5 Pay with Cryptocurrency
REST API · v1

Deploy a VPS with a POST.

A real, no-KYC REST API: create an account, fund a balance in crypto, and order clean-IP offshore servers — from your terminal or an autonomous agent. No dashboard required.

Base URL https://vpscrypto.io/api/v1 Bearer vpsk_… JSON x402 USDC · Base
Fenrir beside an API console
01 — Quickstart

Zero to root, in five calls.

Every endpoint lives under https://vpscrypto.io/api/v1, speaks JSON, and (except account creation, catalog and health) expects an Authorization: Bearer API key. No KYC, no card.

1. Create an account — returns an api_key (your Bearer credential) and a login_token for the web dashboard. Both are shown once.

bash
curl -X POST https://vpscrypto.io/api/v1/account

# → {"api_key":"vpsk_…","login_token":"XXXX-XXXX-XXXX-XXXX", …}
export VPSK="vpsk_your_key_here"

2. Fund your balance — create a top-up invoice in any supported coin (here Monero):

bash
curl -X POST https://vpscrypto.io/api/v1/topups \
  -H "Authorization: Bearer $VPSK" -H "Content-Type: application/json" \
  -d '{"amount":50,"coin":"XMR"}'

# → deposit_address + deposit_amount + ref. Pay it, then poll:
curl https://vpscrypto.io/api/v1/topups/<ref> -H "Authorization: Bearer $VPSK"

3. Deploy a server — once the balance is funded, order from the catalog. Omit root_password and we generate a strong one (returned once):

bash
curl -X POST https://vpscrypto.io/api/v1/servers \
  -H "Authorization: Bearer $VPSK" -H "Content-Type: application/json" \
  -d '{"plan":"hunter","location":"nl","os":"debian-13"}'

# → {"server":{"id":123,"ip":null,"username":"root","root_password":"…"}}

Want the whole flow to run with no human — including payment? Fund with coin: "USDCBASE" to pay gaslessly over x402 on Base. See the Agents guide.

02 — Authentication

Bearer API keys.

Authenticate every call with an API key in the Authorization header. Keys start with vpsk_ and are stored only as a hash — keep them secret.

http
Authorization: Bearer vpsk_a3e5e745b6952c772f5731ab1d87fac4…

Get your first key from POST /account. Mint more, list, or revoke them at any time:

POST/api/v1/keysMint a new key
GET/api/v1/keysList active keys
DELETE/api/v1/keys/{id}Revoke a key

The login_token from POST /account signs into the web dashboard at /account — same account, two credentials.

03 — Catalog

Plans, locations & images.

A single public call returns everything you need to build an order — no auth required.

bash
curl https://vpscrypto.io/api/v1/catalog

Plan ids run pupfenrir (10 tiers). Location ids: nl, fr, ro, bg, se, is, ch, my. Images include Debian 12, Debian 13, Ubuntu 24.04 LTS, Ubuntu 22.04 LTS, AlmaLinux 9, Rocky Linux 9 and more. Monthly price = base × location modifier; annual = ×10 (2 months free).

04 — Top-ups

Fund the balance in crypto.

Top-ups are prepaid and on-chain only ($25–$2000). Classic coins return a deposit address; USDCBASE returns an x402 challenge for gasless settlement.

POST/api/v1/topupsCreate invoice / x402
GET/api/v1/topups/{ref}Poll status, credit balance

Supported coins: BTC, XMR, ETH, LTC, USDTTRC, USDT, plus USDCBASE for x402. Poll the ref until status is completed — that's when the balance is credited.

Crypto settlement is irreversible; top-ups are non-refundable. For the x402 (USDC on Base) signed-payment flow, see the Agents guide.

05 — Servers

Order & manage.

Ordering charges the price from your balance in one atomic step. A 402 insufficient_balance response includes the exact deficit so an agent knows how much to top up.

POST/api/v1/serversOrder from balance
GET/api/v1/serversList your servers
GET/api/v1/servers/{id}One server
GET/api/v1/servers/{id}/credentialsReveal root login

The root password is returned once at creation and is always revealable from the credentials endpoint. Connect over SSH as documented in the Documentation.

06 — Errors & limits

Predictable failures.

Errors use standard HTTP status codes with a stable machine-readable body. 402 means a payment step is required (insufficient balance, or an x402 challenge).

json
{
  "error": "insufficient_balance",
  "message": "Top up your balance before ordering. Deficit: $19.00.",
  "price": 19, "balance": 0, "deficit": 19
}
  • 200 / 201 — success.
  • 400 — bad input (invalid_plan, invalid_coin, amount_too_low…).
  • 401 — missing or invalid API key (unauthorized).
  • 402 — payment required (insufficient_balance, or an x402 accepts block).
  • 404 — unknown resource. 5xx — retry shortly.

The full machine-readable contract lives in the OpenAPI 3.1 spec.

Ship it.

Create an account, grab an API key and deploy your first offshore VPS in minutes — paid in crypto, no KYC.

Fenrir on guard