Can I fetch contact details along with HubSpot Deal data in one API request?

I’m developing an integration with HubSpot’s API and facing a performance issue. I have a deal record with ID 52847362194 and need to get both the deal information and details about linked contacts.

Currently, I make this call to get the deal:

GET https://api.hubapi.com/crm/v4/objects/deals/52847362194?associations=contacts

This returns the deal data with associated contact IDs:

{
  "id": "52847362194",
  "properties": {
    "amount": "15000",
    "dealname": "Q3 Partnership",
    "dealstage": "qualifiedtobuy",
    "createdate": "2024-08-15T10:22:18.742Z",
    "hs_object_id": "52847362194",
    "pipeline": "sales"
  },
  "associations": {
    "contacts": {
      "results": [
        {
          "id": "95173842661",
          "type": "deal_to_contact"
        }
      ]
    }
  }
}

The issue: To get contact properties like name and email, I need separate requests:

GET https://api.hubapi.com/crm/v4/objects/contacts/95173842661?properties=firstname,lastname,email

This creates multiple API calls when deals have several contacts attached. Is there a way to retrieve deal properties AND associated contact properties in a single request? Something like getting expanded contact data directly instead of just their IDs?

I’ve tried various parameter combinations but haven’t found a solution that returns contact details in the same response as the deal data.

Unfortunately, HubSpot’s CRM API can’t fetch nested object properties in one request. The associations parameter only gives you relationship data (IDs and types) - not the actual properties you want. Here’s what I do instead: batch requests. Skip individual calls for each contact and use the batch endpoint to grab multiple contacts at once: POST https://api.hubapi.com/crm/v4/objects/contacts/batch/read. You can pull up to 100 contact records in one call by passing all the contact IDs in the request body. Yeah, it’s still two requests, but way more efficient than calling each contact individually - especially when deals have tons of associated contacts. I’ve cut API calls by 80% using this approach.

Nope, hubspot doesn’t support expanding nested properties like that. I’ve been dealing with this limitation for months. What worked for me was switching to their search api - use /crm/v3/objects/deals/search with association filters to get deals based on contact criteria, but you still can’t get contact props in the same response. The batch approach others mentioned is your best bet. You’ll just have to accept the 2-request minimum.

Been dealing with HubSpot integrations for years and this exact limitation drove me crazy. The API just won’t let you expand nested properties no matter what you try.

I gave up wrestling with multiple API calls and automated it with Latenode instead. Built a workflow that grabs deal data, pulls contact IDs from associations, then fetches contact details and merges everything into one response.

Now when I need deal data with contact info, I just hit my Latenode endpoint and get exactly what I want in one call. No more managing batch requests or caching headaches.

I use this same approach for other HubSpot data joins - deals with companies, tickets with contacts, whatever. Latenode handles the messy API stuff so I can focus on using the data.

Check it out: https://latenode.com

Had the same issue building our sales dashboard. The CRM v4 API won’t expand associated object properties in one call - it’s just how they built it. I solved it with basic caching on my side. After I grab the deal and get those contact IDs, I check if I’ve already got the contact details cached from recent requests before making another API call. Contact info rarely changes, so I cache for 15-30 minutes and cut way down on redundant calls. Pro tip: if you’re doing this across multiple deals, hit the deals batch endpoint first to grab all deals with associations, then make one batch contact request for all the unique contact IDs. Makes a huge difference with larger datasets.