Skip to content

Catalog and availability

Both endpoints on this page are public. No account, no key, no signature — build a price page, a size picker or a comparison against us without signing up.

GET https://storefront.job-rss-processor.workers.dev/v1/catalog
GET https://storefront.job-rss-processor.workers.dev/v1/prices
GET https://storefront.job-rss-processor.workers.dev/v1/prices/comparison

All three are cached for 60 seconds at the edge, keyed on the URL. A burst of traffic costs one round trip to the cloud, not one per request.

One entry per purchasable shape:

FieldTypeMeaning
namestringOur name, e.g. cd-standard-2-8
vcpusnumber
ramMiBnumber
diskGiBnumberRoot disk included with the shape
aliasesobjectCloud → comma-joined names, e.g. {"aws": "m5.large", …}
inStockbooleanLive. See below
priceEurHournumber or nullEuros per hour

The catalog reads the cloud itself — the compute service’s flavors and the compute service’s capacity — rather than a list maintained beside it. That is the point: it cannot disagree with what an order would actually get. A flavor that does not exist on the box is not in the catalog, and a shape the box cannot currently fit says so.

inStock ⟺ shape.vcpus ≤ freeVCPUs and shape.ramMiB ≤ freeRamMiB

In stock iff the remaining capacity fits one more of it. freeVCPUs and freeRamMiB come from the compute service’s live hypervisor statistics on every call, not from a number someone updates.

This is why the site can say it sometimes declines to quote and say why: a large shape goes out of stock before a small one, because the box genuinely cannot fit another.

Two things to know when you consume it:

  1. It is a snapshot, not a reservation. inStock: true means the capacity existed when the call was answered — up to 60 seconds ago, given the cache. Another customer can take it before you do. A launch can still fail with InsufficientInstanceCapacity; treat that as the authoritative answer.
  2. vcpus_used can exceed vcpus on the real box — an inconsistent but observed upstream state, from overcommit accounting lag or a stale aggregate. Free capacity is clamped at zero rather than left negative, so nothing here ever reports negative stock, even transiently.

priceEurHour: null means unpriced, not free

Section titled “priceEurHour: null means unpriced, not free”

A null price means the rating service has no rating mapping for that flavor. The shape exists and can be launched; nothing will bill for it.

That is a defect in the rating configuration, not a discount, and it will be fixed. Do not build a cost model on a null.

Prices are read live from the rating service’s hashmap module, in three hops: find the instance service, find its flavor_name field, read that field’s {flavor → cost} mappings.

This matters because it is the same number that bills you. Metering’s ledger carries whatever the rating service rated, so the storefront reads prices from the rating service rather than keeping a copy — there is no second price list to drift out of step with the first.

A cloud with no instance service configured in the hashmap module yields an empty map rather than an error: no price is a fact about the cloud, not a failure of the call.

For the rule that decides what those numbers are, see How prices are set.

What the same machine costs elsewhere, one row per shape per provider:

FieldMeaning
shapeOur shape name
provideraws, azure, ovh
usd_hourTheir price for the cheapest equivalent
egress_included_gbTheir monthly allowance
egress_usd_per_gbTheir rate beyond it
methodHow the figure was arrived at
sourceThe URL it was read from
as_ofThe date it was read
usd_to_eurThe rate used to convert

Every row carries source, as_of and method, so a comparison we publish can be checked rather than believed. The rows are written by the infrastructure repository’ rating play, from the same computation that sets our own price — the cheapest current-generation AWS type at least as large — with the egress terms the catalog declares. The storefront only reads them.

This is what the calculator on the pricing page runs on.

Terminal window
curl -s https://storefront.job-rss-processor.workers.dev/v1/catalog \
| jq '.[] | select(.inStock) | {name, vcpus, ramMiB, priceEurHour, aws: .aliases.aws}'
Terminal window
curl -s https://storefront.job-rss-processor.workers.dev/v1/prices/comparison \
| jq '.comparisons[] | select(.shape=="cd-memory-2-16")'
  • Not how much capacity is left, only whether one more of a given shape fits. The absolute free vCPU and RAM figures are not published.
  • Not your own quota — that is cloud quota show, see Quotas and limits.
  • Not storage price. Attached volumes are not rated at all yet, so no volume appears in either endpoint.