---
title: "Catalog — API reference"
description: "Orderable products, locations and operating system images."
url: https://www.gyrohosting.com/developers/en/api/catalog.html
language: en
openapi: https://www.gyrohosting.com/developers/openapi.json
api_version: 2.30.0
---

# Catalog

Orderable products, locations and operating system images.

Base URL: `https://www.gyrohosting.com/api/v1/client` · OpenAPI: https://www.gyrohosting.com/developers/openapi.json


## GET /cloud/products

**List orderable cloud server products** · operationId `listProducts` · scope `cloud_read` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/listProducts.json

Prices are in the product currency, VAT excluded. `available=false` means temporarily out of stock.


### Parameters

| Field | in | Type | Description |
|---|---|---|---|
| `region` | query | string | Filter by region (see GET /cloud/locations). A city name (falkenstein) also works. |
| `plan` | query | string | Filter by plan name |
| `location` | query | string | Deprecated alias of region (legacy location code) |
| `server_type` | query | string | Deprecated alias of plan (legacy type code) |
| `page` | query | integer |  |
| `limit` | query | integer |  |

### Responses

- **200**: Products
- **401**: Missing, invalid or revoked key
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Examples

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/products' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro plan list
```
```hcl
# data source gyro_products: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/data-sources/products
data "gyro_products" "frankfurt_area" {
  region         = "eu-de-1"
  available_only = true
}

output "plans" {
  value = [for p in data.gyro_products.frankfurt_area.products : "${p.plan} (${p.name}): ${p.monthly_price} ${p.currency}"]
}
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/products", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/products", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /cloud/locations

**List locations with orderable products** · operationId `listLocations` · scope `cloud_read` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/listLocations.json




### Responses

- **200**: Locations
- **401**: Missing, invalid or revoked key

### Examples

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/locations' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro location list
```
```hcl
# data source gyro_locations: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/data-sources/locations
data "gyro_locations" "all" {}

output "regions" {
  value = { for l in data.gyro_locations.all.locations : l.region => "${l.city}, ${l.country}" }
}
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/locations", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/locations", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /cloud/images

**List operating system images** · operationId `listImages` · scope `cloud_read` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/listImages.json




### Parameters

| Field | in | Type | Description |
|---|---|---|---|
| `region` | query | string | Only images offered in this region (e.g. tr-ist-1). Without it: the images of the global cloud catalogue (unchanged). |
| `product_id` | query | integer | Only the images offered on this product (implies its region). |
| `plan` | query | string | With region: only the images of this plan in that region. |

### Responses

- **200**: Images
- **401**: Missing, invalid or revoked key
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Examples

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/images' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro image list
```
```hcl
# data source gyro_images: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/data-sources/images
data "gyro_images" "example" {

}
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/images", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/images", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /products

**List products** · operationId `coreGetProducts` · scope `Products/GetProducts` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/coreGetProducts.json

List products. 

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satistaki-urunler).


### Parameters

| Field | in | Type | Description |
|---|---|---|---|
| `page` | query | integer | Kaçıncı sayfa. |
| `limit` | query | integer | Sayfa başına satır. En çok 100. |
| `type` | query | string | Tek bir ürün türü. Bilinmeyen tür reddedilir ve geçerli liste yanıtın ayrıntısında gelir. |
| `category` | query | integer | Kategori numarası. Ana kategoriyle de ek atamalarla da eşleşir. |
| `search` | query | string | Ürün başlığında arar. |

### Responses

- **200**: Success
- **401**: Missing, invalid or revoked key
- **403**: Key lacks the scope, IP not allowed, or feature disabled
- **422**: type_invalid

### Examples

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/products' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro core product list
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/products", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/products", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /products/categories

**List product categories** · operationId `coreGetProductCategories` · scope `Products/GetProductCategories` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/coreGetProductCategories.json

List product categories. 

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satistaki-urunler).


### Parameters

| Field | in | Type | Description |
|---|---|---|---|
| `type` | query | string | Yalnız bu türün kategorileri. Bilinmeyen değer boş liste verir, hata değil. |

### Responses

- **200**: Success
- **401**: Missing, invalid or revoked key
- **403**: Key lacks the scope, IP not allowed, or feature disabled

### Examples

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/products/categories' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro product category list
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/products/categories", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/products/categories", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /products/{id}

**Get product (path: {id})** · operationId `coreGetProduct` · scope `Products/GetProduct` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/coreGetProduct.json

Get product (path: {id}). 

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satistaki-urunler).


### Parameters

| Field | in | Type | Description |
|---|---|---|---|
| `id` (required) | path | integer |  |

### Responses

- **200**: Success
- **401**: Missing, invalid or revoked key
- **403**: Key lacks the scope, IP not allowed, or feature disabled
- **404**: not_found

### Examples

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/products/12345' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro product get 12345
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/products/12345", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/products/12345", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```
