# Organization API: Catalog & Services: Products

> The 5 Organization API operations for products.

Source: https://www.coritan.com/docs/api/reference/organizations/catalog-services/products/

Part of [Catalog & Services](/docs/api/reference/organizations/catalog-services/).

## Operations

| Method | Path | Summary |
| --- | --- | --- |
| GET | [`/api/v1/orgs/{org_slug}/products`](#op-get-api-v1-orgs-org-slug-products) | List products |
| POST | [`/api/v1/orgs/{org_slug}/products`](#op-post-api-v1-orgs-org-slug-products) | Create product |
| PATCH | [`/api/v1/orgs/{org_slug}/products/{product_id}`](#op-patch-api-v1-orgs-org-slug-products-product-id) | Update product |
| GET | [`/api/v1/orgs/{org_slug}/products/{product_id}/pricing`](#op-get-api-v1-orgs-org-slug-products-product-id-pricing) | List product pricing |
| POST | [`/api/v1/orgs/{org_slug}/products/{product_id}/pricing`](#op-post-api-v1-orgs-org-slug-products-product-id-pricing) | Create product pricing |

### List products {#op-get-api-v1-orgs-org-slug-products}

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

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `org_slug` | path | string | yes |  |
| `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 |
| `[].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 product {#op-post-api-v1-orgs-org-slug-products}

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

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

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

#### 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 {#op-patch-api-v1-orgs-org-slug-products-product-id}

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

#### Parameters

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

#### Request body

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

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

### List product pricing {#op-get-api-v1-orgs-org-slug-products-product-id-pricing}

`GET /api/v1/orgs/{org_slug}/products/{product_id}/pricing`

#### Parameters

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

#### 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_product_id` | integer |
| `[].name` | string |
| `[].billing_cycle` | string |
| `[].price` | string |
| `[].setup_fee` | string |
| `[].currency` | string |
| `[].is_active` | boolean |
| `[].sort_order` | integer |
| `[].created_at` | string (date-time) or null |

### Create product pricing {#op-post-api-v1-orgs-org-slug-products-product-id-pricing}

`POST /api/v1/orgs/{org_slug}/products/{product_id}/pricing`

#### Parameters

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

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `name` | string | yes |
| `billing_cycle` | string | yes |
| `price` | number or string | yes |
| `setup_fee` | number or string | no |
| `currency` | string | no |

#### 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_product_id` | integer |
| `name` | string |
| `billing_cycle` | string |
| `price` | string |
| `setup_fee` | string |
| `currency` | string |
| `is_active` | boolean |
| `sort_order` | integer |
| `created_at` | string (date-time) or null |
