Define the association label by sending POST /crm/v4/associations/{fromObjectType}/{toObjectType}/labels with a label name and optional inverse label name in the request body
Note the returned typeId values for the label and its inverse; you will need these to create labeled associations between records
To associate two specific records, send POST /crm/v4/objects/{fromObjectType}/{fromObjectId}/associations/{toObjectType}/{toObjectId} with an array of association type objects referencing the typeId
Do not use PUT at the /labels path to create a label; PUT at that path updates or associates two specific records, not the label definition
Confirm the association by fetching GET /crm/v4/objects/{fromObjectType}/{fromObjectId}/associations/{toObjectType} and verifying the label appears in the results
Use batch endpoints (POST /crm/v4/associations/{fromObjectType}/{toObjectType}/batch/create) to associate many record pairs efficiently
Known gotchas
POST /crm/v4/associations/{fromObjectType}/{toObjectType}/labels creates the label definition; PUT at that same path associates two specific records — these are different operations with different payloads
The typeId returned when creating a label must be used in subsequent association calls; the label name alone is not accepted
Custom object type IDs (e.g., 2-XXXXXXX) must be used in path segments, not human-readable names, when the object is a custom object
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