---
title: "VPSLedger for agents — dataset, API and skills"
description: "Machine entry point for VPSLedger: three read-only JSON resources describing 90 verified VPS plans from 14 providers, a find-vps skill, markdown alternates for every page, and the semantics of Unknown/verified fields."
canonical: https://vpsledger.com/ai/
verified: 2026-09-10
format: text/markdown
html: https://vpsledger.com/ai/
---

> Markdown alternate of <https://vpsledger.com/ai/>. Generated at build time from the
> same dataset as the HTML page; prices verified 2026-09-10. Data is a build-time
> snapshot — no live API, no auth. Machine entry point: <https://vpsledger.com/ai/>.

# VPSLedger for agents

VPSLedger compares VPS plans on verified data. Every plan record was checked against the provider's official pricing page; each row carries the exact `source_url` and the check date (`verified_at`). This page is the machine entry point: what the data covers, how to query it, and what it deliberately does not do.

## What is available

Read-only JSON, generated at build time and served as static files. Current build: 90 verified plans from 14 providers, data verified 2026-09-10.

| Resource | Purpose |
| --- | --- |
| [`/api/v1/plans.json`](/api/v1/plans.json) | All 90 verified plans, sorted by `price_usd_monthly` ascending. Every field, price, source URL and verified date. |
| [`/api/v1/providers.json`](/api/v1/providers.json) | Provider directory: HQ country, regions, API availability, plan count, cheapest verified plan. |
| [`/api/v1/search.json`](/api/v1/search.json) | Same records plus a `filters` manifest (exact comparison semantics per parameter) and `facets` (value counts for country, city, virtualization, disk type, billing period, provider). |
| [`/openapi.json`](/openapi.json) | OpenAPI 3.1 description of the three resources above. |
| [`/.well-known/api-catalog`](/.well-known/api-catalog) | RFC 9727 linkset (`application/linkset+json`): service-desc, service-doc, data resources, skill. |
| [`/.well-known/agent-skills/find-vps/SKILL.md`](/.well-known/agent-skills/find-vps/SKILL.md) | Skill instructions with worked examples. [`index.json`](/.well-known/agent-skills/index.json) carries its SHA256 digest of the served bytes. |
| [`/.well-known/ai-catalog.json`](/.well-known/ai-catalog.json) | ARD manifest for this host. |
| [`/feed.xml`](/feed.xml) | Atom feed of the verified plan set. |

Every response also sends `Link: </.well-known/api-catalog>; rel="api-catalog", </openapi.json>; rel="service-desc", </ai/>; rel="service-doc"` via a `_headers` rule.

## How to search and filter

There is no server-side query engine. Download a JSON file once and filter the array client-side — with 90 records that is fast and cheap. `search.json` documents each supported parameter's semantics; the short version:

- `max_price` compares against `price_usd_monthly` in USD/month.
- `min_ram` (MB), `min_vcpu`, `country` (ISO alpha-2), `city`, `virtualization`, `disk_type`, `ipv4`, `billing_period` — exact comparisons in the `filters` manifest.
- Check `facets` first: the pilot dataset covers countries US, FR, DE and virtualization KVM/unknown only.

## Field semantics you must respect

- **Unknown beats wrong.** A `null` value or an `"unknown"` enum means the official page does not publish that field. Render it as "Unknown"; never interpolate a value from general knowledge. Pages never emit empty cells or placeholder characters.
- **Prices are approximate when normalized.** `price_usd_monthly` converts currency and billing period using a fixed FX snapshot dated 2026-09-10 (EUR 1.08, GBP 1.22). It exists for comparison and filtering only — always present the native `price`/`currency`/`billing_period` as the real quote, and mark the normalized figure with "≈".
- **Verification dates are part of the data.** Cite `source_url` and `verified_at` with any price you report. The dataset's latest verification date is 2026-09-10.
- **Observation counts gate indexing.** Plan pages carry `noindex, follow` until a plan has at least two verified price observations (history exists for none yet — the dataset is a pilot baseline). The gate is data-driven: indexing flips on automatically with the second observation.

## Markdown alternates

Static hosting cannot negotiate on `Accept`, so every HTML page has a sibling markdown file at `/ai/*path*index.md` — e.g. [`/vps-under-5/index.md`](/vps-under-5/index.md), [`/providers/racknerd/racknerd-newyear-1gb/index.md`](/providers/racknerd/racknerd-newyear-1gb/index.md), and this page's [`/ai/index.md`](/ai/index.md). Each HTML head links its markdown twin with `<link rel="alternate" type="text/markdown">`. Markdown files carry front matter (title, description, canonical, verified date) and tables as real markdown tables. To get markdown deliberately: fetch the HTML page, read the alternate link, then fetch that URL.

## What is not available

- No authentication, no API keys, no OAuth/OIDC — everything is public and read-only.
- No write endpoints: plan submissions and corrections are not accepted over HTTP.
- No live query API, no pagination, no server-side filtering — the JSON is a build-time snapshot.
- No per-plan price history yet: one observation per plan, so no 30/90-day lows or medians exist anywhere.
- No OS verification: `os_type` is `null` for all plans, so no plan can be honestly labelled Linux- or Windows-capable (this is why [the former "Cheap Linux VPS" page](/cheap-linux-vps/) is retitled and noindexed).
- Not for resale as verified data: prices change; confirm on the provider's official page before ordering.

## Crawl and reuse signals

`robots.txt` declares `Content-Signal: search=yes, ai-input=yes, ai-train=yes`. The dataset is public, crawlable and meant for agent consumption: search indexing is wanted, using rows as AI input is wanted, and training on it is permitted because the data is already published for open reuse — provider directory fields come from FindHost under CC BY 4.0, and the site asks for the same courtesy: keep `source_url` and `verified_at` with any row you redistribute. There are no restrictions to declare beyond that, and no keyword stuffing.

## Update cadence

Artifacts regenerate on every site build; verification cadence is manual per provider (latest: 2026-09-10). The skill index's `digest_sha256` changes whenever SKILL.md changes — treat a digest mismatch as a signal to re-read the skill. Source of truth: the public GitHub repository ([shileibiz/vpsfinder](https://github.com/shileibiz/vpsfinder)); every number on the site is reproducible from it. See [methodology](/methodology/) and [data sources](/data-sources/).
