$ curl -s 1vps.com/api/index.json
1VPS Developer Portal
The 1VPS provider dataset, guide index, and workload recommendations are published as a public, read-only JSON API. No API key, no signup, no quota form — just fetch it. Everything below is versioned 2026-02-06.
// quickstart
# Every provider we review, with pricing and plans
curl -s https://1vps.com/api/providers.json
# One provider
curl -s https://1vps.com/api/providers/hostinger.json
# The machine-readable contract
curl -s https://1vps.com/openapi.json
# Any article as raw markdown
curl -s -H 'Accept: text/markdown' https://1vps.com/
// endpoints
| Operation | Endpoint | Returns |
|---|---|---|
| getApiIndex | GET /api/index.json | Discovery document listing every endpoint, the spec, and the rate limit. |
| listProviders | GET /api/providers.json | All reviewed VPS providers with ratings, entry pricing, plans, and verdicts. |
| getProvider | GET /api/providers/{providerId}.json | One provider by stable id. Returns 404 with a JSON error envelope if unknown. |
| listGuides | GET /api/guides.json | Index of every published guide, with both HTML and raw-markdown URLs. |
| listUseCases | GET /api/use-cases.json | Workload profiles with minimum specs and recommended providers. |
Provider ids currently served: hostinger, digitalocean, vultr, hetzner, linode, contabo, ovh, racknerd. Pricing last verified 2026-02-06.
// authentication
There is none. Every endpoint is public, unauthenticated, and served as a static document from the edge. Send no credentials; we will never ask for any. CORS is open (Access-Control-Allow-Origin: *), so browser-side agents can call it directly.
// rate limits
600 requests per 60 seconds per client. Every response carries the RFC 9331 headers so you can self-throttle without guessing:
- RateLimit-Limit — quota for the window
- RateLimit-Remaining — requests left
- RateLimit-Reset — seconds until reset
- RateLimit-Policy — e.g. 600;w=60
- Retry-After — sent with every 429
// errors
Failures under /api/ always return JSON, never an HTML error page. The envelope is stable: a machine-readable code, a human message, the status, and a resolution telling you what to do next.
{
"error": {
"code": "not_found",
"message": "No API resource matches /api/providers/nope.json.",
"status": 404,
"resolution": "List available endpoints at https://1vps.com/api/index.json.",
"documentation": "https://1vps.com/developers/"
}
}
// mcp server
The same dataset is exposed over the Model Context Protocol at https://1vps.com/mcp, Streamable HTTP transport, no authentication. Point Claude, ChatGPT, or any MCP client at it and the tools below become callable. The server card carries the full manifest.
{
"mcpServers": {
"1vps": {
"type": "http",
"url": "https://1vps.com/mcp"
}
}
}
| Tool | Returns |
|---|---|
| list_vps_providers | Every reviewed provider with rating, entry price, and plan matrix. |
| get_vps_provider | One provider by stable id, with verdict, plans, and review URL. |
| find_vps_plans | Plans meeting a RAM, disk, and budget constraint, cheapest first. |
| recommend_vps_for_workload | Minimum and recommended spec for a workload, plus who to buy it from. |
| search_guides | Full-text search across every published guide and review. |
| get_guide | The full text of one guide as markdown, by slug. |
// conventions
Versioning & deprecation
Responses carry an `X-API-Version` header and a `version` field holding the dataset date. The URL scheme is unversioned because the API is additive-only: new fields may appear, existing fields never change meaning or type. If a field must ever be withdrawn it will be announced here and kept serving for at least 180 days, with a `Deprecation` and `Sunset` header on the affected responses in the meantime.
Pagination
None of the collections paginate. Every list endpoint returns its complete result set with a `count` field, because the largest — the guide index — is a few hundred entries. If a collection ever outgrows a single response it will gain a cursor-based `next` link rather than page numbers, so existing callers keep working.
Idempotency
Every operation is a GET and therefore naturally idempotent: repeating a request has no effect beyond returning the same document. There are no writes, so there is no `Idempotency-Key` header to send — retry freely after a network failure or a 429.
Sandbox & testing
Production is the sandbox. The API is read-only, unauthenticated, and free, so there is no separate test host, no test credentials, and no way to mutate anything by calling it. Point integration tests straight at https://1vps.com and stay inside the rate limit.
// agent resources
// terms
The dataset is published under CC BY 4.0— use it, redistribute it, build on it, but credit 1VPS.com. Prices and specs are verified by hand and change often; treat lastUpdated as authoritative and re-fetch rather than caching indefinitely. Affiliate URLs in the dataset are tracked links that earn 1VPS a commission, disclosed in our disclaimer. Questions, corrections, or a provider you want added:[email protected].