WH-A for a warehouse job or LOC-123 for a union local.
The three lists have identical shape and behavior, and each gets its own set of
endpoints:
Newer company-configured lists — pay types among them — live under
catalog entries instead. These three keep their
own endpoints.
code, description
Standard CRUD applies, minus bulk delete. See
standard endpoints.
Codes are referenced by value
This is the one thing to understand before you write to these lists. A record does not point at a code by id — it stores the code string:
There is no foreign key behind any of them. Two consequences follow, and both
matter for an integration:
Per diem codes are the exception to the table above: they are referenced from a
person’s per diem entries, which the v2 public API does not expose. You can manage
the list here, but nothing in this API reads from it.
Fields
Every property the API returns for a code, on all three lists.Codes carry no
name, no identifier, and no isArchived. They are keyed by
code within your organization, and isActive is the only lifecycle field.What you can write
Everything else in the table above is set by BuildingSwell.
A duplicate
code within the same list is rejected with 409:
Retiring a code
isActive is how you take a code out of circulation without touching the records
that already carry it. Retire one code, or a filtered batch in a single call:
400 rather than retiring the whole list.
Inactive codes are still returned by GET /cost-code. Filter on isActive when
you only want the live ones:
Deleting
Bulk delete is not available.DELETE /cost-code/bulk always returns 403, on all
three lists, so a broad filter can never empty a list in one call. See
archiving and deleting for the full picture
across resources.
Permissions
Each list is its own permission subject —cost_code, union_code, and
per_diem_code — and access fails closed. A key whose role was never granted a
list gets 403 on reads of that list, not an empty page. See
roles for how statements are put together.