# Set up products and pricing

> Create the products your customers buy, link each one to a Coritan product, and set a price for each billing cycle.

Source: https://docs.coritan.com/organizations/products-and-pricing/

In the dashboard:

- /dashboard/organizations/…/products: https://www.coritan.com/dashboard/organizations

Products are what your customers can buy, and plans are their prices. Create a product for each thing you sell, link it to a Coritan product when Coritan should create the resource, then add at least one plan so customers can order it.

## Before you begin

- Any member can see products. Creating and changing them takes the owner or admin role.
- For a linked product, look at the Coritan product you want to resell and its price, which your Coritan account pays for each resource. [Billing](/billing/) explains how your account pays.

## Kinds of product

**Linked to a platform product**
: Coritan creates the resource, such as a Container Apps server or a Cloud Compute instance, when a customer orders. The resource runs on the owner's Coritan account at Coritan's price for the matching billing cycle.

**Standalone**
: You deliver it yourself, and Coritan creates nothing. Use it for a service you provide outside Coritan, such as setup work.

## Create a product

1. In the [dashboard](https://www.coritan.com/dashboard/organizations), open the organization, then the **Products** tab.
2. Select **New product**.
3. Enter a **Name** and check the **Slug**, which your storefront uses in the product's address. The slug takes lowercase letters, digits and hyphens and cannot be changed later.
4. Add a **Description** if you like.
5. Under **Kind**, choose **Linked to a platform product** and pick the **Platform product**, or choose **Standalone**.
6. Select **Create product**.

The dashboard reminds you to add a plan: a product without an active plan cannot be ordered, and the product list shows **None** under **Active plans**.

## Add a plan

1. Open the product and, under **Plans**, select **Add plan**.
2. Enter a **Plan name**, such as `Monthly`.
3. Choose a **Billing cycle**: monthly, quarterly, semi-annually, annually, biennially, one time or hourly.
4. Enter the **Currency** as a three-letter code, the **Price** and, if you charge one, a **Setup fee**.
5. Select **Add plan**.

The plan appears under **Plans** and the product can be ordered on your storefront. You cannot edit or remove a plan once it is added, so check the price before you save it, and add a new plan to change a price.

## Change or hide a product

1. Open the product and select **Edit**.
2. Change the **Name**, **Description** or **Sort order**. Lower numbers come first on the storefront.
3. Clear **Available to order** to hide the product. Hidden products keep their existing services.
4. Select **Save changes**.

The **Available to order** switch on the product page does the same as the checkbox. The kind and the linked product cannot be changed after creation.

## Troubleshooting

**Product limit reached**
: Your organization holds as many products as Coritan allows its tier, and **New product** is turned off. The API answers `Product limit reached (50/50)`. Hide or reuse a product, or ask [support](https://www.coritan.com/dashboard/support) to raise the limit.

`Product slug already exists`
: Another of your products uses the slug. Choose another.

`Your organization cannot sell the free plan. Contact support to have it switched on.`
: Coritan's free plan is only offered to organizations Coritan has allowed to sell it.

`Platform product not found`
: The linked product id does not exist. List the products you can link with `GET /platform-products`.

## Related

- [Manage customer services](/organizations/customer-services/)
- [Show your catalogue with the Storefront API](/organizations/storefront/storefront-api/)
- [How organizations work](/organizations/how-organizations-work/)

## With the API

List the Coritan products you can link to. The list is Coritan's active catalogue, with the free plan when Coritan lets your organization sell it:

```bash
curl https://api.coritan.com/api/v1/orgs/acme/platform-products \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

Create a product with `name`, `slug`, `description`, `product_type` (`platform_linked` or `custom_standalone`, which is the default in the API) and `linked_product_id` for a linked product:

```bash
curl -X POST https://api.coritan.com/api/v1/orgs/acme/products \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Pro Container", "slug": "pro-container", "product_type": "platform_linked", "linked_product_id": 17}'
```

Add a plan with `name`, `billing_cycle` (`monthly`, `quarterly`, `semiannually`, `annually`, `biennially`, `one_time` or `hourly`), `price`, `setup_fee` (default `0`) and `currency` (default `USD`):

```bash
curl -X POST https://api.coritan.com/api/v1/orgs/acme/products/5/pricing \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Monthly", "billing_cycle": "monthly", "price": "12.99", "currency": "EUR"}'
```

`GET /products` lists your products, `GET /products/{product_id}/pricing` lists a product's active plans, and `PATCH /products/{product_id}` changes `name`, `description`, `is_active`, `sort_order` and `config_schema`.

For a product linked to Container Apps, `GET /containers/catalog` lists the games and applications a server can run, Coritan's and your organization's own, filtered with `category`. `GET /containers/catalog/{slug}/compose` returns one entry's versions and the runtimes recommended for each.

## API

- `GET /api/v1/orgs/{org_slug}/products`: List products (https://docs.coritan.com/api/reference/organizations/catalog-services/products/#op-get-api-v1-orgs-org-slug-products)
- `POST /api/v1/orgs/{org_slug}/products`: Create product (https://docs.coritan.com/api/reference/organizations/catalog-services/products/#op-post-api-v1-orgs-org-slug-products)
- `PATCH /api/v1/orgs/{org_slug}/products/{product_id}`: Update product (https://docs.coritan.com/api/reference/organizations/catalog-services/products/#op-patch-api-v1-orgs-org-slug-products-product-id)
- `GET /api/v1/orgs/{org_slug}/products/{product_id}/pricing`: List product pricing (https://docs.coritan.com/api/reference/organizations/catalog-services/products/#op-get-api-v1-orgs-org-slug-products-product-id-pricing)
- `POST /api/v1/orgs/{org_slug}/products/{product_id}/pricing`: Create product pricing (https://docs.coritan.com/api/reference/organizations/catalog-services/products/#op-post-api-v1-orgs-org-slug-products-product-id-pricing)
- `GET /api/v1/orgs/{org_slug}/platform-products`: The platform products this organization may link a product to (https://docs.coritan.com/api/reference/organizations/catalog-services/platform-products/#op-get-api-v1-orgs-org-slug-platform-products)
- `GET /api/v1/orgs/{org_slug}/containers/catalog`: Browse platform + this org's specializations for versioned deploy UX (https://docs.coritan.com/api/reference/organizations/org-container-catalog/#op-get-api-v1-orgs-org-slug-containers-catalog)
- `GET /api/v1/orgs/{org_slug}/containers/catalog/{slug}/compose`: Compose versions + recommended runtimes for an org-visible specialization (https://docs.coritan.com/api/reference/organizations/org-container-catalog/#op-get-api-v1-orgs-org-slug-containers-catalog-slug-compose)
