# Create a product Creates a product. Endpoint: POST /products Version: latest Security: SecretApiKey, JWT ## Request fields (application/json): - `name` (string, required) Name of the product. Example: "Premium membership" - `unitLabel` (string) Unit label, such as per or per . Example: "seat" - `description` (string,null) Description of the product. - `requiresShipping` (boolean) Specifies if the product requires shipping. If this value is , shipping calculations are applied. - `options` (array) Product options such as color, size, and so forth. Product option values are defined in plans. For more information, see [Plans](https://www.rebilly.com/docs/dev-docs/api/plans/). - `taxCategoryId` (string,null) Tax category of the product. For a complete list of supported tax categories, see [TaxJar sales tax API reference](https://developers.taxjar.com/api/reference/#get-list-tax-categories). If none of the tax categories from the list are applicable for your product, use the general tax category . Example: "00000" - `accountingCode` (string,null) Accounting code of the product. Example: "4010" - `recognition` (object,null) - `recognition.debitAccountId` (string,null) ID of the debit journal account. - `recognition.creditAccountId` (string,null) ID of the credit journal account. - `customFields` (object) Use custom fields to extend a resource scheme to include custom data that is not provided as a common field. For more information, see [Custom fields](https://www.rebilly.com/catalog/all/custom-fields). ## Response 201 fields (application/json): - `id` (string) ID of the product. Example: "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ" - `name` (string, required) Name of the product. Example: "Premium membership" - `unitLabel` (string) Unit label, such as per or per . Example: "seat" - `description` (string,null) Description of the product. - `requiresShipping` (boolean) Specifies if the product requires shipping. If this value is , shipping calculations are applied. - `options` (array) Product options such as color, size, and so forth. Product option values are defined in plans. For more information, see [Plans](https://www.rebilly.com/docs/dev-docs/api/plans/). - `taxCategoryId` (string,null) Tax category of the product. For a complete list of supported tax categories, see [TaxJar sales tax API reference](https://developers.taxjar.com/api/reference/#get-list-tax-categories). If none of the tax categories from the list are applicable for your product, use the general tax category . Example: "00000" - `accountingCode` (string,null) Accounting code of the product. Example: "4010" - `recognition` (object,null) - `recognition.debitAccountId` (string,null) ID of the debit journal account. - `recognition.creditAccountId` (string,null) ID of the credit journal account. - `customFields` (object) Use custom fields to extend a resource scheme to include custom data that is not provided as a common field. For more information, see [Custom fields](https://www.rebilly.com/catalog/all/custom-fields). - `createdTime` (string) Date and time which is set automatically when the resource is created. - `updatedTime` (string) Date and time which updates automatically when the resource is updated. - `_links` (array) Related links. - `_links.href` (string) Link URL. - `_links.rel` (string) Type of link. Enum: "self" ## Response 401 fields (application/json): - `status` (integer) HTTP status code. - `type` (string) Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference. It should provide human-readable documentation for the problem type. When this member is not present, its value is assumed to be "about:blank". - `title` (string) Short, human-readable summary of the problem type. Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem. - `detail` (string) Human-readable explanation that is specific to this occurrence of the problem. - `instance` (string) URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. ## Response 403 fields (application/json): - `status` (integer) HTTP status code. - `type` (string) Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference. It should provide human-readable documentation for the problem type. When this member is not present, its value is assumed to be "about:blank". - `title` (string) Short, human-readable summary of the problem type. Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem. - `detail` (string) Human-readable explanation that is specific to this occurrence of the problem. - `instance` (string) URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. ## Response 422 fields (application/json): - `status` (integer) HTTP status code. - `type` (string) Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference. It should provide human-readable documentation for the problem type. When this member is not present, its value is assumed to be "about:blank". - `title` (string) Short, human-readable summary of the problem type. Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem. - `detail` (string) Human-readable explanation that is specific to this occurrence of the problem. - `instance` (string) URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. - `invalidFields` (array) Invalid field details. Example: [{"field":"field1","message":"field1 is invalid"},{"field":"subObject.field2","message":"field2 is invalid"},{"field":"subObject.field2","message":"another error in the field2"}] - `invalidFields.field` (string) Name of the field. Dot notation is used for nested object field names. - `invalidFields.message` (string) Message field. ## Response 429 fields (application/json): - `type` (string) Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference. It should provide human-readable documentation for the problem type. When this member is not present, its value is assumed to be "about:blank". Example: "about:blank" - `title` (string) Short, human-readable summary of the problem type. Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem. Example: "Rate Limit Exceeded" - `status` (integer) HTTP status code. - `detail` (string) Human-readable explanation that is specific to this occurrence of the problem. Example: "A request cannot be executed because the user has sent too many requests within a certain period of time" - `instance` (string) URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.