Beam Help
Get help now

How-to · Zoho CRM

How to retrieve price books in Zoho

Access and fetch price book data for product pricing management.

Retrieving price books in Zoho CRM is straightforward once you know the two available API operations — one for listing all price books and one for fetching a specific record by ID.


Why this matters


Price books in Zoho CRM let you manage tiered or customer-specific pricing across your product catalogue. If you're building integrations, automations, or custom dashboards, you'll need to pull price book data programmatically. Knowing which endpoints to call — and how authentication flows into those calls — saves significant debugging time.


> Note: Beam Help is independent expert support for Zoho and is not official Zoho support.


---


Step-by-step


Step 1. Ensure your OAuth connection is established and your token is valid.


Before any API call, your integration must hold a valid access token for Zoho CRM. The connection layer checks token expiry and automatically refreshes using the stored refresh token when the token is within 120 seconds of expiring — so make sure your zoho_connections record is up to date before proceeding. [8]


Step 2. Initialise the CRM API client.


Call getzohoapi with the relevant userid and pass "crm" as the apptype. This returns an authenticated CRM API instance backed by the token-refresh logic described above. If no connection exists for the user, the function returns None — handle that case before continuing. [2]


Step 3. Retrieve all price books.


To fetch the full list of price books, issue a GET request to the /PriceBooks endpoint. In code, this maps to the getprice_books operation, which accepts an optional parameters dictionary (p):


def get_price_books(self, p: dict = None):
    return self.c.request("GET", "/Price_Books", p or {})

Pass any supported query parameters (such as pagination or field filters) inside the p dict. If you have no filters, pass an empty dict or omit the argument entirely. [3]


Step 4. Retrieve a single price book by ID.


When you already know the price book's record ID, use the getpricebook operation instead. This issues a GET to /PriceBooks/{pbid}, substituting the actual ID into the path:


def get_price_book(self, pb_id: str):
    return self.c.request("GET", f"/Price_Books/{pb_id}")

Supply the pb_id as a string. The response will contain the full record for that specific price book. [4]


Step 5. Confirm your OAuth scopes cover CRM modules.


Your registered OAuth application must include the appropriate Zoho CRM scopes. The scope configuration includes ZohoCRM.org.ALL and broad CRM module access — verify that your app's granted scopes are not more restrictive than what is configured, otherwise the /Price_Books calls will return authorisation errors. [5]


---


Common pitfalls


  • Missing or expired access token. If getzohoapi returns None, the connection record is absent or the refresh failed. Check that the refreshtoken stored in zohoconnections is still valid and has not been revoked. [2]
  • Incorrect apptype. Price books live in Zoho CRM, not Zoho Desk. Always pass apptype="crm" when initialising the API client — passing "desk" will route your request to the wrong client entirely. [2]
  • Empty parameter dict vs. None. The getpricebooks method guards against a None value by substituting an empty dict (p or {}), but if you're calling the underlying request layer directly, always pass a dict to avoid type errors. [3]
  • Data-centre mismatch. CRM URLs and API domains vary by data centre (e.g., .com, .eu, .in). Ensure the api_domain stored in your connection record matches the data centre where your Zoho CRM org is hosted. [7]

---


What to check


  • Token validity: Confirm the access token has been refreshed successfully and tokenexpiresat is in the future before making price book requests. [8]
  • Correct endpoint response: A successful call to GET /PriceBooks should return a list of price book records; a call to GET /PriceBooks/{pb_id} should return a single record object — verify the response structure matches your expectations. [^3, ^4]
  • Scope coverage: Double-check that the OAuth scopes granted to your connected app include the necessary Zoho CRM permissions, so price book reads are not blocked at the authorisation layer. [5]

Sources cited

  1. [1] server.py: build_zoho_links
  2. [2] server.py: get_zoho_api
  3. [3] GET /Price_Books
  4. [4] GET /Price_Books/{pb_id}
  5. [5] config.py
  6. [6] server.py: chat_plan_stream
  7. [7] server.py: get_zoho_connection
How to retrieve price books in Zoho | Beam Help