Organization API: Catalog & Services: Products
The 6 Organization API operations for products.
Part of Catalog & Services.
Operations
Section titled Operations| 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 |
List products
Section titled List productsGET /api/v1/orgs/{org_slug}/products
Parameters
Section titled Parameters| Name | In | Type | Required | Description |
|---|---|---|---|---|
org_slug |
path | string | yes | |
active_only |
query | boolean | no | Default: True. |
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 |
[].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 |
Create a product
Section titled Create a productPOST /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.
Parameters
Section titled Parameters| Name | In | Type | Required |
|---|---|---|---|
org_slug |
path | string | yes |
Request body
Section titled Request bodyapplication/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. |
Responses
Section titled Responses| 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 |
Update product
Section titled Update productPATCH /api/v1/orgs/{org_slug}/products/{product_id}
Parameters
Section titled Parameters| Name | In | Type | Required |
|---|---|---|---|
product_id |
path | integer | yes |
org_slug |
path | string | yes |
Request body
Section titled Request bodyapplication/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 |
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 |
|---|---|
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 product object storage
Section titled Get product object storageGET /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.
Parameters
Section titled Parameters| Name | In | Type | Required |
|---|---|---|---|
product_id |
path | integer | yes |
org_slug |
path | string | 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 |
|---|---|---|
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 amountsPUT /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.
Parameters
Section titled Parameters| Name | In | Type | Required |
|---|---|---|---|
product_id |
path | integer | yes |
org_slug |
path | string | yes |
Request body
Section titled Request bodyapplication/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. |
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 |
|---|---|---|
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 |
Quote product wholesale
Section titled Quote product wholesaleGET /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.
Parameters
Section titled Parameters| 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. |
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 |
|---|---|
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 |