compute
GET /v1/compute/catalogue
Get everything the server order screen is built from.
Authentication
Send an API key as a bearer token. The key must carry the sites.view permission; a key without it is refused with 403, not 404.
Where your organisation id goes
This endpoint takes org_id as a query parameter. Leave it out and the call covers your whole tenancy subtree; send it to narrow the call to one organisation.
Your organisation id is on the API keys screen in your dashboard, beside the key itself. It is the same id in every call you make.
Try it
Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.
curl -X GET https://api.zinndigital.com/v1/compute/catalogue \
-H "Authorization: Bearer zdk_live_…"Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console
Details
The live provider / data-centre / machine-size matrix, merged with the tiers we actually sell. Nothing about a provider, a zone, a size or a stack optimisation is authored in a client: a combination a client invented is one the provider refuses *inside provisioning*, minutes after the customer chose it, where all they see is a machine that failed. ⛔ **Sizes carry no price, ever.** Retail price is catalogue data the customer sees on the plan; the provider's own figure is cost, and a cost rendered beside a size is a margin leak. Every numeric on a size is nullable and a null stays null — a size rendered as "0 GB RAM" reads as a broken product where a blank reads as "not stated", which is what it is. `spec_source` says whether the sizes came from the provider or, when it published none, from our own sold tiers — in which case a size id **is** a plan code and the two collapse at order time. `can_order` is what lets a screen say *"this cannot be ordered yet"* instead of rendering a button that `422`s. `?target=` selects the range (Zinn® Cloud by default); a target that is not a compute product is `404`, never a `403`. `?org_id=` is required only of a caller who belongs to more than one organisation, and is `422` when omitted by one who does — picking "the first org in scope" would configure against an arbitrary tenant. Requires `sites.view`.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
target (query) | string | No | Which compute range to describe. Defaults to Zinn® Cloud, the branded product; the VPS range is the same seam with a different target. |
org_id (query) | Uuid | No | The organisation to configure against. Required only when the caller belongs to more than one; omitted, it is their own. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
data | ComputeProvider[] | Yes | The platforms a machine can be placed on. |
tiers | ComputeTier[] | Yes | The tiers we sell on this range. |
can_order | boolean | Yes | Whether anything here can actually be ordered — any orderable tier, or any provider size. It exists so a screen can say *"this cannot be ordered yet"* instead of rendering a but… |
Errors this endpoint can return
401 · 403 · 404 · 422 · 429 · 503