Skip to content
Coritan Docs

Organization API: Catalog & Services: Products

The 6 Organization API operations for products.

View as Markdown

Part of Catalog & Services.

Method Path Summary
GET /api/v1/orgs/{org_slug}/products List products
POST /api/v1/orgs/{org_slug}/products Create a product
PATCH /api/v1/orgs/{org_slug}/products/{product_id} Update product
GET /api/v1/orgs/{org_slug}/products/{product_id}/object-storage Get product object storage
PUT /api/v1/orgs/{org_slug}/products/{product_id}/object-storage Set a product's Object Storage rates and free amounts
GET /api/v1/orgs/{org_slug}/products/{product_id}/wholesale Quote product wholesale

GET /api/v1/orgs/{org_slug}/products

Name In Type Required Description
org_slug path string yes
active_only query boolean no Default: True.
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
[].org_id integer
[].name string
[].slug string
[].description string or null
[].product_type string
[].linked_product_id integer or null
[].is_active boolean
[].sort_order integer
[].created_at string (date-time) or null
[].active_plan_count integer

POST /api/v1/orgs/{org_slug}/products

Create a product. A product linked to pay as you go Object Storage needs object_storage: its rates and free amounts, each rate at least Coritan's wholesale rate (422 below_wholesale_rate). Any other product refuses object_storage.

Name In Type Required
org_slug path string yes

application/json (required)

Field Type Required Description
name string yes
slug string yes
description string or null no
product_type string no
linked_product_id integer or null no
config_schema object or null no
object_storage ObjectStorageTermsIn or null no The Object Storage rates and free amounts. Required when linked_product_id is pay as you go Object Storage, and refused for any other product.
object_storage.rates ObjectStorageRatesIn yes What the brand charges its customers for Object Storage, in its invoice currency.
object_storage.free ObjectStorageFreeIn no What each customer uses free each calendar month. Coritan charges you its wholesale rate for it.
Status Meaning
201 Success.
422 The request is not valid. detail lists each problem.

Fields of a 201 response:

Field Type
id integer
org_id integer
name string
slug string
description string or null
product_type string
linked_product_id integer or null
is_active boolean
sort_order integer
created_at string (date-time) or null
active_plan_count integer

PATCH /api/v1/orgs/{org_slug}/products/{product_id}

Name In Type Required
product_id path integer yes
org_slug path string yes

application/json (required)

Field Type Required
name string or null no
description string or null no
is_active boolean or null no
config_schema object or null no
sort_order integer or null no
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

Fields of a 200 response:

Field Type
id integer
org_id integer
name string
slug string
description string or null
product_type string
linked_product_id integer or null
is_active boolean
sort_order integer
created_at string (date-time) or null
active_plan_count integer

GET /api/v1/orgs/{org_slug}/products/{product_id}/object-storage

The Object Storage rates and free amounts a product sells at, and the least each rate may be. The rates are what your customers pay for storage and for each million operations; each customer's free amounts are theirs each calendar month. Any member; 404 for another organization's product or one that is not linked to pay as you go Object Storage.

Name In Type Required
product_id path integer yes
org_slug path string yes
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

Fields of a 200 response:

Field Type Description
currency string The currency the rates were saved in. It is invoice_currency unless that changed since.
configured boolean False while the product has no rates of its own and Coritan's list rates stand in.
rates Rates storage_gb_month, class_a_million and class_b_million.
free Free storage_gb_month (GB-months), class_a and class_b (operations), per customer each month.
list_rates object or null Coritan's list rates in invoice_currency, when they can be converted.
wholesale_rates object or null The least each rate may be, in invoice_currency: what Coritan charges you. null when no floor applies.
limited boolean Whether a rate under wholesale_rates is refused.
reason string or null Why there is no floor: exempt, not_linked, no_list_price or no_rate.
discount_percent number How far below list Coritan's wholesale rates are.
invoice_currency string The currency your invoices are made in. Rates in another currency wait until they are saved again.
currency_matches boolean

Set a product's Object Storage rates and free amounts

Section titled Set a product's Object Storage rates and free amounts

PUT /api/v1/orgs/{org_slug}/products/{product_id}/object-storage

Set a product's Object Storage rates and free amounts. Each rate may not go below Coritan's wholesale rate for it, in your invoice currency: 422 below_wholesale_rate names the rate and the least it may be. Customers already on the product are rated at the new terms from the next hour, and the use rated before keeps the rate it had. Owners and admins; 404 for another organization's product or one that is not linked to pay as you go Object Storage.

Name In Type Required
product_id path integer yes
org_slug path string yes

application/json (required)

Field Type Required Description
rates ObjectStorageRatesIn yes What the brand charges its customers for Object Storage, in its invoice currency.
rates.storage_gb_month number or string yes The price of one GB stored for a month, up to four decimal places.
rates.class_a_million number or string yes The price of one million Class A operations (uploads and listings), up to four decimal places.
rates.class_b_million number or string yes The price of one million Class B operations (downloads and reads), up to four decimal places.
free ObjectStorageFreeIn no What each customer uses free each calendar month. Coritan charges you its wholesale rate for it.
free.storage_gb_month number or string no GB-months of storage.
free.class_a integer no Class A operations.
free.class_b integer no Class B operations.
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

Fields of a 200 response:

Field Type Description
currency string The currency the rates were saved in. It is invoice_currency unless that changed since.
configured boolean False while the product has no rates of its own and Coritan's list rates stand in.
rates Rates storage_gb_month, class_a_million and class_b_million.
free Free storage_gb_month (GB-months), class_a and class_b (operations), per customer each month.
list_rates object or null Coritan's list rates in invoice_currency, when they can be converted.
wholesale_rates object or null The least each rate may be, in invoice_currency: what Coritan charges you. null when no floor applies.
limited boolean Whether a rate under wholesale_rates is refused.
reason string or null Why there is no floor: exempt, not_linked, no_list_price or no_rate.
discount_percent number How far below list Coritan's wholesale rates are.
invoice_currency string The currency your invoices are made in. Rates in another currency wait until they are saved again.
currency_matches boolean

GET /api/v1/orgs/{org_slug}/products/{product_id}/wholesale

The floor a new plan of the product would have to clear on billing_cycle in currency, so a console can name it before the plan exists. The same quote POST …/pricing checks the floor with.

For a Cloud Compute or Container Apps plan, compute gives the plan's monthly cost at wholesale rates: idle (memory and disk, the server on all month with no CPU), typical (CPU at 10%) and most (every vCPU busy). A price may not be below idle, and floor_price is that figure. For any other plan the floor is wholesale_price. Coritan's own organizations have no floor. Any member; 404 for another organization's product.

Name In Type Required Description
product_id path integer yes
org_slug path string yes
billing_cycle query string yes The plan's cycle, one of the words POST …/pricing takes.
currency query string yes The plan's currency, three letters.
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

Fields of a 200 response:

Field Type
billing_cycle string
currency string
list_price number or null
wholesale_price number or null
setup_list number or null
wholesale_setup_fee number or null
discount_percent number
limited boolean
reason string or null
floor_price number or null
floor_kind string or null
compute object or null