ClientCasa
API

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:

  • bundlePriceModesum charges the total of the component items' prices; fixed charges one set price regardless of the components. It's null for atoms.
  • bundleFixedPrice — the set price used when bundlePriceMode is fixed. It's null for atoms and for sum-priced bundles.

To list only packages, filter the list endpoint with composition=bundle.

GET
/api/v1/catalog-items
x-api-key<token>

In: header

Query Parameters

page?integer
Default1
Range1 <= value
pageSize?integer
Default25
Range1 <= value <= 100
type?string
Value in"expense" | "charge"
status?string
Value in"active" | "paused" | "archived"
composition?string
Value in"atom" | "bundle"
clientId?string

UUID v4

Formatuuid

Response 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
    }
  }
}
POST
/api/v1/catalog-items
x-api-key<token>

In: header

Header Parameters

Idempotency-Key?string

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.

Lengthlength <= 255

Request 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
    }
  }
}
GET
/api/v1/catalog-items/{id}
x-api-key<token>

In: header

Path Parameters

id*string

UUID v4

Formatuuid

Response 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
    }
  }
}
PATCH
/api/v1/catalog-items/{id}
x-api-key<token>

In: header

Path Parameters

id*string

UUID v4

Formatuuid

Request 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
    }
  }
}
DELETE
/api/v1/catalog-items/{id}
x-api-key<token>

In: header

Path Parameters

id*string

UUID v4

Formatuuid

Response 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"
Empty
{
  "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
    }
  }
}

On this page