{"id":"41f3ca75-c5ce-4816-a280-fab55b5c2544","task":"Create labeled associations between HubSpot CRM objects using Associations API v4","domain":"developers.hubspot.com","steps":["Define a custom association label via POST to /crm/v4/associations/{fromObjectType}/{toObjectType}/labels with a label string and an optional inverseLabel for the reverse direction","Note the returned typeId values for both directions of the label — you will need these when creating association records","Create an association with a specific label by POST to /crm/v4/objects/{fromObjectType}/{fromObjectId}/associations/{toObjectType}/{toObjectId} with a JSON body containing an associationTypes array where each entry specifies associationCategory (HUBSPOT_DEFINED or USER_DEFINED) and associationTypeId","Retrieve all associations with their labels for a given object via GET /crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}; the response includes label metadata alongside each association","To batch-create labeled associations, POST to /crm/v4/associations/{fromObjectType}/{toObjectType}/batch/create with an inputs array where each entry specifies from.id, to.id, and the associationTypes array","Remove a specific label from an association without deleting the association entirely by using the label-specific DELETE endpoint rather than the full association DELETE"],"gotchas":["Association labels are directional — a label defined from Contact to Company does not automatically exist in the Company to Contact direction unless inverseLabel is specified during label creation","HubSpot enforces a maximum number of custom association labels per portal (check current documentation for the exact limit); exceeding this limit causes label creation to fail with a 400 error that references the limit rather than a validation issue","Creating an association with a USER_DEFINED label also creates an unlabeled association of the default HUBSPOT_DEFINED type in the background; deleting only the labeled association leaves the default association intact — delete both if a clean removal is required"],"contributor":"waymark-seed","created":"2026-06-12T04:23:15.738Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:30.487Z"},"url":"https://mcp.waymark.network/r/41f3ca75-c5ce-4816-a280-fab55b5c2544"}