Beam Help
Get help now

How-to · Zoho DESK

How to list products associated with a contact

Retrieve all products linked to a specific contact record.

Retrieving all products linked to a specific contact in Zoho Desk is straightforward using the REST API's contact-centric endpoint — and you can also approach the relationship from the product side if needed.


Why this matters


When building integrations, automations, or customer-facing portals on top of Zoho Desk, you often need to know which products a contact owns or is associated with — for example, to pre-populate a support ticket form or to filter knowledge base articles. The Zoho Desk API exposes dedicated endpoints for both directions of this relationship, so you can query by contact or by product depending on your use case.


Step-by-step


Step 1. Identify the contact_id for the contact whose products you want to retrieve. This is the unique identifier Zoho Desk assigns to each contact record, and you will need it as a path parameter in the request. [2]


Step 2. Send a GET request to the following endpoint, substituting your actual contact identifier into the path:


GET /api/v1/contacts/{contact_id}/products

This operation — listproductsby_contact — returns all products currently associated with that contact. [2]


Step 3. Optionally, pass query parameters via the p dictionary to control pagination or filtering. The endpoint accepts contact_id and p as its recognised parameters. [2]


Step 4. If you are working in Python, the call looks like this:


result = client.list_products_by_contact(
    contact_id="your_contact_id_here",
    p={"page": 1}   # optional pagination params
)

The method issues a GET request to /api/v1/contacts/{contact_id}/products and returns the response payload. [2]


Step 5. If you need to approach the relationship from the other direction — for instance, listing every contact tied to a known product — use the complementary endpoint instead:


GET /api/v1/products/{product_id}/contacts

This listcontactsassociatedwithproduct operation accepts product_id and an optional p parameter. [1]


Step 6. To create a new association between a contact and one or more products (rather than just reading existing ones), issue a POST to the same contact-products path:


POST /api/v1/contacts/{contact_id}/products

Pass the product details in the request body (data). The operation is createassociateproductswitha_contact. [3]


Alternatively, you can associate contacts with a product by posting to the product-side endpoint:


POST /api/v1/products/{product_id}/contacts

This is the createassociatecontactswithaproduct operation and accepts productid, data, and p. [4]


---


> Note: Beam Help is an independent expert support resource for Zoho products — we are not official Zoho support. Always verify endpoint behaviour against your specific Zoho Desk plan and API version.


---


Common pitfalls


  • Wrong direction of the relationship. The endpoint GET /api/v1/contacts/{contactid}/products lists products *for a contact*, while GET /api/v1/products/{productid}/contacts lists contacts *for a product*. [1][2] Mixing these up will return an empty or unexpected result set.
  • Missing or incorrect path parameter. Both endpoints require the relevant ID directly in the URL path. Passing contact_id as a query string rather than a path segment will result in a routing error. [2]
  • Confusing accounts with contacts. There is a separate endpoint — GET /api/v1/products/{product_id}/accounts — for listing *accounts* associated with a product. [5] If your Desk setup links products to accounts rather than individual contacts, you may need that endpoint instead.

What to check


  • Confirm that the contact_id you are using belongs to an active contact record in Zoho Desk and that the contact already has at least one product association before expecting a non-empty response. [2]
  • Verify your API credentials have the necessary read permissions for both the Contacts and Products modules in Zoho Desk. [2][1]
  • If the response is empty but you expect results, check whether the products were associated at the *account* level rather than the contact level, and consider querying GET /api/v1/products/{product_id}/accounts as an alternative. [5]

Sources cited

  1. [1] GET /api/v1/products/{product_id}/contacts
  2. [2] GET /api/v1/contacts/{contact_id}/products
  3. [3] POST /api/v1/contacts/{contact_id}/products
  4. [4] POST /api/v1/products/{product_id}/contacts
  5. [5] GET /api/v1/products/{product_id}/accounts
  6. [6] Linking Contacts to Other Modules
  7. [7] Welcome to Zoho Cares
  8. [8] Desk | Contacts And Accounts | Knowledge Base
List Products by Contact | Beam Help