/custom-property (relative to your instance’s /api/v2).
The standard endpoints provide reads and writes, subject to the constraints below.
Search columns: name, key, identifier
Fields
Availability
API-key permissions must also allow the catalog or deliverable operation you are performing. Enabling the feature does not grant permissions.Create a definition
key, name, and dataType are required. A key starts with a letter, contains only letters and digits, and is at most 64 characters. Keys are immutable and unique case-insensitively across active and archived definitions. Use the exact stored key in order values. Display names can change and must be unique among active definitions.
deliverableTypes defaults to ["order"]; this is the only supported scope. unitMeasureId is allowed only for number properties. Select definitions use options, an ordered array of nonempty strings unique case-insensitively. allowsAdHocOptions defaults to false and applies only to select types.
Write values on an order
data.properties, keyed by the definition’s key, not its UUID or display name. Nonempty objects merge the supplied keys with existing values; omitted keys are preserved.
Option matching is case-insensitive and preserves the catalog’s spelling. Unknown options fail unless
allowsAdHocOptions is true, in which case they are appended to the catalog. Removing an option does not remove values already stored on orders; those values can still round-trip.
Unknown property keys, invalid values, and nonempty values on unsupported deliverable types return 400.
Clear values
- Omit
data.propertiesto leave all property values untouched. - Send
{ "data": { "properties": { "squareFeet": null } } }to remove one value. An empty string or empty array also clears that key. - Send
{ "data": { "properties": {} } }orproperties: nullto clear all values. An empty object is not a no-op.
Filter, select, and count
select field is returned as the flattened key
dataPropertiesSquareFeet, rather than as a nested data.properties object.
Use POST /deliverable/group-and-count with
groupByField: "data.properties.squareFeet" when you want counts by exact
stored value. SUM and AVG across deliverables are not exposed by this API;
POST /deliverable/query rejects grouped reads. See
grouping and counting.
Archive and restore
DELETE /custom-property/{id} archives the definition and returns 204. It preserves order values and never frees the key. Restore with PATCH /custom-property/{id} and { "isArchived": false }. If another active definition has taken the display name, rename while restoring. Bulk DELETE is forbidden.
Archived definitions keep validating existing order data, but are excluded from the active catalog and property import/export columns. List archived definitions with isArchived=true.