Skip to content
Coritan Docs

Client API: Catalog

Browse sellable products and plan options.

View as Markdown

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.

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 composition

GET /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>.

Name In Type Required
category query string or null no
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 specialization

GET /api/v1/client/containers/catalog/{slug}/compose

Get software versions + recommended runtimes for a specialization.

Authentication: an access token, sent as Authorization: Bearer <token>.

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.
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 code

GET /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.

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.
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 now

GET /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.

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.
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

GET /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.

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 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 prices

GET /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.

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.
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 prices

GET /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.

Name In Type Required
product_id path integer yes
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.