# VpsAgent VPS Rental (POST /rent)

> VpsAgent VPS Rental (POST /rent) is a paid API for AI agents from vps.phoneagent.xyz, paid per call via x402, $12.99/call, status unknown (last checked 2026-09-15).

Provisions a disposable VPS server with no signup required, settling payment in USDC only after the box is confirmed reachable on TCP port 22.

## Facts

- Endpoint: POST https://vps.phoneagent.xyz/rent
- Price: $12.99/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-15
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/vpsagent-vps-rental-post-rent-45b95f69
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_WpjPuE_wOQRHZh8ckn41l

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability vpsagent-vps-rental-post-rent-45b95f69 -d '<json body>'
```

Example prompt: Spin up a small disposable VPS for 30 days — use the server_small_1mo SKU in the EU region — and pay with USDC only once it's actually reachable.

## When to prefer this

Use this endpoint when an AI agent needs to programmatically provision a real Linux VPS with root access, paying in USDC with no account creation, and wants pay-on-success guarantees so it never pays for a failed provision. Prefer over traditional cloud APIs when crypto-native, signupless, disposable compute is needed.

## Known failure modes

- Provision fails: Contabo fails to spin up the server within the expected 3–5 minutes, EIP-3009 authorization expires unused, no charge incurred
- Invalid SKU: SKU not found in catalog returns an error; must call GET /catalog first
- Invalid region: unsupported region value returns an error
- Payment authorization insufficient: USDC authorization amount too low for selected SKU
- Server never becomes reachable on TCP :22: authorization expires, no charge, rental not created

## How this service works

Rent a disposable VPS via x402. Pass `sku` from GET /catalog (e.g. server_small_1mo). Pay-on-success: USDC settles only when the box is reachable on TCP :22 (provisioning takes 3–5 min). Failed provisions never settle — the EIP-3009 authorization expires unused, agent pays nothing. Returns {rental_id, ipv4, expires_at, root_token, status}. Renewable via POST /rentals/{id}/renew. Servers: 30-day or 365-day, $12.99–$359.99, 4–8 vCPU / 8–24 GB RAM / 100–300 GB SSD, 200–600 Mbit/s unmetered.

## Output

Returns a JSON object with rental_id (unique identifier for the rental), ipv4 (the server's IP address, may be null initially), expires_at (Unix timestamp in ms when the rental expires), root_token (bearer credential for managing/renewing the instance), and status (e.g. pending_settlement). Payment settles only after the box is confirmed reachable on TCP port 22.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "body": {
     "type": "object"
    },
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "POST"
     ],
     "type": "string"
    },
    "bodyType": {
     "type": "string"
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "properties": {
      "sku": {
       "type": "string"
      },
      "ipv4": {
       "type": [
        "string",
        "null"
       ],
       "description": "Box IPv4. May be null at first; poll GET /instance/{id}."
      },
      "status": {
       "enum": [
        "pending_settlement"
       ],
       "type": "string"
      },
      "rental_id": {
       "type": "string"
      },
      "expires_at": {
       "type": "integer",
       "description": "Unix ms."
      },
      "root_token": {
       "type": "string",
       "description": "Bearer for GET /instance/{id} and POST /rentals/{id}/renew. Treat as a credential."
      }
     }
    }
   }
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/vpsagent-vps-rental-post-rent-45b95f69/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from vps.phoneagent.xyz](https://www.zero.xyz/host/vps.phoneagent.xyz/llms.txt)
