Pricing / reference

Price list API

The price list endpoint returns the current list price of every billable product as JSON. It needs no authentication. For a walkthrough, see Read the price list.

Request

GET https://api.origincloud.eu/v1/pricing

The endpoint takes no parameters. Optional request header:

HeaderDescription
If-None-MatchAn ETag from an earlier response. If the price list is unchanged, the response is 304 Not Modified without a body. A strong form of the same tag, or *, also matches.

Response body

Example response (illustrative):

{
"currency": "EUR",
"amounts_exclude_vat": true,
"last_changed": "2026-09-10T08:00:00+00:00",
"families": [
{
"family": "compute_instance",
"prices": [
{
"product_key": "compute.gp1.core.2",
"dimensions": { "instance_type": "gp1.core.2" },
"unit_type": "seconds",
"unit_count": 3600,
"amount": "0.0250",
"valid_from": "2026-09-01T00:00:00+00:00",
"valid_until": null
}
]
},
{
"family": "storage_snapshot",
"prices": [
{
"product_key": "storage.snapshot",
"unit_type": "gib_hours",
"unit_count": 730,
"amount": "0.05",
"valid_from": "2026-09-01T00:00:00+00:00",
"valid_until": null
}
]
}
]
}

Top-level fields:

FieldTypeDescription
currencystringAlways EUR.
amounts_exclude_vatbooleanAlways true. Every amount is net. VAT depends on your billing country and is added on the invoice.
last_changedstring or nullRFC 3339 timestamp of the most recent time a list price was set, changed, took effect, or ended. Use it for a “prices last updated” line. null only if nothing has ever been priced.
familiesarrayOne entry per product family with at least one current price, in the order of Product families. A family without a current price is left out.

Fields of each entry in families:

FieldTypeDescription
familystringThe family identifier, for example compute_instance.
pricesarrayThe current prices of the family, ordered by product key, with numbers compared as numbers. Instance types of one class run from smallest to largest.

Fields of each entry in prices:

FieldTypeDescription
product_keystringWhat the price bills, for example compute.gp1.core.2. Usage and cost reports use the same key.
dimensionsobjectThe parts of the product key, already split out: instance_type for compute_instance, storage_class for storage_volume. The field is absent when the family has no dimensions.
unit_typestringThe unit the price is per: seconds, gib_hours, gb, metric_months, requests, or samples.
unit_countintegerHow many units amount is for. 3600 seconds is an hourly rate; 730 gib_hours is a rate per GiB for 730 hours.
amountstringThe price in euro for unit_count units, as a decimal string so no rounding is introduced.
valid_fromstringRFC 3339 timestamp from which the price applies.
valid_untilstring or nullRFC 3339 timestamp at which the price is scheduled to end, or null if no end is scheduled.

The list contains only prices in effect at the time of the request. A future price appears once it takes effect. Prices agreed for a single organization never appear.

A priced product isn’t necessarily available to order. Selecting a product that is priced but not on sale fails with PRODUCT_UNAVAILABLE.

Product families

The families appear in the following order. Traffic in gb is counted in decimal gigabytes (10^9 bytes).

FamilyProduct keyDimensionsUnit type
compute_instancecompute.<instance_type>instance_typeseconds
network_floating_ipnetwork.floating_ip–seconds
network_nat_gatewaynetwork.nat_gateway–seconds
network_vpc_egressnetwork.vpc_egress–gb
network_vpc_ingressnetwork.vpc_ingress–gb
network_vpc_internalnetwork.vpc_internal–gb
storage_volumestorage.<storage_class>storage_classgib_hours
storage_snapshotstorage.snapshot–gib_hours
observability_custom_metricobservability.custom_metric–metric_months
observability_api_requestobservability.api_request–requests
observability_ingested_sampleobservability.ingested_sample–samples

compute_instance

The time an instance runs, priced per instance type. The product key is compute. followed by the instance type, for example compute.gp1.core.2. See Instance types.

network_floating_ip

The time a Floating IP is allocated to your project. See Floating IPs.

network_nat_gateway

The time a NAT gateway exists. The Floating IP that the gateway holds is billed separately under network_floating_ip. See NAT gateways.

network_vpc_egress

Traffic from a VPC to the internet, in decimal gigabytes.

network_vpc_ingress

Traffic from the internet into a VPC, in decimal gigabytes.

network_vpc_internal

Traffic routed between two subnets of the same VPC, in decimal gigabytes.

storage_volume

The provisioned size of a volume for the time it exists, priced per storage class. The product key is storage. followed by the storage class: storage.gp1, storage.st1, or storage.io1. See Storage classes.

storage_snapshot

The size of a snapshot’s source volume for the time the snapshot exists. See Snapshots.

observability_custom_metric

A metric you submit yourself, for each month it’s kept. Submitting your own metrics isn’t supported, so nothing is billed under this family.

observability_api_request

Each successful observability.metrics query, however many metrics or data points it returns. See Query metrics.

observability_ingested_sample

Each value the platform collects for your instances, volumes, and network interfaces: one per metric and resource every 30 seconds while the instance runs. See Metrics reference.

Response headers

HeaderValue
ETagA weak tag for the response body, for example W/"3f9a1c2b7d4e5f60". It changes whenever the body changes.
Cache-Controlpublic, max-age=300. A client or cache may reuse a fetched list for 5 minutes. A price change can take a few minutes to appear.
Access-Control-Allow-Origin*. A web page on any origin can fetch the list from the browser.
Last-ModifiedThe time in last_changed, as an HTTP date. Absent when last_changed is null.
Content-Typeapplication/json, on 200 responses.

In a browser, let the browser’s HTTP cache revalidate the list. The ETag header isn’t exposed to page scripts, and a script that sets If-None-Match itself triggers a CORS preflight request, which the endpoint doesn’t support.

Status codes

StatusMeaningWhat to do
200 OKThe body is the current price list.–
304 Not ModifiedThe If-None-Match tag matches the current list. No body.Keep using your copy.
429 Too Many RequestsToo many requests from your client address. The limit is per client address.Wait and retry. A client that honors Cache-Control doesn’t reach the limit.
503 Service UnavailableThe price list is temporarily unavailable. The response carries Retry-After: 30 and a plain-text body.Retry after the number of seconds in Retry-After.
Origin Cloud — user documentation · last reviewed 2026-10-03 Legal notice Privacy policy