Skip to main content
Windscribe

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.

Filter lists
DNS lookups3 of 9 blocked
  1. search.engine.example
  2. shocking.headlines.example
  3. miner.hashpool.example
  4. sync.tracker.exampleAds + TrackersBLOCKED
  5. shop.retailer.example
  6. odds.casino.example
  7. c2.botnet.exampleMalwareBLOCKED
  8. ads.network.exampleAds + TrackersBLOCKED
  9. 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

Identity

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.

emailpasswordcardsessionwg_pubkey ✓
x402 payments

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.

Standard WireGuard

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.

Full control by API

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.

  1. 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

  2. x402

    Pay the quote

    Sign a USDC transfer authorization and send the same request again with it.

    PAYMENT-SIGNATURE: …

  3. 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

  4. 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.

Monthly$0
YearlySave $39$0

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.

Hand this to your agent
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.
At a glance
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
POST/vpn/wireguard

Buy 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.

Signature optionalx402 · USDC on BasebuyWireGuardTime

Headers

Header
Required
Description
PAYMENT-SIGNATURE
no
Base64 x402 v2 PaymentPayload. Omit to receive a quote. Its authorization's validBefore must be at most maxTimeoutSeconds, plus 30 seconds of clock skew, from now.
X-Windscribe-WireGuard-Key
no
Part of the optional purchase signature.
Content-Digest
no
Part of the optional purchase signature.
Signature-Input
no
Part of the optional purchase signature.
Signature
no
Part of the optional purchase signature.

Request body · application/json

Field
Type
Description
wg_pubkeyrequired
string
A WireGuard X25519 public key as `wg pubkey` prints it: canonical base64 of 32 bytes, u below 2^255 - 19 (top bit clear), and not a small-order point.
monthsrequired
integer
123456712

Responses

Payment settled and time bought

Field
Type
Description
pubkeyrequired
string
A WireGuard X25519 public key as `wg pubkey` prints it: canonical base64 of 32 bytes, u below 2^255 - 19 (top bit clear), and not a small-order point.
statusrequired
string
activeexpiredrevoked
expiresrequired
integer
Unix seconds; access ends exactly then.
ipv4required
string
ipv6required
string
robertrequired
string[]
malwareadssocialporngamblingfakenewscompetitorscryptominers
wireguardrequired
object
[Interface] values; the [Peer] comes from a locations group and node.
wireguard.addressrequired
string
Interface IPv4 address with prefix, derived from the public key.
wireguard.address_v6required
string
Interface IPv6 address with prefix, derived from the public key.
wireguard.dnsrequired
string
Windscribe resolver for the current ROBERT filters.
wireguard.allowed_ipsrequired
"0.0.0.0/0, ::/0"
wireguard.endpoint_portrequired
443
purchasable_termsrequired
integer[]
Terms that a purchase would accept now without exceeding the 12-month cap.
123456712
psk
string
WireGuard preshared key for the [Peer] section. Only when the request is signed by the key; otherwise read it with a signed GET /vpn/wireguard.
successrequired
1
payment_idrequired
string | null
Null when rotate moved an active entitlement.
settlement_referencerequired
string | null
Base transaction hash of the settlement.

Shown fields sit inside data.

Request
# 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}'
Example response · 201
{
  "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"
  }
}
All Your Devices
Stars

Give your agents their own VPN.

Quote with POST /vpn/wireguard, pay with x402, connect with WireGuard.

All Your Devices

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.