Ensure you have the numeric HubSpot IDs for both the deal and the quote records.
Create the association using the v4 default association: POST https://api.hubapi.com/crm/v4/objects/deals/{dealId}/associations/default/quotes/{quoteId} with Authorization: Bearer {token} and an empty JSON body or no body.
Alternatively, use the v4 labeled association endpoint to specify a custom association label if configured in your portal.
To verify the association was created, retrieve the quote with deal associations: GET https://api.hubapi.com/crm/v3/objects/quotes/{quoteId}?associations=deals.
The response 'associations' object will contain a 'deals' key with an array of associated deal IDs and association type metadata.
To remove the association, use DELETE https://api.hubapi.com/crm/v4/objects/deals/{dealId}/associations/quotes/{quoteId} with the association type IDs in the request body (verify the exact delete endpoint format against current HubSpot v4 documentation).
Known gotchas
HubSpot v4 associations use numeric association type IDs rather than named types in some endpoints; the default association endpoint avoids this complexity, but labeled/custom associations require knowing the type ID.
A quote must be associated with a deal to be eligible for publishing in most HubSpot account configurations; creating a quote without a deal association may limit available status transitions.
The v3 and v4 association APIs have different request and response shapes; mixing endpoint versions in the same integration can cause confusion — standardize on v4 for new integrations.
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