The VPNAPI for yourThe VPN APIfor your agents.
Give your AI agents their own WireGuard VPN. They buy it with USDC in one API call, block malicious domains with DNS filtering, and never need an account.
Agents: start at llms.txt. Base URL https://api.windscribe.com/vpn

Use cases
What agents do with their own VPN
Agents act on the open web for you. These are the jobs where a private, controllable connection matters.
- Privacy
Browse privately
Sites see a Windscribe IP, never your home or office network.
- Geo testing
See another country
Check local prices and search results the way people there see them.
- Security
Lock down any network
Hotel Wi-Fi, robots and edge devices get an encrypted WireGuard tunnel.
- Platforms
A tunnel per customer
One key and term per workspace or job. No accounts to manage.
DNS filtering with ROBERT
Lock down what your agent can reach
Block malware and phishing domains so an agent can't be steered to them, or drop ads and trackers to cut noise and data use. One API request switches the lists for a key, and the tunnel's DNS resolver enforces them.
- search.engine.example
- shocking.headlines.example
- miner.hashpool.example
- sync.tracker.exampleAds + TrackersBLOCKED
- shop.retailer.example
- odds.casino.example
- c2.botnet.exampleMalwareBLOCKED
- ads.network.exampleAds + TrackersBLOCKED
- cdn.images.example
PUT /vpn/wireguard/settings{"robert": ["malware","ads"]}→ wireguard.dns = 10.255.255.3
Guardrails for autonomous agents
An agent that follows a bad link or an injected instruction still can't resolve known malware, phishing or botnet domains.
Less data, less noise
Ad and tracker blocking keeps pages lighter, so agents spend fewer tokens and less bandwidth on clutter.
Set per key, by API
New keys start with malware blocking on. Change lists any time with:
PUT /vpn/wireguard/settings

Privacy and control
Nothing to sign up for, nothing to leak
Zero accounts
The API never asks who you are. Your agent generates a WireGuard key pair, and the public key is the whole identity. The private key never leaves the machine, and every request that manages the connection is signed with it, so keep it as private as the connection itself.
Your agent pays on its own
USDC on Base, settled per request through the open x402 standard. No checkout page, no card on file, and retrying a payment never charges twice.
Works with any WireGuard client
A request signed with your key returns the address, DNS resolver and preshared key, so building a wg-quick config takes one template.
Renew, move or end access
Buy more time, move access to a new key, or revoke it immediately, each with a single signed request.
How an agent buys a VPN with x402
From nothing to a tunnel in four steps
Plain HTTP and the open x402 payment standard. Any x402 v2 client can pay without custom code.
- 402
Ask for a term
Send a WireGuard public key and a number of months. The answer is the exact price, network and payee.
POST /vpn/wireguard
- x402
Pay the quote
Sign a USDC transfer authorization and send the same request again with it.
PAYMENT-SIGNATURE: …
- 201
Build the config
A signed request returns the address, DNS resolver and preshared key. Pick an exit from the locations list.
GET /vpn/wireguard/locations
- WG
Connect
Bring the tunnel up with any WireGuard client and set the filters the task needs.
wg-quick up ./windscribe.conf
Pricing
One price, paid in USDC
Paid in USDC on Base with x402. No subscription and no automatic renewal: buy again with the same key to add time, up to 12 months ahead. Payments are final.

Docs for developers and agents
Everything an agent needs to start
The OpenAPI spec describes every endpoint. llms.txt is the short version for agents.
Read https://windscribe.com/vpn-api/llms.txt. Create a WireGuard key pair on this machine, buy one month of Windscribe VPN access for it with x402, turn on malware and ad blocking, then write a wg-quick config for the closest location. Keep the private key on this machine.
- Base URL
- https://api.windscribe.com/vpn
- Discovery
- GET /vpn
- Payment
- x402 v2, exact scheme, USDC on Base
- Auth
- Requests signed with the WireGuard key (wg-xeddsa-v1)
Explore the API9 endpoints, request and response fields, code in cURL, Python and JavaScriptOpen
/vpn/wireguardBuy time for a WireGuard key
Creates a new entitlement, extends an active or expired one from max(now, expires), or reactivates a revoked one with a fresh PSK and a term starting now. Send without PAYMENT-SIGNATURE for an x402 quote, then retry the identical body with PAYMENT-SIGNATURE. A wg-xeddsa-v1 signature by the key in the body is optional; when sent it must verify, and a signed quote also checks that the key can buy the term now. The response carries `psk` only when the request is signed by the key: anyone can pay for any key. Retrying the same PAYMENT-SIGNATURE never pays twice.
Headers
Request body · application/json
123456712Responses
Payment settled and time bought
activeexpiredrevokedmalwareadssocialporngamblingfakenewscompetitorscryptominers123456712Shown fields sit inside data.
# 1. Quote. The x402 PaymentRequired object is in the PAYMENT-REQUIRED header (base64). curl -si https://api.windscribe.com/vpn/wireguard \ -H 'Content-Type: application/json' \ -d '{"wg_pubkey":"<your WireGuard public key>","months":1}' # 2. Pay with any x402 v2 client, or build the payload as in the Python tab, # then send the same request with the payment. curl -s https://api.windscribe.com/vpn/wireguard \ -H 'Content-Type: application/json' \ -H "PAYMENT-SIGNATURE: $PAYMENT" \ -d '{"wg_pubkey":"<your WireGuard public key>","months":1}'
{ "data": { "pubkey": "j0DFrbaPJWJK5bIU6nZ6bslNgp09e14a0bpvPiE4KF8=", "status": "active", "expires": 1797207705, "ipv4": "100.88.12.34", "ipv6": "fd54:4::5c0c:2a2", "robert": [ "malware" ], "wireguard": { "address": "100.88.12.34/32", "address_v6": "fd54:4::5c0c:2a2/128", "dns": "10.255.255.2", "allowed_ips": "0.0.0.0/0, ::/0", "endpoint_port": 443 }, "purchasable_terms": [ 1, 2, 3, 4, 5, 6, 7 ], "psk": "EXAMPLEexampleEXAMPLEexampleEXAMPLEexample0=", "success": 1, "payment_id": "6c1f0e9a2b7d4c3e8f5a1b0c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e", "settlement_reference": "0xeb0c71793e4e18a80c8123e34c8f908404f4ee107d3c8dfea4c742ad73e01ccf" } }


Give your agents their own VPN.
Quote with POST /vpn/wireguard, pay with x402, connect with WireGuard.



Questions
Before you buy
What is the Windscribe VPN API?
An HTTP API that sells Windscribe WireGuard VPN access directly to a WireGuard public key. AI agents, scripts and devices can buy, use and manage a connection without a Windscribe account.
Can an AI agent buy a VPN on its own?
Yes. The agent sends its WireGuard public key and a term, receives an HTTP 402 quote, pays it in USDC with x402 and gets the values for a WireGuard config back. No person has to sign up or confirm anything.
Do I need a Windscribe account?
No. The API never asks for an email, password or session. Your WireGuard public key identifies the purchase, and requests that manage it are signed with the matching private key.
How do I pay?
With USDC on Base, through x402 v2. The first request returns the exact amount and receiving address; your client signs a USDC transfer authorization and sends the request again.
Is it a subscription?
No. Each payment buys a fixed term of 1 to 7 or 12 months. Buy again with the same key to add time, up to 12 months ahead.
Can I get a refund?
No. Payments are final. Revoking a key ends access immediately and forfeits the remaining time; buying time again reactivates the key.
Can I control which domains my agent can reach?
Yes. Each key has ROBERT DNS filter lists: Malware (including phishing and botnet servers), Ads + Trackers, Social Networks, Porn, Gambling, Clickbait, Crypto and Other VPNs. New keys start with Malware on, and PUT /vpn/wireguard/settings changes the lists at any time. Custom domain rules are not supported.
Which VPN protocol does it use?
WireGuard. The API returns the interface address, DNS resolver, preshared key and endpoint port, so any WireGuard client, including wg-quick, can connect.
What does Windscribe store?
The public key, a generated preshared key, the expiry, your ROBERT filters, and for each payment its product details, state and settlement transaction hash. Windscribe does not store your wallet address, but the settlement is public on Base and shows the paying wallet.
What if my WireGuard key is already in use?
A key that belongs to a Windscribe account or a partner is refused with wireguard_key_exists before any money moves. Generate a new key and try again.
Which servers can I use?
The premium WireGuard locations returned by GET /vpn/wireguard/locations while your access is active. Static-IP servers are not included.


