FastGPU Matching API
Match an AI workload to the cheapest live GPU that can run it. No key required.
Match an AI workload to the cheapest live GPU that can run it. No key required.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/fastgpu:fastgpu-matching-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: FastGPU Matching API
description: 'Live GPU cloud price comparison across the whole market, as a REST API and MCP server. FastGPU brokers GPU capacity: describe the cluster you need and get competing quotes from capacity holders, each shown next to live prices from RunPod, Vast.ai, Lambda, the hyperscalers and more. Free for buyers, no sales calls.'
version: 1.0.0
contact:
name: FastGPU
url: https://fastgpu.co/docs
servers:
- url: https://fastgpu.co
tags:
- name: Matching
description: Match an AI workload to the cheapest live GPU that can run it. No key required.
paths:
/api/v1/match:
get:
operationId: match_workload
tags:
- Matching
summary: Match a workload to the cheapest GPU
description: 'Describe a job (an open-weight model to serve or fine-tune, a model size, or a GPU need) and get up to eight ranked GPU configurations that can run it at the lowest live price, each with the GPU count, the effective USD per hour for the whole configuration, and a one-line reason; the result also states the VRAM the job needs and, when a hyperscaler can run the same job, which one and what percent cheaper the top match is. Use it when the user asks where to run a workload or which GPU they need, rather than the price of a named GPU. It sizes open-weight models only: an API-only model such as GPT-4 returns no matches and a note. Results mirror FastGPU''s website and apply a small, disclosed tie-break toward providers that pay FastGPU a referral, only between otherwise equal offers (each match reports partner true/false). Optional hard limits (budget_usd_hr, max_total_usd with duration_hours, max_quote_age_minutes) leave out every configuration that breaks them, and limits reports what was applied and how many were left out. page_url links to the GPU''s live price page. It does not rent, reserve or launch GPUs. No key required.'
parameters:
- name: query
in: query
required: false
description: Plain-language job, e.g. "cheapest to serve Llama 3 70B", "2x H100 for fine-tuning" or "a GPU with 80GB of memory". Provide this OR a structured spec below.
schema:
type: string
example: cheapest to serve Llama 3 70B
- name: model
in: query
required: false
description: Open model name to size against, e.g. "Llama 3 70B", "Qwen 72B", "Mixtral".
schema:
type: string
- name: params_b
in: query
required: false
description: Model size in billions of parameters when no exact model is named.
schema:
type: number
- name: weights_gb
in: query
required: false
description: 'Measured size of the weights as stored, in GB: the file you will load (for example a GGUF Q4_K_M build, which holds more bits per parameter than its nominal 4). Replaces parameters times bytes per parameter in the memory estimate. Used for a model sized by its parameter count; the answer''s workload.weights_gb is null when it was not (an image or speech model sized as a whole pipeline).'
schema:
type: number
- name: vram_gb
in: query
required: false
description: Rough VRAM the job needs, in GB, if you already know it.
schema:
type: integer
- name: task
in: query
required: false
description: What the job does.
schema:
type: string
enum:
- inference
- finetune-lora
- finetune-full
- generate
- transcribe
- embed
- name: precision
in: query
required: false
description: Numeric precision to size the model at.
schema:
type: string
enum:
- fp16
- int8
- int4
- name: gpu_count
in: query
required: false
description: Exact positive GPU count. Overrides a count in query text. Returns no matches if no supported configuration fits; omit for automatic sizing.
schema:
type: integer
- name: min_gpu_memory_gb
in: query
required: false
description: Memory each GPU card must have, in GB (e.g. 80 for 80GB-class cards such as the H100 or A100 80GB). Smaller cards are never returned. On its own it lists every card that size, cheapest first.
schema:
type: integer
- name: budget_usd_hr
in: query
required: false
description: Hard limit on the hourly price of the whole configuration, in USD. Configurations above it are not returned.
schema:
type: number
- name: duration_hours
in: query
required: false
description: How long the job will run, in hours (fractions are fine). When sent, each match carries billed_hours and estimated_total_usd.
schema:
type: number
- name: max_total_usd
in: query
required: false
description: Hard limit on estimated_total_usd, the GPU rental cost of the whole job, in USD. Needs duration_hours. Configurations above it are not returned.
schema:
type: number
- name: max_quote_age_minutes
in: query
required: false
description: Hard limit on how old a price quote may be, in minutes. Configurations whose price was fetched from the provider longer ago are not returned.
schema:
type: number
- name: region
in: query
required: false
description: Restrict to a data-residency region.
schema:
type: string
enum:
- US
- EU
- ASIA
- name: spot
in: query
required: false
description: Set true to include interruptible spot capacity for a cheaper rate.
schema:
type: string
enum:
- 'true'
- 'false'
- name: reserved
in: query
required: false
description: Set true to include reserved / committed-term capacity for a lower rate.
schema:
type: string
enum:
- 'true'
- 'false'
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
updated_at:
type:
- string
- 'null'
stale:
type: boolean
workload:
type: object
properties:
interpretation:
type: string
identified:
type: boolean
task:
type: string
precision:
type: string
vram_required_gb:
type: number
gpu_count:
type:
- integer
- 'null'
min_gpu_memory_gb:
type:
- integer
- 'null'
gpu_vendors:
type:
- array
- 'null'
items:
type: string
hero:
type:
- object
- 'null'
properties:
hyperscaler_ceiling:
type:
- string
- 'null'
savings_pct:
type:
- number
- 'null'
same_model:
type:
- boolean
- 'null'
count:
type: integer
matches:
type: array
items:
type: object
properties:
gpu:
type: string
gpu_count:
type: integer
effective_usd_hr:
type: number
monthly_usd:
type: number
provider:
type: string
provider_label:
type:
- string
- 'null'
offer_type:
type: string
reliability:
type: string
fits_single_card:
type: boolean
over_budget:
type: boolean
tokens_per_sec:
type:
- number
- 'null'
usd_per_million_tokens:
type:
- number
- 'null'
score:
type:
- number
- 'null'
partner:
type: boolean
reason:
type: string
billing_increment:
type: string
enum:
- per-second
- per-minute
- per-hour
- varies
description: How this provider's meter ticks for on-demand rental; varies means FastGPU has no verified figure.
billed_hours:
type:
- number
- 'null'
description: 'Hours the provider bills for duration_hours: rounded up to whole hours on a per-hour meter and to whole minutes on a per-minute meter. Null when duration_hours was not sent.'
estimated_total_usd:
type:
- number
- 'null'
description: 'effective_usd_hr times billed_hours, rounded up to the cent. GPU rental only: storage, data transfer, CPU and memory billed separately, and provider minimums are not included. Null when duration_hours was not sent.'
fetched_at:
type:
- string
- 'null'
description: When this price was fetched from the provider (ISO 8601).
quote_age_seconds:
type:
- integer
- 'null'
description: Seconds between fetched_at and as_of. Null when the fetch time is unknown.
url:
type: string
description: Site-relative path of this GPU's live price page, e.g. /gpus/h100-sxm.
page_url:
type: string
description: Absolute URL of this GPU's live price page, with every live offer.
as_of:
type: string
description: When this answer was computed (ISO 8601). Quote ages are measured against it.
limits:
type: object
description: The hard limits this answer applied (null when one was not sent) and how many configurations each one left out.
properties:
budget_usd_hr:
type:
- number
- 'null'
duration_hours:
type:
- number
- 'null'
max_total_usd:
type:
- number
- 'null'
max_quote_age_minutes:
type:
- number
- 'null'
excluded:
type: object
properties:
over_budget_usd_hr:
type: integer
over_max_total_usd:
type: integer
older_than_max_quote_age_minutes:
type: integer
nearest_excluded:
type:
- object
- 'null'
description: 'When the limits leave no match: the cheapest configuration that can still run the job, and the limits it breaks.'
properties:
gpu:
type: string
gpu_count:
type: integer
effective_usd_hr:
type: number
monthly_usd:
type: number
provider:
type: string
provider_label:
type:
- string
- 'null'
offer_type:
type: string
reliability:
type: string
fits_single_card:
type: boolean
over_budget:
type: boolean
tokens_per_sec:
type:
- number
- 'null'
usd_per_million_tokens:
type:
- number
- 'null'
score:
type:
- number
- 'null'
partner:
type: boolean
reason:
type: string
billing_increment:
type: string
enum:
- per-second
- per-minute
- per-hour
- varies
description: How this provider's meter ticks for on-demand rental; varies means FastGPU has no verified figure.
billed_hours:
type:
- number
- 'null'
description: 'Hours the provider bills for duration_hours: rounded up to whole hours on a per-hour meter and to whole minutes on a per-minute meter. Null when duration_hours was not sent.'
estimated_total_usd:
type:
- number
- 'null'
description: 'effective_usd_hr times billed_hours, rounded up to the cent. GPU rental only: storage, data transfer, CPU and memory billed separately, and provider minimums are not included. Null when duration_hours was not sent.'
fetched_at:
type:
- string
- 'null'
description: When this price was fetched from the provider (ISO 8601).
quote_age_seconds:
type:
- integer
- 'null'
description: Seconds between fetched_at and as_of. Null when the fetch time is unknown.
url:
type: string
description: Site-relative path of this GPU's live price page, e.g. /gpus/h100-sxm.
page_url:
type: string
description: Absolute URL of this GPU's live price page, with every live offer.
breaks:
type: array
items:
type: string
note:
type: string
description: Why there are no matches, when there are none.
error:
type: string
description: Present when the request was not valid; says what to send instead.
required:
- count
- matches
components:
securitySchemes:
apiKey:
type: http
scheme: bearer
description: 'FastGPU API key (fgpu_live_...), sent as an Authorization: Bearer header. Create one at /app.'
externalDocs:
description: Docs, the MCP server and the open CC BY 4.0 dataset
url: https://fastgpu.co/docs