Public API v1

Access normalized GPU rental prices, history, provider evidence, exports, and workload recommendations. No authentication required.

v1

Response and compatibility contract

X-API-Version: v1
Authentication
None for documented endpoints.
Rate limits
No published quota or throughput SLA. Back off on 429 and retryable 5xx responses.
Freshness
Responses expose collection timestamps. Provider coverage and collector health remain visible at freshness status.
Compatibility
Existing fields remain stable within v1. Additive fields may appear; breaking path or field changes require a new documented version.
Coverage
Missing rows mean no qualifying current evidence, not guaranteed provider unavailability.
Errors
Validation uses 4xx responses. Temporary data or service failures use retryable 5xx responses without internal exception details.

Public v1 curl examples

Read-only commands
curl --fail --silent --show-error 'https://www.getflops.ai/api/compare'
curl --fail --silent --show-error 'https://www.getflops.ai/api/current?provider=runpod'
curl --fail --silent --show-error 'https://www.getflops.ai/api/providers'
curl --fail --silent --show-error 'https://www.getflops.ai/api/regions'
curl --fail --silent --show-error 'https://www.getflops.ai/api/freshness'
curl --fail --silent --show-error 'https://www.getflops.ai/api/status'
curl --fail --silent --show-error 'https://www.getflops.ai/api/errors?source=collector&limit=20'
curl --fail --silent --show-error 'https://www.getflops.ai/api/changes?days=7&gpu=H100-SXM'
curl --fail --silent --show-error 'https://www.getflops.ai/api/llms'
curl --fail --silent --show-error 'https://www.getflops.ai/api/deployments'
curl --fail --silent --show-error 'https://www.getflops.ai/api/history/H100%20SXM?provider=runpod'
curl --fail --silent --show-error 'https://www.getflops.ai/api/history_all'
curl --fail --silent --show-error 'https://www.getflops.ai/api/history_coverage'
curl --fail --silent --show-error 'https://www.getflops.ai/api/offers/H100%20SXM'
curl --fail --silent --show-error 'https://www.getflops.ai/api/export.json?gpu=H100-SXM'
curl --fail --silent --show-error 'https://www.getflops.ai/api/export.csv?gpu=H100-SXM' --output h100-prices.csv
curl --fail --silent --show-error 'https://www.getflops.ai/api/badge.svg?gpu=H100-SXM&provider=runpod' --output h100-price.svg
curl --fail --silent --show-error 'https://www.getflops.ai/feed.xml'
GET /api/deployments

The dated top-25 open-weight model catalog, seven deployment providers, and all 175 model-provider paths behind the launch board.

Response shape
{
  "research_date": "2026-07-27",
  "pair_count": 175,
  "providers": [
    {"slug": "runpod", "name": "RunPod", "docs_url": "..."}
  ],
  "models": [
    {
      "rank": 1,
      "slug": "...",
      "huggingface_id": "...",
      "providers": [
        {"slug": "runpod", "status": {"key": "guided"}, "href": "..."}
      ]
    }
  ]
}

Request data access

Register demand for deeper history, bulk access, commercial use, or higher limits. The public API remains available without submitting this form.

GET /api/compare

Latest snapshot per GPU per provider. Powers the main comparison table.

region string, optional Filter to a provider region, for example us-east-1. Omit for global aggregate rows.
Response
{
  "region": null,
  "providers": {
    "vast.ai": {
      "name": "Vast.ai",
      "color": "#00d4aa",
      "coverage": { "source": "Vast.ai marketplace offers", "auth": "No key required" },
      "pricing_context": {
        "source": "Vast.ai marketplace offers",
        "source_type": "marketplace",
        "pricing_note": "Marketplace aggregate; quality-eligible offers feed the summary price."
      }
    },
    "aws": { "name": "AWS", "color": "#ff9900" },
    ...
  },
  "gpus": {
    "H100 SXM": {
      "vast.ai": {
        "on-demand": {
          "min": 1.85, "median": 2.10, "mean": 2.25, "max": 3.50,
          "num_offers": 42, "fetched_at": "2026-03-15T06:00:00", "region": null,
          "trust": {
            "source": "Vast.ai marketplace offers",
            "source_type": "marketplace",
            "pricing_note": "Marketplace aggregate; quality-eligible offers feed the summary price.",
            "row_label": "42 offers · Mar 15, 2026",
            "region_label": "global aggregate"
          }
        },
        "spot": { ... }
      },
      "aws": { ... }
    }
  },
  "gpu_specs": {
    "H100 SXM": { "vram_gb": 80, "vram_type": "HBM3", "generation": "Hopper", "tier": "Flagship" }
  }
}
GET /api/freshness

Provider freshness monitor for uptime checks, crawl-health dashboards, and manual data-quality review. It reports both the newest provider snapshot and partially stale latest GPU/pricing rows, so one fresh SKU cannot hide older visible prices. Rows that an authoritative provider capacity response explicitly marks unavailable remain stored for auditability but are excluded from stale coverage alerts and reported in availability_excluded_rows. /api/status is a compatibility alias with the same payload and HTTP status.

Example
GET /api/freshness
Response shape
{
  "overall_status": "healthy",
  "message": "All tracked providers are fresh.",
  "warning_hours": 36,
  "critical_hours": 72,
  "summary": { "healthy": 7, "warning": 0, "critical": 0, "missing": 0 },
  "recent_errors": [],
  "stale_rows": [
    {
      "provider": "gcp",
      "gpu_name": "T4",
      "pricing_type": "spot",
      "age_hours": 80.5,
      "status": "critical",
      "detail_href": "/provider/gcp/T4"
    }
  ],
  "providers": [
    {
      "provider": "runpod",
      "status": "healthy",
      "age_hours": 4.2,
      "oldest_age_hours": 4.2,
      "warning_stale_rows": 0,
      "critical_stale_rows": 0,
      "current_rows": 18,
      "stored_rows": 18,
      "availability_excluded_rows": 0,
      "gpu_types": 8,
      "pricing_types": 2,
      "last_run": { "status": "ok", "prices": 18 }
    }
  ]
}
GET /api/errors

Recent operational errors and warnings from collectors, cron endpoints, manual collection, and alert notification delivery.

limit integer, optional Number of events from 1 to 200. Defaults to 50.
source string, optional Filter by source, for example collector, cron, manual_collect, or alert_notification.
provider string, optional Filter by provider key.
severity string, optional Filter by error or warning.
Example
GET /api/errors?source=collector&severity=error&limit=20
Response shape
{
  "generated_at": "2026-06-21T16:00:00+00:00",
  "filters": { "limit": 20, "source": "collector", "provider": null, "severity": "error" },
  "row_count": 1,
  "events": [
    {
      "happened_at": "2026-06-21T06:00:00+00:00",
      "source": "collector",
      "provider": "gcp",
      "severity": "error",
      "message": "GCP_API_KEY is not configured",
      "details": {}
    }
  ]
}
GET /api/regions

Discover region-specific pricing coverage by provider. Use these region values with ?region= on comparison, export, history, badge, and change endpoints.

Example
GET /api/regions
Response shape
{
  "regions": [
    {
      "region": "us-east-1",
      "provider": "aws",
      "provider_name": "AWS",
      "last_fetched": "2026-06-21T06:00:00",
      "current_rows": 12,
      "gpu_types": 8,
      "pricing_types": 2,
      "current_offers": 12
    }
  ],
  "by_provider": {
    "aws": [ ... ]
  }
}
GET /api/export.json

JSON export of the same latest normalized rows used by the CSV endpoint. Each row includes decision_eligible and decision_eligible_reason. Eligibility is false when a snapshot is more than 72 hours old or when a provider with an explicit capacity response no longer reports that GPU as available.

provider string, optional Filter by provider key or slug.
gpu string, optional Filter by GPU name or slug.
pricing_type string, optional Filter by pricing type.
region string, optional Filter to a region returned by /api/regions. Omit for global aggregate rows.
Example
GET /api/export.json?gpu=H100-SXM&pricing_type=on-demand&region=us-east-1
Response shape
{
  "generated_at": "2026-06-21T16:00:00+00:00",
  "filters": { "provider": null, "gpu": "H100 SXM", "pricing_type": "on-demand", "region": "us-east-1" },
  "row_count": 7,
  "rows": [
    {
      "gpu_name": "H100 SXM",
      "provider": "runpod",
      "provider_name": "RunPod",
      "pricing_type": "on-demand",
      "region": "us-east-1",
      "source": "RunPod GraphQL API",
      "source_type": "provider-api",
      "pricing_note": "Provider API pricing; availability and spot/community rows can move quickly.",
      "median_dph_per_gpu": 2.4,
      "decision_eligible": true,
      "decision_eligible_reason": "current",
      "vram_gb": 80
    }
  ]
}
GET /api/badge.svg

Embeddable SVG badge for the latest GPU price. Use it in README files, internal docs, dashboards, or procurement notes.

gpu string, required GPU name or slug, for example H100-SXM.
provider string, optional Provider key or slug. If omitted, the badge shows the cheapest tracked provider for the GPU.
pricing_type string, optional Pricing type. Defaults to on-demand.
region string, optional Filter badge pricing to a region returned by /api/regions.
Examples
GET /api/badge.svg?gpu=H100-SXM&provider=runpod
GET /api/badge.svg?gpu=RTX-4090&pricing_type=spot
GET /api/badge.svg?gpu=H100-SXM&provider=aws&region=us-east-1
Markdown embed
![H100 price](https://www.getflops.ai/api/badge.svg?gpu=H100-SXM&provider=runpod)
GET /api/current

Latest stored prices, optionally filtered by provider or region. Rows remain visible for auditability; decision_eligible is false when a snapshot is more than 72 hours old or an explicit provider capacity response no longer lists the GPU. Use decision_eligible_reason to distinguish those cases.

provider string, optional Filter by provider key (e.g., aws, vast.ai, gcp)
region string, optional Filter to a region returned by /api/regions. Omit for global aggregate rows.
Example
GET /api/current?provider=aws&region=us-east-1
Response
[
  {
    "gpu_name": "H100 SXM",
    "provider": "aws",
    "pricing_type": "on-demand",
    "num_offers": 1,
    "min_dph_per_gpu": 3.25,
    "median_dph_per_gpu": 3.25,
    "mean_dph_per_gpu": 3.25,
    "max_dph_per_gpu": 3.25,
    "fetched_at": "2026-03-15T06:00:00",
    "region": "us-east-1",
    "decision_eligible": true,
    "decision_eligible_reason": "current"
  },
  ...
]
POST /api/alerts

Create a GPU price alert. The first version stores alert intent for future notification delivery.

Request
curl --fail --silent --show-error 'https://www.getflops.ai/api/alerts' \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{"email":"you@example.com","gpu_name":"H100 SXM","provider":"runpod","pricing_type":"on-demand","target_price":2.00}'
Response
{
  "status": "created",
  "id": 123,
  "email": "you@example.com",
  "gpu_name": "H100 SXM",
  "provider": "runpod",
  "pricing_type": "on-demand",
  "target_price": 2.0,
  "created_at": "2026-06-21T16:00:00+00:00"
}
POST /api/access-waitlist

Persist demand for deeper history, bulk access, higher limits, or commercial data use. Email and optional company are stored for follow-up but are never sent to PostHog.

Request
curl --fail --silent --show-error 'https://www.getflops.ai/api/access-waitlist' \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{"email":"you@example.com","company":"Example Co","use_case":"product","data_need":"price-history","history_window":"1-year","source_page":"/docs/api"}'
Response
{
  "status": "created",
  "id": 124,
  "use_case": "product",
  "data_need": "price-history",
  "history_window": "1-year",
  "created_at": "2026-07-11T21:30:00+00:00"
}
GET /feed.xml

RSS feed for the current weekly GPU market brief and latest price-index leaders.

Example
GET /feed.xml
Use case
Subscribe to the weekly report at /price-index#weekly-report, follow the latest cheapest on-demand rows by GPU, or pipe the feed into a changelog, newsletter, or internal market monitor.
GET /api/export.csv

Spreadsheet-friendly export of the latest normalized GPU pricing rows, including machine-readable decision_eligible and decision_eligible_reason guardrails.

provider string, optional Filter by provider key or slug.
gpu string, optional Filter by GPU name or slug.
pricing_type string, optional Filter by pricing type.
region string, optional Filter to a region returned by /api/regions. Omit for global aggregate rows.
Example
GET /api/export.csv?provider=runpod&pricing_type=on-demand&region=us-east-1
CSV columns
gpu_name,provider,provider_name,pricing_type,region,min_dph_per_gpu,median_dph_per_gpu,mean_dph_per_gpu,max_dph_per_gpu,num_offers,fetched_at,decision_eligible,decision_eligible_reason,source,source_type,pricing_note,vram_gb,vram_type,generation,tier
GET /api/changes

Price movement between the latest snapshot and the latest snapshot at or before N days ago. This endpoint powers the 7-day and 30-day movement in the weekly market report.

days integer, optional Lookback window from 1 to 365 days. Defaults to 7.
provider string, optional Filter by provider key or slug, for example runpod or vast.
gpu string, optional Filter by GPU name or slug, for example H100-SXM.
pricing_type string, optional Filter by pricing type, for example on-demand or spot.
region string, optional Filter to a region returned by /api/regions. Omit for global aggregate rows.
Example
GET /api/changes?days=30&gpu=H100-SXM&pricing_type=on-demand&region=us-east-1
Response
{
  "days": 30,
  "gpu": "H100 SXM",
  "provider": null,
  "pricing_type": "on-demand",
  "region": "us-east-1",
  "rows": [
    {
      "gpu_name": "H100 SXM",
      "provider": "runpod",
      "pricing_type": "on-demand",
      "region": "us-east-1",
      "current_median": 2.50,
      "previous_median": 2.75,
      "absolute_change": -0.25,
      "pct_change": -9.09,
      "current_fetched_at": "2026-06-21T06:00:00",
      "previous_fetched_at": "2026-05-22T06:00:00"
    }
  ],
  "changes": {
    "H100 SXM": {
      "runpod": {
        "on-demand": {
          "current_median": 2.50,
          "previous_median": 2.75,
          "absolute_change": -0.25,
          "pct_change": -9.09,
          "region": "us-east-1"
        }
      }
    }
  }
}
POST /api/planner

Turn a catalog model and workload shape into explainable cheapest, balanced, and production GPU/provider recommendations.

model_slug string, required A model slug returned by /api/llms.
quantization string, optional catalog-default, q4, q8, or fp16.
context_window integer, optional Requested tokens, from 1 through the model's catalog limit. Defaults to 8192.
workload_type string, optional interactive uses on-demand rows; batch can also consider spot and community pricing.
concurrency integer, optional Expected concurrent requests, from 1 to 256.
traffic_shape string, optional steady or bursty.
uptime_pattern string, optional always-on, business-hours, or intermittent.
region_preference string, optional Requires a matching region-specific market row. Omit for global aggregates.
budget_sensitivity string, optional high, balanced, or low.
ops_tolerance string, optional low, medium, or high.
Example
curl -X POST https://www.getflops.ai/api/planner \
  -H "Content-Type: application/json" \
  -d '{
    "model_slug": "glm-4.7-flash",
    "context_window": 32768,
    "concurrency": 4,
    "traffic_shape": "steady",
    "uptime_pattern": "always-on",
    "budget_sensitivity": "balanced",
    "ops_tolerance": "low"
  }'
Response
{
  "api_version": "v1",
  "methodology_version": "1.0",
  "status": "ok",
  "requirements": {
    "required_total_vram_gb": 39,
    "required_per_gpu_vram_gb": 39,
    "gpu_count": 1
  },
  "recommendations": {
    "cheapest": {
      "status": "recommended",
      "score": 86.5,
      "option": {
        "provider_key": "runpod",
        "provider_name": "RunPod",
        "gpu_name": "L40",
        "gpu_vram_gb": 48,
        "pricing_type": "on-demand",
        "estimated_hourly": 3.25,
        "estimated_monthly": 2372.50
      },
      "why": ["48GB per GPU clears the 39GB planning floor."],
      "caveats": ["Inventory can move quickly."]
    },
    "balanced": { "status": "recommended" },
    "production": { "status": "recommended" }
  },
  "avoid": []
}
Response states
200  ok or insufficient_data
400  invalid_input or invalid_request
415  invalid_request (JSON Content-Type required)
503  market_data_unavailable

Valid cluster-scale requests can return:
{
  "status": "insufficient_data",
  "recommendations": {
    "production": {
      "status": "insufficient_data",
      "reason_code": "cluster_topology_unverified"
    }
  }
}
GET /api/llms

Curated self-hostable LLM catalog with inferred VRAM requirements and live hosting cost estimates based on current GPU pricing.

Response
{
  "pricing_type": "on-demand",
  "research_checked_at": "2026-07-26",
  "summary": {
    "model_count": 9,
    "single_gpu_models": 5,
    "multi_gpu_models": 4,
    "moe_models": 9,
    "serverless_ready_models": 3,
    "lowest_hourly_estimate": 0.49,
    "largest_min_vram_gb": 768
  },
  "serverless_patterns": [
    {
      "name": "RunPod Serverless + vLLM",
      "source_url": "https://docs.runpod.io/serverless/vllm/get-started"
    }
  ],
  "latest_discovery_feed": {
    "source": "huggingface",
    "fetched_at": "2026-07-26T03:30:00Z",
    "models_seen": 40,
    "authors_queried": ["moonshotai", "zai-org", "Qwen", "MiniMaxAI", "stepfun-ai", "deepseek-ai", "openai", "mistralai"],
    "relevant_models": 10,
    "models_returned": 12,
    "selection_strategy": "tracked-authors-and-relevance"
  },
  "latest_discoveries": [
    {
      "model_name": "Kimi-K2.7-Code",
      "release_kind": "Primary checkpoint",
      "serverless_fit": "dedicated",
      "quality_tier": "strong",
      "quality_label": "Looks strong",
      "relevance_score": 18,
      "relevance_summary": "trusted org, kimi, primary release, high usage, fresh release",
      "watchouts_summary": "cluster-scale footprint",
      "source_url": "https://huggingface.co/moonshotai/Kimi-K2.7-Code"
    }
  ],
  "models": [
    {
      "name": "GLM-4.7-Flash",
      "architecture": "MoE",
      "params_billions": 31,
      "active_params_billions": 3,
      "context_window": 202752,
      "license": "MIT",
      "source_label": "Z.ai model card",
      "source_url": "https://huggingface.co/zai-org/GLM-4.7-Flash",
      "quality_tier": "strong",
      "quality_label": "Best practical GLM",
      "quality_note": "A strong current starting point when you want agentic behavior without moving immediately to a multi-GPU cluster.",
      "serverless_fit": "good",
      "serverless_note": "A workable scale-to-zero target when weights stay cached and cold starts are acceptable.",
      "min_total_vram_gb": 32,
      "deployment_label": "1x 32GB+ GPU",
      "cheapest_tracked_setup": {
        "gpu_name": "RTX 5090",
        "provider_name": "Vast.ai",
        "estimated_hourly": 0.49,
        "estimated_monthly": 357.70
      }
    }
  ],
  "assumptions": [
    "Estimates assume inference hosting, not training or fine-tuning.",
    "Costs use the current median on-demand GPU price and scale linearly for multi-GPU setups.",
    "Quality reads are directional editorial guidance for planning, not formal benchmark rankings."
  ]
}
GET /api/history/{gpu_name}

Historical price data for a specific GPU across all providers.

gpu_name path, required GPU name (e.g., H100 SXM, RTX 4090)
provider query, optional Filter to a single provider
region query, optional Filter to a region returned by /api/regions. Omit for global aggregate rows.
Example
GET /api/history/H100%20SXM?provider=aws&region=us-east-1
Response
{
  "gpu_name": "H100 SXM",
  "region": "us-east-1",
  "history": [
    {
      "fetched_at": "2024-01-15T06:00:00",
      "num_offers": 38,
      "min": 1.90, "median": 2.15, "mean": 2.30, "max": 3.80,
      "provider": "aws",
      "pricing_type": "on-demand",
      "region": "us-east-1"
    },
    ...
  ]
}
GET /api/history_all

All historical pricing data, keyed by gpu_name|provider|pricing_type.

region string, optional Filter to a region returned by /api/regions. Omit for global aggregate rows.
Response
{
  "H100 SXM|vast.ai|on-demand": [
    { "fetched_at": "2024-01-15", "median": 2.15, "min": 1.90, "num_offers": 38, ... },
    ...
  ],
  "H100 SXM|aws|on-demand": [ ... ],
  ...
}
GET /api/history_coverage

History coverage windows by provider, based only on stored collector snapshots.

region string, optional Filter to a region returned by /api/regions. Omit for global aggregate rows.
Response
{
  "region": null,
  "backfill_policy": "History coverage is based on stored collector snapshots only...",
  "providers": {
    "azure": {
      "name": "Azure",
      "first_fetched": "2026-03-14T06:00:00",
      "last_fetched": "2026-06-21T06:00:00",
      "snapshots": 840,
      "snapshot_days": 100,
      "gpu_types": 9,
      "pricing_types": 2
    }
  }
}
GET /api/providers

Provider metadata, last snapshot freshness, and latest collector run status.

Response
{
  "vast.ai": {
    "name": "Vast.ai",
    "color": "#00d4aa",
    "url": "https://vast.ai",
    "coverage": {
      "source": "Vast.ai marketplace offers",
      "auth": "No key required",
      "pricing_models": ["on-demand"],
      "region_support": "Offer-level location is available; global aggregate rows remain the default.",
      "coverage_note": "Marketplace inventory changes quickly..."
    },
    "pricing_context": {
      "source": "Vast.ai marketplace offers",
      "source_type": "marketplace",
      "pricing_note": "Marketplace aggregate; quality-eligible offers feed the summary price."
    },
    "last_fetched": "2026-03-15T06:00:00",
    "snapshots": 1284,
    "last_run": {
      "started_at": "2026-03-15T06:00:00",
      "completed_at": "2026-03-15T06:00:04",
      "status": "ok",
      "prices": 128,
      "gpu_types": 12,
      "message": null
    }
  },
  ...
}
GET /api/offers/{gpu_name}

Individual offer listings for a GPU. Currently only available for Vast.ai.

gpu_name path, required GPU name (e.g., H100 SXM)
Response
{
  "gpu_name": "H100 SXM",
  "offers": [
    {
      "gpu_name": "H100 SXM",
      "num_gpus": 8,
      "gpu_ram_gb": 80.0,
      "price_per_gpu_hr": 1.85,
      "price_total_hr": 14.80,
      "provider": "vast.ai",
      "pricing_type": "on-demand",
      "cpu": "AMD EPYC 9454",
      "cpu_cores": 48.0,
      "ram_gb": 512.0,
      "disk_gb": 2000,
      "location": "US",
      "reliability": 0.9980,
      "quality_tier": "excellent",
      "quality_label": "Excellent",
      "quality_note": "Included in quality-filtered Vast.ai aggregates.",
      "is_quality_snapshot_eligible": true,
      "tflops": 3958.8,
      "offer_id": 123456,
      "machine_id": 98765,
      "host_id": 54321
    },
    ...
  ]
}
Provider Key Name Auth Required
vast.aiVast.aiNo
awsAmazon Web ServicesNo
azureMicrosoft AzureNo
gcpGoogle Cloud PlatformNo (API key on server)
lambdaLambda LabsNo (API key on server)
runpodRunPodNo (API key on server)
oracleOracle Cloud (OCI)No
H100 SXM H100 NVL H100 PCIE H200 H200 NVL A100 SXM4 A100 PCIE B200 MI300X RTX 4090 RTX 5090 L40 RTX 6000Ada

Hand this runbook to Claude Code or Codex

Open a terminal in the repository where you want the deployment files, start claude or codex, then paste this prompt. It asks the agent to verify sources and stop before it creates billable infrastructure.

Deployment prompt
Use the infrastructure or model context on this page to create a reproducible open-model deployment. Use this guide as the starting context: https://www.getflops.ai/docs/api. Read the linked model card and provider documentation before choosing hardware or runtime settings. Open every linked primary source and flag any mismatch instead of guessing. Create a deployment folder containing README.md, .env.example with no secrets, a pinned start script or infrastructure manifest, and smoke-test.sh. Make the endpoint OpenAI-compatible where the runtime supports it. Run local/static validation, estimate the billable resources, and stop before provisioning paid infrastructure until I approve.
Guardrails included No secrets in files · verify primary docs · approval before spend