For Zoho services only


I'm currently part of a wider delivery team at Ascent Business Solutions, recognised as a leading Zoho Premium Solutions Partner in the United Kingdom.

Ascent Business Solutions support organisations with everything from targeted technical fixes through to full Zoho CRM implementations and long-term platform adoption. Working as a team rather than a one-person consultancy allows projects to move forward consistently, with access to the right skills at each stage.

The team I manage specialises in API integrations between Zoho and third-party finance and commerce platforms such as Xero, Shopify, WooCommerce, and eBay. Much of our work involves solving integration challenges that fall outside standard documentation, supporting new ideas, new sectors, and evolving business models.

Success is measured through practical outcomes and return on investment, ranging from scaling small operations into high-turnover businesses to delivering rapid gains through online payments, automation, and streamlined digital workflows.

If you are looking for structured Zoho expertise backed by an established consultancy, you can contact Ascent Business Solutions on 0121 392 8140 (UK), email info@ascentbusiness.co.uk, or visit https://www.ascentbusiness.co.uk.
Zoho Deluge: Connect to Shopify

Zoho Deluge: Connect to Shopify

What?
A quick article showing 2 ways of connecting to Shopify's REST API with a custom app.

Note that this is not for an app embedded in the Shopify instance but for a third-party app, such as a Zoho Creator app, to connect to the data within Shopify.

Why?
At time of print, we have woken up to the news that including a username and password, or a client and secret in the endpoint of a URL will no longer be supported in the Zoho Deluge invokeURL task...

This article exists because I spent 2 hours going down the rabbit hole of trying to use OAuth2 and following the usual steps: Grant Code, Refresh Token, Access Token. I also went down the rabbit hole of installing app-bridge and configuring a JWT which was an absolute waste of time with regards to what I was attempting to do.

How?
Let me show you how we used to connect and then what the new code will be. The preamble to both of these is how to get the values to include in the invokeURL headers and payload.

Previously on...
copyraw
m_Header = Map();
	m_Header.put("Content-Type","application/json");
	//
	// app specific (retrieving from a ZohoCreator record that stores all these credentials)
	r_ShopifyAPI = API_Integration[Connection_Name == "Shopify API"];
	//
	// client id from the shopify admin and registering a custom app
	// eg. 00112233445566778899aabbccddeeff
	v_ClientID = r_ShopifyAPI.Client_ID;
	//
	// client secret from the shopify admin and registering a custom app
	// eg. shpss_aaabbbcccdddeeefff01234567890
	v_ClientSecret = r_ShopifyAPI.Client_Secret;
	//
	// the shop id from the URL https://{shop_id}.myshopify.com
	// eg. my-example-store
	v_ShopID = r_ShopifyAPI.Shop_ID;
	//
	// concatenated for the endpoint
	v_ShopifyURL = "https://" + v_ClientID + ":" + v_ClientSecret + "@" + v_ShopID + ".myshopify.com";
	//
	// per endpoint request to specify which API version (eg. 2025-07)
	v_ShopifyApiVersion = r_ShopifyAPI.API_Version;
	//
	// url with client id and client secret (now to be deprecated July 25, 2025 by Zoho)
	// where p_OrderID is the shopify order ID
	v_Endpoint = v_ShopifyURL + "/admin/api/" + v_ShopifyApiVersion + "/orders/" + p_OrderID + ".json";
	r_GetOrder = invokeurl
	[
		url :v_Endpoint
		type :GET
		headers:m_Header
	];
	info r_GetOrder;
  1.  m_Header = Map()
  2.      m_Header.put("Content-Type","application/json")
  3.      // 
  4.      // app specific (retrieving from a ZohoCreator record that stores all these credentials) 
  5.      r_ShopifyAPI = API_Integration[Connection_Name == "Shopify API"]
  6.      // 
  7.      // client id from the shopify admin and registering a custom app 
  8.      // eg. 00112233445566778899aabbccddeeff 
  9.      v_ClientID = r_ShopifyAPI.Client_ID; 
  10.      // 
  11.      // client secret from the shopify admin and registering a custom app 
  12.      // eg. shpss_aaabbbcccdddeeefff01234567890 
  13.      v_ClientSecret = r_ShopifyAPI.Client_Secret; 
  14.      // 
  15.      // the shop id from the URL https://{shop_id}.myshopify.com 
  16.      // eg. my-example-store 
  17.      v_ShopID = r_ShopifyAPI.Shop_ID; 
  18.      // 
  19.      // concatenated for the endpoint 
  20.      v_ShopifyURL = "https://" + v_ClientID + ":" + v_ClientSecret + "@" + v_ShopID + ".myshopify.com"
  21.      // 
  22.      // per endpoint request to specify which API version (eg. 2025-07) 
  23.      v_ShopifyApiVersion = r_ShopifyAPI.API_Version; 
  24.      // 
  25.      // url with client id and client secret (now to be deprecated July 25, 2025 by Zoho) 
  26.      // where p_OrderID is the shopify order ID 
  27.      v_Endpoint = v_ShopifyURL + "/admin/api/" + v_ShopifyApiVersion + "/orders/" + p_OrderID + ".json"
  28.      r_GetOrder = invokeurl 
  29.      [ 
  30.          url :v_Endpoint 
  31.          type :GET 
  32.          headers:m_Header 
  33.      ]
  34.      info r_GetOrder; 

Now Continuing...
Using the API Admin Access Token:
copyraw
r_ShopifyAPI = API_Integration[Connection_Name == "Shopify API"];
	v_ClientID = r_ShopifyAPI.Client_ID;
	v_ClientSecret = r_ShopifyAPI.Client_Secret;
	v_ShopifyApiVersion = r_ShopifyAPI.API_Version;
	v_Shopify_BaseURL = "https://" + v_ShopID + ".myshopify.com";
	//
	m_Header = Map();
	m_Header.put("Content-Type","application/json");
	// The access token is the Admin API token received when installing the custom app for the first time
	m_Header.put("X-Shopify-Access-Token",r_ShopifyAPI.Access_Token.trim());
	//
	v_Endpoint = v_Shopify_BaseURL + "/admin/api/" + v_ShopifyApiVersion + "/orders/" + p_OrderID + ".json";
	r_GetOrder = invokeurl
	[
		url :v_Endpoint
		type :GET
		headers:m_Header
	];
	info r_GetOrder;
  1.  r_ShopifyAPI = API_Integration[Connection_Name == "Shopify API"]
  2.      v_ClientID = r_ShopifyAPI.Client_ID; 
  3.      v_ClientSecret = r_ShopifyAPI.Client_Secret; 
  4.      v_ShopifyApiVersion = r_ShopifyAPI.API_Version; 
  5.      v_Shopify_BaseURL = "https://" + v_ShopID + ".myshopify.com"
  6.      // 
  7.      m_Header = Map()
  8.      m_Header.put("Content-Type","application/json")
  9.      // The access token is the Admin API token received when installing the custom app for the first time 
  10.      m_Header.put("X-Shopify-Access-Token",r_ShopifyAPI.Access_Token.trim())
  11.      // 
  12.      v_Endpoint = v_Shopify_BaseURL + "/admin/api/" + v_ShopifyApiVersion + "/orders/" + p_OrderID + ".json"
  13.      r_GetOrder = invokeurl 
  14.      [ 
  15.          url :v_Endpoint 
  16.          type :GET 
  17.          headers:m_Header 
  18.      ]
  19.      info r_GetOrder; 
Category: Zoho Deluge :: Article: 431

Credit where Credit is Due:


Feel free to copy, redistribute and share this information. All that we ask is that you attribute credit and possibly even a link back to this website as it really helps in our search engine rankings.

Disclaimer: Please note that the information provided on this website is intended for informational purposes only and does not represent a warranty. The opinions expressed are those of the author only. We recommend testing any solutions in a development environment before implementing them in production. The articles are based on our good faith efforts and were current at the time of writing, reflecting our practical experience in a commercial setting.

Thank you for visiting and, as always, we hope this website was of some use to you!

Kind Regards,

Joel Lipman
www.joellipman.com