# Client API: Catalog

> Browse sellable products and plan options.

Source: https://docs.coritan.com/api/reference/client/catalog/

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](https://api.coritan.com/docs).

## Operations

| Method | Path | Summary |
| --- | --- | --- |
| GET | [`/api/v1/client/containers/catalog`](#op-get-api-v1-client-containers-catalog) | Browse platform specializations available for deploy composition |
| GET | [`/api/v1/client/containers/catalog/{slug}/compose`](#op-get-api-v1-client-containers-catalog-slug-compose) | Get software versions + recommended runtimes for a specialization |
| GET | [`/api/v1/locations`](#op-get-api-v1-locations) | List locations |
| GET | [`/api/v1/locations/availability`](#op-get-api-v1-locations-availability) | Locations availability |
| GET | [`/api/v1/products/`](#op-get-api-v1-products) | List products |
| GET | [`/api/v1/products/{product_id}`](#op-get-api-v1-products-product-id) | Get product |

### Browse platform specializations available for deploy composition {#op-get-api-v1-client-containers-catalog}

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

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `category` | query | string or null | no |

#### 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 {#op-get-api-v1-client-containers-catalog-slug-compose}

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

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

| 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 |
| `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 locations {#op-get-api-v1-locations}

`GET /api/v1/locations`

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `active_only` | query | boolean | no | Default: `True`. |

#### 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) |

### Locations availability {#op-get-api-v1-locations-availability}

`GET /api/v1/locations/availability`

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

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

### List products {#op-get-api-v1-products}

`GET /api/v1/products/`

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `group` | query | string | no |  |
| `hardware_tier` | query | string | no |  |
| `hardware_tier_id` | query | integer | no |  |
| `page` | query | integer | no | Default: `1`. |
| `per_page` | query | integer | no | Default: `100`. |

#### 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 |
| `[].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) |

### Get product {#op-get-api-v1-products-product-id}

`GET /api/v1/products/{product_id}`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `product_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

Fields of a `200` response:

| Field | Type |
| --- | --- |
| `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) |
