Catalog Items
Manage reusable line items, services, and expense templates.
A catalog item is a reusable line item — a service, package, or expense template. Every item carries a type (charge for revenue, expense for cost) and a pricingMode (fixed, hourly, or bom).
Packages (Composition)
Catalog items have a composition field that says whether the item stands alone or represents a package:
atom— a single line item. This is the default; most items are atoms.bundle— a package: a saved set of items dropped into a quote as one pick. The bundle's component items and its price are managed in the dashboard (on the Charges page, Packages tab), so they're read-only through the API.
When composition is bundle, two more fields describe how the package is priced:
bundlePriceMode—sumcharges the total of the component items' prices;fixedcharges one set price regardless of the components. It'snullfor atoms.bundleFixedPrice— the set price used whenbundlePriceModeisfixed. It'snullfor atoms and for sum-priced bundles.
To list only packages, filter the list endpoint with composition=bundle.
In: header
Query Parameters
11 <= value251 <= value <= 100"expense" | "charge""active" | "paused" | "archived""atom" | "bundle"UUID v4
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://www.clientcasa.com/api/v1/catalog-items"{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "string",
"invoiceLabel": "string",
"description": "string",
"invoiceDescription": "string",
"defaultRate": 0,
"unit": "flat",
"defaultFrequency": "one-time",
"type": "expense",
"pricingMode": "fixed",
"composition": "atom",
"bundlePriceMode": "sum",
"bundleFixedPrice": 0,
"taxCategoryId": "550e8400-e29b-41d4-a716-446655440000",
"status": "active",
"clientId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
],
"pagination": {
"page": 1,
"pageSize": 1,
"total": 0,
"totalPages": 0,
"hasMore": true
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}In: header
Header Parameters
Optional unique key that makes this create safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://www.clientcasa.com/api/v1/catalog-items" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "type": "expense" }'{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "string",
"invoiceLabel": "string",
"description": "string",
"invoiceDescription": "string",
"defaultRate": 0,
"unit": "flat",
"defaultFrequency": "one-time",
"type": "expense",
"pricingMode": "fixed",
"composition": "atom",
"bundlePriceMode": "sum",
"bundleFixedPrice": 0,
"taxCategoryId": "550e8400-e29b-41d4-a716-446655440000",
"status": "active",
"clientId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}In: header
Path Parameters
UUID v4
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://www.clientcasa.com/api/v1/catalog-items/550e8400-e29b-41d4-a716-446655440000"{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "string",
"invoiceLabel": "string",
"description": "string",
"invoiceDescription": "string",
"defaultRate": 0,
"unit": "flat",
"defaultFrequency": "one-time",
"type": "expense",
"pricingMode": "fixed",
"composition": "atom",
"bundlePriceMode": "sum",
"bundleFixedPrice": 0,
"taxCategoryId": "550e8400-e29b-41d4-a716-446655440000",
"status": "active",
"clientId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}In: header
Path Parameters
UUID v4
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://www.clientcasa.com/api/v1/catalog-items/550e8400-e29b-41d4-a716-446655440000" \ -H "Content-Type: application/json" \ -d '{}'{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "string",
"invoiceLabel": "string",
"description": "string",
"invoiceDescription": "string",
"defaultRate": 0,
"unit": "flat",
"defaultFrequency": "one-time",
"type": "expense",
"pricingMode": "fixed",
"composition": "atom",
"bundlePriceMode": "sum",
"bundleFixedPrice": 0,
"taxCategoryId": "550e8400-e29b-41d4-a716-446655440000",
"status": "active",
"clientId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}In: header
Path Parameters
UUID v4
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://www.clientcasa.com/api/v1/catalog-items/550e8400-e29b-41d4-a716-446655440000"{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"property1": null,
"property2": null
}
}
}