POST to /crm/v3/properties/{objectType} with a body specifying name (internal API identifier), label (display name), type (string, number, date, datetime, bool, enumeration), and fieldType (text, textarea, select, checkbox, radio, date, number, booleancheckbox)
For enumeration properties, include an options array with value, label, and displayOrder fields for each dropdown or radio option
Assign the property to a group by specifying groupName matching an existing property group name for the object type; retrieve valid groups via GET /crm/v3/properties/{objectType}/groups
Verify the created property using GET /crm/v3/properties/{objectType}/{propertyName} and confirm the returned name matches what was specified
Update the property label or options using PATCH /crm/v3/properties/{objectType}/{propertyName} — the name (internal identifier) cannot be changed after creation
Read property values on records via the standard objects API by passing the property name in the properties query parameter
Known gotchas
Property names are lowercase, can contain only alphanumeric characters and underscores, and are prefixed with the portal ID when created by integrations — the final stored name may differ from what was submitted
Enumeration property values cannot be deleted from the options array if any records have that value set; remove the option from the UI choices but the value persists on existing records
Properties of type date store values as Unix timestamps in milliseconds at midnight UTC — sending a date string instead of a timestamp causes a validation error
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp