Skip to main content
A catalog is a list a company configures for itself and then picks from elsewhere in the product. Every catalog lives in one place and is served by one endpoint, /catalog-entry, with the catalog field saying which list a row belongs to.
This is separate from codes. Cost, union and per diem codes predate catalogs and keep their own endpoints. New lists are added here.
Search columns: code, description Standard CRUD applies, minus bulk delete. See standard endpoints.

Fields

Entries are referenced by value

A record does not point at an entry by id — it stores the code string. The same rule the code lists follow, and for the same reason: a timesheet keeps the classification it was approved under. Two consequences worth planning for:
  • Deactivate, do not delete. An entry still referenced by history should be set isActive: false. It disappears from pickers for new records while staying readable on the ones that already use it. Bulk delete is refused for this reason.
  • Renaming a code rewrites the records that use it. Changing code queues a background job that updates every stored reference — for pay types, the payTypes on every timesheet record holding the old code. It is not instant: a read taken immediately after a rename can still return the old one.
  • Codes are case-insensitive within a list. With OT already a pay type, creating ot is rejected as a duplicate. Across lists they are unrelated, so a future catalog may reuse the string freely.

A catalog cannot be changed

catalog is fixed at creation. Moving an entry between lists would silently retarget every record holding its code, and codes are only unique within a list, so the move could also collide. Create a new entry in the other catalog.

Examples

Always pass catalog when listing. Without it you get every catalog at once.