Skip to Content

Estimate a job's full cost

Compute, egress and storage per provider, with unknown components named.

The cheapest GPU-hour isn't always the cheapest job. POST /v1/costs/estimate prices a whole job on every provider that lists the GPU: compute, egress and storage, with billing increments applied.

curl -X POST https://data.tryopengrid.com/v1/costs/estimate \
  -H "Authorization: Bearer $OPENGRID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"gpu": "nvidia-h100-80gb-sxm5", "count": 8, "hours": 24, "egress_tb": 2, "storage_tb": 5}'

The job

FieldTypeNotes
gpustringGPU id or alias. Required unless a preset sets it.
countintegerGPUs, 1 to 1,024.
hoursnumberDuration, 1 minute to 8,760 hours.
egress_tb or egress_gbnumberData out. Give one, not both.
storage_tb or storage_gbnumberData stored for the job. Give one, not both.
storage_classstringauto (default), shared_fs, block_storage or object_storage.
min_fabric_gbpsnumberOnly providers with at least this interconnect.
presetstringStart from a reference job (GET /v1/costs/presets) and override any field.

Terabytes are decimal: 1 TB = 1,000 GB. Unknown fields are a 422 unknown_field.

Reading the result

data is one row per provider, cheapest total first. When OpenGrid can't verify a component (the provider doesn't publish it), the row lists it in unknown, sets total_is_lower_bound: true, and sorts after the complete totals. meta repeats the parsed job, lists providers it couldn't rank in unranked, and counts the lower-bound rows.

List prices

Estimates use published list prices. Negotiated discounts aren't included.

Inputs you can inspect

  • GET /v1/costs/components: egress and storage prices per provider.
  • GET /v1/costs/billing: billing increments and minimums per provider.
  • GET /v1/costs/sources: where each number comes from, and when it was last fetched.

On this page