Client API: Catalog
Browse sellable products and plan options.
Browse sellable products and plan options. Listing is public and needs no auth.
Base URL: https://api.coritan.com/api/v1. Paths below are complete.
To try these requests in the browser, open the interactive Client API reference.
Operations
Section titled Operations| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/client/containers/catalog |
Browse platform specializations available for deploy composition |
| GET | /api/v1/client/containers/catalog/{slug}/compose |
Get software versions + recommended runtimes for a specialization |
| GET | /api/v1/locations |
List the locations you can order a server in, by airport code |
| GET | /api/v1/locations/availability |
Say which locations can take an order of this size right now |
| GET | /api/v1/price-book |
The price book |
| GET | /api/v1/products/ |
List the products you can order, with their prices |
| GET | /api/v1/products/{product_id} |
Get one product by its ID, with its prices |
Browse platform specializations available for deploy composition
Section titled Browse platform specializations available for deploy compositionGET /api/v1/client/containers/catalog
Browse platform specializations available for deploy composition.
Carries the same icons, colours and grouping as the org storefront's
storefront/specializations and the panel's Software tab, so the
platform order page does not have to draw a Paper server with a generic
terminal glyph. The MCJars lookup is cached and never blocks once warm.
Authentication: an access token, sent as Authorization: Bearer <token>.
Parameters
Section titled Parameters| Name | In | Type | Required |
|---|---|---|---|
category |
query | string or null | no |
Responses
Section titled Responses| Status | Meaning |
|---|---|
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
A 200 response is a list; each item has these fields:
| Field | Type |
|---|---|
[].uuid |
string |
[].slug |
string or null |
[].name |
string |
[].description |
string or null |
[].runtime_template_slug |
string or null |
[].org_id |
integer or null |
[].default_variables |
object or null |
[].metadata |
object or null |
[].category |
string or null |
[].versioned |
boolean |
[].version_variable |
string or null |
[].version_source_slug |
string or null |
[].software_identifier |
string or null |
[].runtime_family |
string or null |
[].icon_url |
string or null |
[].color |
string or null |
[].group |
string or null |
[].deprecated |
boolean |
Get software versions + recommended runtimes for a specialization
Section titled Get software versions + recommended runtimes for a specializationGET /api/v1/client/containers/catalog/{slug}/compose
Get software versions + recommended runtimes for a specialization.
Authentication: an access token, sent as Authorization: Bearer <token>.
Parameters
Section titled Parameters| Name | In | Type | Required | Description |
|---|---|---|---|---|
slug |
path | string | yes | |
supported_only |
query | boolean | no | Default: True. |
include_snapshots |
query | boolean | no | Default: False. |
limit |
query | integer | no | Default: 200. |
Responses
Section titled Responses| Status | Meaning |
|---|---|
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field | Type |
|---|---|
slug |
string or null |
uuid |
string |
name |
string |
description |
string or null |
org_id |
integer or null |
runtime_template_slug |
string or null |
default_variables |
object or null |
metadata |
object or null |
category |
string or null |
versioned |
boolean |
version_variable |
string or null |
version_source_slug |
string or null |
software_identifier |
string or null |
adapter_type |
string or null |
runtime_family |
string or null |
versions |
array of CatalogVersionOption |
versions[].version_id |
string |
versions[].name |
string |
versions[].release_date |
string or null |
versions[].supported |
boolean or null |
versions[].required_java |
integer or null |
versions[].build_number |
integer or null |
versions[].recommended_runtime_slug |
string or null |
versions[].recommended_runtime_uuid |
string or null |
versions[].recommended_runtime_name |
string or null |
versions[].game_versions |
array of string |
versions[].metadata |
object or null |
versions[].runtime_template_slug |
string or null |
versions[].runtime_template_uuid |
string or null |
runtime_versions |
array of CatalogVersionOption |
runtime_versions[].version_id |
string |
runtime_versions[].name |
string |
runtime_versions[].release_date |
string or null |
runtime_versions[].supported |
boolean or null |
runtime_versions[].required_java |
integer or null |
runtime_versions[].build_number |
integer or null |
runtime_versions[].recommended_runtime_slug |
string or null |
runtime_versions[].recommended_runtime_uuid |
string or null |
runtime_versions[].recommended_runtime_name |
string or null |
runtime_versions[].game_versions |
array of string |
runtime_versions[].metadata |
object or null |
runtime_versions[].runtime_template_slug |
string or null |
runtime_versions[].runtime_template_uuid |
string or null |
runtimes |
array of CatalogRuntimeOption |
runtimes[].uuid |
string |
runtimes[].slug |
string |
runtimes[].name |
string |
runtimes[].docker_image |
string or null |
runtimes[].description |
string or null |
defaults |
Defaults |
List the locations you can order a server in, by airport code
Section titled List the locations you can order a server in, by airport codeGET /api/v1/locations
List the locations you can order a server in, by airport code.
A location is listed once it has servers, even when every one of them is
full: GET /locations/availability says which of them can take an order.
A network location with no servers, and a location we are still setting
up, are left out unless include_pops is true.
Parameters
Section titled Parameters| Name | In | Type | Required | Description |
|---|---|---|---|---|
active_only |
query | boolean | no | Leave out locations we have closed. Pass false to list them too. Default: True. |
include_pops |
query | boolean | no | Also list network locations (PoPs) where we run no servers. They answer DNS and carry traffic, so DNS load balancing rules can match them, but you cannot order a server there. Default: False. |
Responses
Section titled Responses| Status | Meaning |
|---|---|
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
A 200 response is a list; each item has these fields:
| Field | Type |
|---|---|
[].id |
integer |
[].code |
string |
[].name |
string |
[].country_code |
string |
[].timezone |
string or null |
[].latitude |
number or null |
[].longitude |
number or null |
[].lb_region_code |
string or null |
[].sort_order |
integer |
[].is_active |
boolean |
[].created_at |
string (date-time) |
[].updated_at |
string (date-time) |
Say which locations can take an order of this size right now
Section titled Say which locations can take an order of this size right nowGET /api/v1/locations/availability
Say which locations can take an order of this size right now.
Lists the same locations as GET /locations: each has servers, and
available is false with reason "Sold out for this plan" when none of
them has room for the memory and disk asked for. Refuses a module other
than vps or container with 400.
Parameters
Section titled Parameters| Name | In | Type | Required | Description |
|---|---|---|---|---|
module |
query | string | yes | vps or container |
hardware_tier_id |
query | integer or null | no | |
template_id |
query | integer or null | no | VPS OS template id |
memory_mb |
query | integer | no | Default: 512. |
disk_gb |
query | integer | no | VPS disk GB Default: 10. |
disk_mb |
query | integer | no | Container disk MB Default: 10240. |
Responses
Section titled Responses| Status | Meaning |
|---|---|
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
A 200 response is a list; each item has these fields:
| Field | Type |
|---|---|
[].id |
integer |
[].code |
string |
[].name |
string |
[].country_code |
string |
[].available |
boolean |
[].reason |
string or null |
The price book
Section titled The price bookGET /api/v1/price-book
Every price the cost estimator needs, in one answer. No sign in needed.
It holds the rate card for servers and web services billed by use (the price of memory, CPU, disk, requests and data out, and the amounts every account gets free each month), each size's memory, vCPUs and disk, the account plans with their limits, Object Storage's rates, the SMTP Relay plans, the price of an extra mailbox and the domain price list. Prices are strings in US dollars. Products we no longer sell, the free server plan and the plans a plan includes are left out, as they are from the product list.
The answer is the same for every visitor and is kept for thirty seconds, so a price you change in the admin console reaches the site within a minute.
Responses
Section titled Responses| Status | Meaning |
|---|---|
200 |
Success. |
Fields of a 200 response:
| Field | Type | Description |
|---|---|---|
currency |
string | The currency of every price, USD |
card |
Card | The rate card: rates (what one unit of memory, CPU, disk, requests, builds and logs costs), egress_gb (the price of data out in na_eu, oceania and other), regions (the class of each location code), included_monthly (the free amounts of the web and server pools), performance_multiplier and paid_plan_price. |
paid_plan |
Paid Plan | What Server access costs: monthly, and annually when it has a yearly price |
locations |
array of object | Each location's code, name and pricing region |
sizes |
array of object | Every size billed by use: slug, name, module (vps for Cloud Compute, container for game servers and databases), performance, memory_mb, vcpus and disk_gb |
plans |
array of object | The Free, Pro and Business plans: key, name, monthly, annually and their limits |
storage |
Storage | Object Storage's rates and what each plan includes each month (free) |
relay |
Relay | SMTP Relay's plans and the emails each account plan includes (included) |
mail |
The mailboxes each plan includes (included) and the price of an extra one (extra_mailbox) |
|
domains |
array of object | The domain price list: tld, register and renew, for a year |
lists |
Lists | The price lists of products with a flat price: ip, shield and snapshot_storage |
List the products you can order, with their prices
Section titled List the products you can order, with their pricesGET /api/v1/products/
List the products you can order, with their prices. No sign in needed.
Each product carries its product group, whether it is the plan we
highlight (popular), whether it can be ordered (orderable) and, for a
capacity add-on, its addon block. The list leaves out what you cannot
order: services a plan includes, products we no longer sell and the free
server plan. A plan sold only through our sales team is listed with
orderable false. Filter by group, product_group or hardware tier;
the list is sorted by position, then name, and paged with page and
per_page (at most 200).
What you can order depends on whether the Free, Pro and Business plans
apply to you: to your account when the request carries your session,
and otherwise to someone who signs up now, as GET /api/v1/features
answers. Until they do, the
standalone mail plans and the free SMTP relay are listed and orderable,
as they were before the plans.
A Cloud Compute plan (RX) or game server plan (CX) other than the free
server is billed by the second when you order it, from the memory, vCPUs
and disk it holds. Its entry has billing_model usage and a usage
block: the price of one hour and of a 730-hour month with the CPU idle
(hourly_idle, monthly_idle), at 10% of the vCPUs (hourly_typical,
monthly_typical) and with every vCPU busy (hourly_max,
monthly_max), and the part of the month that is disk (disk_monthly).
Performance plans cost 1.5 times as much for memory, CPU and disk. The
flat pricing stays in the entry for brand storefronts and for services
that keep their flat terms, and it is not what an order on coritan.com
costs. Every other product, and the free server plan, has neither field.
pricing holds the prices a customer can pay now. A price we switched
off, such as a billing cycle we stopped selling, is left out.
Parameters
Section titled Parameters| Name | In | Type | Required | Description |
|---|---|---|---|---|
group |
query | string | no | Only products in this catalogue group, by its name, such as App Deployment |
product_group |
query | string | no | Only products in this product group: websites, servers, email, storage, plans, addons. The words never change, while the dashboard shows websites as Services, servers as Infrastructure and email as Mail Services. Any other word answers 400. |
hardware_tier |
query | string | no | Only plans on this hardware tier, by its slug, such as budget |
hardware_tier_id |
query | integer | no | Only plans on this hardware tier, by its ID |
page |
query | integer | no | Default: 1. |
per_page |
query | integer | no | Default: 100. |
Responses
Section titled Responses| Status | Meaning |
|---|---|
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
A 200 response is a list; each item has these fields:
| Field | Type | Description |
|---|---|---|
[].id |
integer | |
[].name |
string | |
[].slug |
string | |
[].description |
string or null | |
[].group_name |
string or null | |
[].module_name |
string | |
[].hardware_tier_id |
integer or null | |
[].hardware_tier |
HardwareTierSummary or null | |
[].hardware_tier.id |
integer | |
[].hardware_tier.slug |
string | |
[].hardware_tier.name |
string | |
[].hardware_tier.code |
string | |
[].hardware_tier.description |
string or null | |
[].status |
string | |
[].config_schema |
object or null | |
[].sort_order |
integer | |
[].stock_limit |
integer or null | |
[].metadata |
object or null | |
[].pricing |
array of PricingResponse | |
[].pricing[].id |
integer | |
[].pricing[].product_id |
integer | |
[].pricing[].name |
string | |
[].pricing[].billing_cycle |
string | |
[].pricing[].price |
number | |
[].pricing[].setup_fee |
number | |
[].pricing[].currency |
string | |
[].pricing[].is_active |
boolean | |
[].pricing[].sort_order |
integer | |
[].pricing[].metadata |
object or null | |
[].pricing[].created_at |
string (date-time) | |
[].config_options |
array of ConfigOptionResponse | |
[].config_options[].id |
integer | |
[].config_options[].product_id |
integer | |
[].config_options[].field_name |
string | |
[].config_options[].label |
string | |
[].config_options[].field_type |
string | |
[].config_options[].options |
object or null | |
[].config_options[].default_value |
string or null | |
[].config_options[].required |
boolean | |
[].config_options[].price_modifier |
number | |
[].config_options[].sort_order |
integer | |
[].is_orderable_now |
boolean or null | |
[].stock_status |
string or null | |
[].availability_reason |
string or null | |
[].group_is_orderable_now |
boolean or null | |
[].group_stock_status |
string or null | |
[].locations |
array of ProductLocationAvailability | |
[].locations[].id |
integer | |
[].locations[].code |
string | |
[].locations[].name |
string | |
[].locations[].country_code |
string | |
[].locations[].available |
boolean | |
[].locations[].orderable |
boolean | |
[].locations[].reason |
string or null | |
[].created_at |
string (date-time) | |
[].product_group |
string or null | websites (shown as Services), servers (Infrastructure), email (Mail Services), storage, plans (account plans) or addons (add-ons). The words never change. |
[].popular |
boolean | The plan the catalogue highlights |
[].orderable |
boolean | Whether a new order for this product is accepted |
[].included |
boolean | A $0 service a plan includes; it is never ordered on its own |
[].sales_only |
boolean | Sold through our sales team rather than ordered |
| ... | More fields than this page lists; the interactive reference has them all. |
Get one product by its ID, with its prices
Section titled Get one product by its ID, with its pricesGET /api/v1/products/{product_id}
Get one product by its ID, with its prices. No sign in needed.
This answers for a product the list leaves out too, such as one we no
longer sell or one a plan includes, so a customer with a service on it
can still read its plan. orderable says whether we would accept a new
order for it from you, decided as the list decides it. An unknown ID
answers 404. A size billed by the second has billing_model and usage
as the list describes. pricing leaves out a price we switched off, as
the list does.
Parameters
Section titled Parameters| Name | In | Type | Required |
|---|---|---|---|
product_id |
path | integer | yes |
Responses
Section titled Responses| Status | Meaning |
|---|---|
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field | Type | Description |
|---|---|---|
id |
integer | |
name |
string | |
slug |
string | |
description |
string or null | |
group_name |
string or null | |
module_name |
string | |
hardware_tier_id |
integer or null | |
hardware_tier |
HardwareTierSummary or null | |
hardware_tier.id |
integer | |
hardware_tier.slug |
string | |
hardware_tier.name |
string | |
hardware_tier.code |
string | |
hardware_tier.description |
string or null | |
status |
string | |
config_schema |
object or null | |
sort_order |
integer | |
stock_limit |
integer or null | |
metadata |
object or null | |
pricing |
array of PricingResponse | |
pricing[].id |
integer | |
pricing[].product_id |
integer | |
pricing[].name |
string | |
pricing[].billing_cycle |
string | |
pricing[].price |
number | |
pricing[].setup_fee |
number | |
pricing[].currency |
string | |
pricing[].is_active |
boolean | |
pricing[].sort_order |
integer | |
pricing[].metadata |
object or null | |
pricing[].created_at |
string (date-time) | |
config_options |
array of ConfigOptionResponse | |
config_options[].id |
integer | |
config_options[].product_id |
integer | |
config_options[].field_name |
string | |
config_options[].label |
string | |
config_options[].field_type |
string | |
config_options[].options |
object or null | |
config_options[].default_value |
string or null | |
config_options[].required |
boolean | |
config_options[].price_modifier |
number | |
config_options[].sort_order |
integer | |
is_orderable_now |
boolean or null | |
stock_status |
string or null | |
availability_reason |
string or null | |
group_is_orderable_now |
boolean or null | |
group_stock_status |
string or null | |
locations |
array of ProductLocationAvailability | |
locations[].id |
integer | |
locations[].code |
string | |
locations[].name |
string | |
locations[].country_code |
string | |
locations[].available |
boolean | |
locations[].orderable |
boolean | |
locations[].reason |
string or null | |
created_at |
string (date-time) | |
product_group |
string or null | websites (shown as Services), servers (Infrastructure), email (Mail Services), storage, plans (account plans) or addons (add-ons). The words never change. |
popular |
boolean | The plan the catalogue highlights |
orderable |
boolean | Whether a new order for this product is accepted |
included |
boolean | A $0 service a plan includes; it is never ordered on its own |
sales_only |
boolean | Sold through our sales team rather than ordered |
| ... | More fields than this page lists; the interactive reference has them all. |