# agvps

> Preferred location: /agents.md (this text is also served at /llms.txt).

> Servers for AI agents, rented by the month: a Linux server (Ubuntu 24.04) with root access and a public IPv4 address, in Germany or Finland. Each call is paid in stablecoins: x402 on Base, Polygon and Solana or MPP on Base. No API keys, accounts or subscriptions.

## When to use this service

- Use it when an agent needs its own Ubuntu Linux server with root access and a public IPv4 address for a workload that can run on a monthly rental. Choose a plan and location, then renew by paying again before expiry.
- Do not use it for short-lived, per-minute compute, other operating systems, or a server that must remain available without renewal. An expired server is removed with its data; orders also depend on available capacity.

## How a call is paid

- POST the JSON body to the endpoint with no payment. The 402 answer carries the quote for exactly what you asked, in the `PAYMENT-REQUIRED` header (x402) and in a `WWW-Authenticate: Payment` challenge (MPP). Sign one and POST the same body again with `PAYMENT-SIGNATURE` (x402) or `Authorization: Payment` (MPP). Every endpoint answers on `/x402/<name>` and on `/mpp/<name>`; both protocols are accepted on both.
- The payment settles only after the call is accepted. A call that cannot be served (sold out, a renewal of an unknown server) is not charged. Retrying with the same payment returns the stored answer.
- Errors the service itself produces are JSON: `{"error": code, "message": text}`. A request body over 64 KiB is refused (413).

## Rent a server

- POST `/x402/vps-small` (1 vCPU, 1 GB RAM, 10 GB NVMe) or `/x402/vps-medium` (2 vCPU, 2 GB RAM, 25 GB NVMe), or the same under `/mpp/`, with `{"location":"de","hostname":"my-server"}`. Both fields are optional: `location` is `de` (Germany, the default) or `fi` (Finland); `hostname` is 1 to 40 lowercase letters, digits or dashes. The server runs Ubuntu 24.04 and has its own IPv4 address.
- The answer is a JSON array with one record: `id`, `secret`, `plan`, `specs`, `os`, `location`, `hostname`, `status` (`queued`), `status_url` and `next`. Keep the id and the secret: the secret is shown only in this answer and is the login for the server's page.
- The server is made after the payment has settled and is ready about 5 to 10 minutes later. Poll `GET /v1/vps` on this site with the id and the secret as HTTP Basic credentials (`curl -u ID:SECRET ORIGIN/v1/vps`). `status` goes `queued`, `provisioning`, `active`. The first answer with `ssh_ready: true` carries `host`, `port`, `user`, `command` and the root `password`, shown once; if you miss it, `POST /v1/vps/reset-password` makes a new one (once every 30 seconds). `POST /v1/vps/reboot` restarts the server.
- A server is paid for one month. `expires_at` in the status says when it stops. Do not wait for it: renew before.

## Renew a server

- POST `/x402/vps-small-renew` or `/x402/vps-medium-renew` (use the one of the server's plan), or the same under `/mpp/`, with `{"id":"vps_0123456789abcdef","months":1}`. `months` is 1 to 6 (default 1); the quote is the plan's monthly price times `months`. A server cannot be paid more than 12 months ahead.
- The answer is a JSON array with one record: `id`, `months`, `status` (`queued`). The extension is applied once the payment has settled (about a minute); `GET /v1/vps` shows the new `expires_at`. Anyone who knows the id can pay for a renewal; only the secret gives access.
- A server that is not renewed stops at its expiry date and is removed soon after, with its data.

## Limits

- When the service is at its capacity, or its supplier cannot take an order, the quote answer carries a plain reason (sold out right now) instead of a price you should sign, and a payment sent anyway is refused before it settles; try again later. Nothing is charged for a refused call.
- Use the servers within the supplier's rules: no spam, malware, botnets, attacks on other networks or mass scanning. Servers used that way are shut down without a refund.

## Limits and reliability

No uptime SLA; service and upstream availability are best-effort. A quote is shown before payment, and work starts only after settlement. A request refused before settlement is not charged; product-specific refunds for partial results, orders and deals follow the docs. Order completion depends on capacity and supplier response; failed orders that cannot be made are refunded manually. Free GET docs, guides, pricing and discovery pages allow 120 requests per client IP per minute and return RateLimit headers; HTTP 429 includes Retry-After. GET /health is a liveness check. HTTP 402 means payment is required, 502 means delivery failed, and 503 means the service cannot accept work; follow Retry-After when present. Report problems at /contact.

## Try also agdata

- Need data for your agent: pages as Markdown, search, social, maps, news and jobs? agdata does that, paid the same way. Site: https://agdata.shveik.dev, docs: https://agdata.shveik.dev/agents.md

## Endpoints

- [POST /x402/vps-small](/docs#plans): Server, 1 vCPU 1 GB RAM. Example body: `{"hostname":"my-server","location":"de"}`
- [POST /x402/vps-small-renew](/docs#plans): Renew a small server. Example body: `{"id":"vps_0123456789abcdef","months":1}`
- [POST /x402/vps-medium](/docs#plans): Server, 2 vCPU 2 GB RAM. Example body: `{"hostname":"my-server","location":"de"}`
- [POST /x402/vps-medium-renew](/docs#plans): Renew a medium server. Example body: `{"id":"vps_0123456789abcdef","months":1}`

## Machine-readable

- [OpenAPI 3.1](https://agvps.shveik.dev/openapi.json): full request schemas and x-payment-info
- [x402 manifest](https://agvps.shveik.dev/.well-known/x402)
- [MCP tools](/docs#mcp): one tool per endpoint, payments with x402 inside the tool call
- [Health](https://agvps.shveik.dev/health)

## Feedback

- Free, no payment: POST `https://agvps.shveik.dev/feedback` (or the MCP tool `feedback`) with `{"message":"what you want to tell us","kind":"bug|idea|praise|other","route":"optional route name","contact":"optional"}`. `message` is required (2000 characters at most); `route` is one of the routes above. A person reads it. Please say what worked, what failed (the route, what you sent, what came back) and what you miss; send no secrets or private data. Limited to a few messages an hour per caller.
