Start with a single request
This site's read-only API is available without a key. Use the source and observation time when displaying a price.
https://xpu.live/wp-json/xpu/v1/
curl 'https://xpu.live/wp-json/xpu/v1/prices?kind=gpu&provider=runpod&limit=5'OpenAPI specification ↗
Prices include published tariffs and observed marketplace offers. They do not guarantee current GPU availability or your final bill. Unknown prices are omitted; an explicit "0" means a published zero rate.
Explore the endpoints
| Endpoint | Returns | Filters |
|---|---|---|
GET/providers | Provider registry and collection status | kind=model | gpu |
GET/models | Models in the site catalog | q, limit, offset |
GET/gpus | GPU variants in the site catalog | q, limit, offset |
GET/prices | Normalized price variants and components | kind, provider, resource, rental, mapped=true |
GET/history | Latest 5,000 price changes; full history in Node API | provider, id |
GET/status | Last collection status and coverage per provider | — |
List endpoints accept limit (1–200, default 50) and offset (default 0). Responses include data, total, next_offset and generated_at. resource accepts a provider's exact model ID or the catalog ID.
Try the API
Select an example and send a request.
An empty data array means no matching saved prices. Check /status for missing credentials or collection errors. Try without mapped=true to include prices without a site catalog match.
A price is more than a number
Each record describes one provider, model or GPU, and tariff. Monetary values are decimal strings. Never compare different billing units or silently add optional components.
{
"id": "runpod:h100-sxm:secure-cloud-pods-57c27da7",
"kind": "gpu",
"provider": "runpod",
"resource": "h100-sxm",
"currency": "USD",
"variant": "Secure Cloud Pods",
"price_type": "list",
"components": [{"name": "compute", "amount": "3.49", "unit": "gpu_hour"}],
"conditions": {"rental": "on-demand", "gpu_count": 1},
"source": {"url": "https://www.runpod.io/pricing", "method": "page"},
"observed_at": "2026-09-28T00:00:00Z",
"stale": false
}Illustrative response; use the live API for the current value and timestamp.components: input, output, cache or usage charges, each with its own unit.conditions: tier, modality, rental term and provider-specific restrictions.price_type:list,startingormarketplace. Starting rates are not exact quotes; marketplace offers are observations at collection time.catalog_id: identifies an exact site catalog match; null or absent for unmapped resources. These rates remain available through/prices.source.method:api,pageorpage-data(structured data published with a pricing page).source_status: latest collector result.staleis based on observation age: 48 hours by default, or the record’sstale_after_secondsoverride (Vast: 3,600 seconds).
Provider coverage
This registry covers the configured collection sources, including sources without dedicated WordPress provider pages. Counts and statuses below come from the latest imported snapshot. An active collector does not imply every product is covered. Salad and Vast prices can be queried by provider ID even without a dedicated provider page. “Mapped” counts exact matches to the site catalog.
| Provider | Category | Status | Tariffs / mapped |
|---|---|---|---|
| CloudRift ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | gpu | ok | 15 / 15 |
| Modal ↗Public GPU-second list prices converted to GPU-hours. Workspace.billing.rates() is an authenticated account-specific API; public collection intentionally uses the public pricing page. | gpu | ok | 11 / 8 |
| Runpod ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | gpu | ok | 19 / 18 |
| Amazon Bedrock ↗Official bulk price list for us-east-1. Mapped Amazon Nova models; each billing dimension is retained separately. | model | ok | 33 / 33 |
| Anthropic ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 19 / 4 |
| DeepInfra ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 138 / 5 |
| DeepSeek ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 4 / 4 |
| ElevenLabs ↗Pay-as-you-go TTS character prices. Subscription allowances remain separate. | model | ok | 4 / 4 |
| Fireworks AI ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 30 / 6 |
| Google Cloud Vertex AI ↗Current Gemini 3.8 Flash standard tariffs with region and context boundaries. Other model tables await mapping. | model | ok | 4 / 4 |
| Google Gemini API ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 18 / 6 |
| Groq ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 4 / 4 |
| Microsoft Azure AI Foundry ↗Public Azure OpenAI retail meters in eastus; mapped GPT model meters, with deployment and unit preserved. | model | ok | 48 / 48 |
| Mistral AI ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 5 / 5 |
| Novita AI ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 112 / 4 |
| OpenAI ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 215 / 35 |
| OpenRouter ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 459 / 50 |
| Replicate ↗Per-model structured billing data; unsupported usage metrics stay unpriced. | model | ok | 23 / 23 |
| Runway ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 33 / 10 |
| Segmind ↗Per-model pricing pages; runtime seconds, generation parameters and megapixel components remain distinct. | model | ok | 52 / 52 |
| Together AI ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 27 / 4 |
| WaveSpeedAI ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 15 / 6 |
| fal.ai ↗Official pricing API requires FAL_KEY; account-specific discounts are kept private by default. Set FAL_KEY in .env | model | requires key | 0 / 0 |
| xAI ↗Only supported, unambiguous price structures are normalized; other variants remain source-backed but unpriced. | model | ok | 1 / 1 |
| SaladCloud ↗Public website GPU-hour prices at four priorities. Optional organization API via SALAD_USE_API=1, SALAD_API_KEY and SALAD_ORGANIZATION; account quotes stay private. | gpu | ok | 68 / 12 |
| Vast.ai ↗API key required. Up to five cheapest verified available single-GPU on-demand offers per existing catalog GPU, filtered by model and memory. Marketplace quotes; stale after one hour. No automatic GPU model creation. | gpu | ok | 59 / 59 |
GPU sources and pricing scope
| Provider ID | Public collection | Scope and credentials |
|---|---|---|
cloudrift | Pricing page | Supported public GPU tariffs; no account key required. |
runpod | Pricing page | Public GPU tariffs, with rental and cloud variants where supported; no account key required. |
modal | Pricing page | Public GPU-second rates converted to gpu_hour. No key required. Authenticated workspace billing rates are not connected. |
salad | Public pricing page data | GPU-hour tariffs by priority: batch, low, medium and high. No key required for public prices. Optional organization API requires SALAD_USE_API=1, SALAD_API_KEY and SALAD_ORGANIZATION; account rates remain private. |
vast | Marketplace search API | Requires VAST_API_KEY. Up to five cheapest matching verified, rentable, unrented, single-GPU on-demand offers per existing catalog GPU. Searches check GPU name and memory; models outside the curated website catalog are not published. USD/hour quotes include the API’s default disk allocation; extra storage and bandwidth can change the bill. Offers expire from freshness after one hour. Collection searches offers; it does not rent machines. |
A registered provider is not necessarily returning prices. requires_key means credentials are missing; error means the latest attempt failed; review_required needs source review. Saved prices may still be returned, so inspect their timestamps and stale flag.
Freshness, behavior and limits
- Collector refresh defaults to every 6 hours while the Node service is running. Configure 5 minutes to 7 days in CLI Settings; the running service checks settings within 30 seconds. WordPress imports hourly when WP-Cron runs, which depends on site traffic.
- Last WordPress sync: 2026-10-03T17:52:22+00:00.
- A failed source retains its previous rates and reports an error. Rates become stale after their freshness window (default 48 hours; Vast 1 hour). A successful collector status does not by itself guarantee a fresh rate. Check both fields.
- Price changes are recorded in history. A successful accepted collection replaces that provider’s saved public rates; suspicious drops can require review. A missing marketplace offer may simply be outside the bounded search result.
observed_atis the rate observation time;generated_atis the snapshot generation time. Neither is the WordPress import time. API timestamps use UTC.- HTTP 400: invalid pagination. HTTP 404: route not found. HTTP 503: no snapshot yet.
- The local Node API uses
/v1/routes on port 4318 and limits requests to 120/minute per client. The WordPress mirror currently has no application-level quota. - The Node API binds to loopback by default. Public deployment requires HTTPS, an API key and gateway limits. This local site is not an internet-hosted API.
- Account-specific pricing is kept private. Public pages expose public list rates, starting rates and marketplace observations. Private organization rates are excluded.
For future MCP integration, use the same versioned price records and comparison logic. The current release exposes REST; an MCP server is not enabled.
Manage collection locally
From the pricing-service directory, run:
npm run menu
- GPU providers / AI model providers: choose a provider to see its saved price table immediately; update prices, search, filter or inspect price history from there.
- Status & service management: inspect collection results and start or stop the background service.
- Settings: view required API connections, adjust the automatic collection interval and choose automatic, always-on or disabled colors.
Use arrow keys and Enter, or the displayed option numbers. CLI times use your computer’s local timezone. Store provider keys in the local pricing-service/.env file; never send them to this public API.