{"id":2520,"date":"2024-06-02T19:32:40","date_gmt":"2024-06-02T17:32:40","guid":{"rendered":"https:\/\/nubisoft.io\/blog\/?p=2520"},"modified":"2024-06-06T21:30:09","modified_gmt":"2024-06-06T19:30:09","slug":"automate-your-e-commerce-with-shopify-webhooks","status":"publish","type":"post","link":"https:\/\/nubisoft.io\/blog\/automate-your-e-commerce-with-shopify-webhooks\/","title":{"rendered":"Automate Your E-commerce with Shopify Webhooks"},"content":{"rendered":"<div class=\"lazyblock-text-1ppSgF wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 0px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                  lazyblocks-text-column-border\n                \" style=\"--size-padding-text-block: 50px;\">\n          <h2>Introduction<\/h2>\n<p>In today&#8217;s dynamic e-commerce world, process automation is key to efficiency and competitiveness. The Shopify e-commerce management platform offers many webhook topics in its API. <strong>In this article, we&#8217;ll explore how webhooks work, how they can help automate various aspects of your e-commerce business and how to configure them.<\/strong><\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-text-23mtLv wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 70px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                          lazyblocks-text-big-font-quote\n        \" style=\"--size-padding-text-block: 0px;\">\n          <h2>What are Webhooks?<\/h2>\n<p>Webhooks are a method for apps to communicate with each other automatically. They send real-time data from one application to another whenever a specific event occurs. In the context of Shopify, webhooks allow your store to send notifications to an external URL when certain events take place, such as order creations, inventory updates, or customer information changes.<\/p>\n<blockquote>\n<p>This enables seamless automation of various processes without the need for manual intervention.<\/p>\n<\/blockquote>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1165\" height=\"618\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/graph.png\" alt=\"\" class=\"wp-image-2626\" style=\"width:720px\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/graph.png 1165w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/graph-300x159.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/graph-1024x543.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/graph-768x407.png 768w\" sizes=\"auto, (max-width: 1165px) 100vw, 1165px\" \/><\/figure>\n\n\n<div class=\"lazyblock-text-2uoXVv wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 2px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 0px;\">\n          <h2>Use Cases<\/h2>\n<p>Shopify Webhooks offer numerous possibilities for automating your e-commerce processes. Here are some examples:<\/p>\n<ul>\n<li><strong>Automated SMS Notifications<\/strong>: Send an automatic SMS to customers with a tracking link once their order is handed over to the delivery provider.<\/li>\n<li><strong>Product Feed Distribution<\/strong>: Automatically send product feeds to other e-commerce platforms like Google Shopping, Facebook, Ceneo, Allegro, and Empik whenever certain events occur in your store.<\/li>\n<li><strong>Advanced Analytics Integration<\/strong>: Integrate advanced tools like Mixpanel to track customer behavior and order placements in real-time.<\/li>\n<li><strong>Discount Code Automation<\/strong>: Automatically generate and send one-time discount codes to customers who abandon the checkout process, encouraging them to complete their purchase.<\/li>\n<\/ul>\n<p>As you can see, with webhooks, there&#8217;s plenty of room to enhance your store&#8217;s functionality and efficiency. A full list of Shopify webhooks topics can be found under this <a href=\"https:\/\/shopify.dev\/docs\/api\/admin-rest\/2024-01\/resources\/webhook#event-topics\" target=\"_blank\" rel=\"noopener\">link.<\/a><\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-text-Z4HsNp wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 70px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 0px;\">\n          <h2>Configuration<\/h2>\n<p>&nbsp;<\/p>\n<h3>Shopify admin panel<\/h3>\n<p>One way to integrate with Shopify webhooks is by subscribing to a webhook through the admin panel. This method is ideal for simple integrations, such as with the tool Zapier.<\/p>\n<p>To configure such a webhook, go to <strong>Shopify admin panel -&gt; Settings -&gt; Notifications -&gt; Webhooks -&gt; Create a webhook<\/strong>.<\/p>\n<p>This will bring up the following modal window:<\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"623\" height=\"347\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/shopify.jpg\" alt=\"screenshot from shopify admin panel\" class=\"wp-image-2658\" style=\"width:720px\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/shopify.jpg 623w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/shopify-300x167.jpg 300w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><figcaption class=\"wp-element-caption\">Screenshot<\/figcaption><\/figure>\n\n\n<div class=\"lazyblock-text-Z11Ld2E wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 0px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                          lazyblocks-text-big-font-quote\n        \" style=\"--size-padding-text-block: 0px;\">\n          <p><!-- wp:paragraph --><\/p>\n<p>Here&#8217;s a brief explanation of the fields:<\/p>\n<ul>\n<li><strong>Event<\/strong>: This is the topic of the webhook you want to listen to, such as order creation or inventory updates.<\/li>\n<li><strong>Format<\/strong>: This option allows you to choose the format of the received data. You can select either JSON or XML.<\/li>\n<li><strong>URL<\/strong>: This is the address where the event data will be sent (e.g., <a href=\"https:\/\/hooks.zapier.com\/hooks\/catch\/1234567\/X1X2Xxyz\/\" target=\"_blank\" rel=\"noopener\">https:\/\/hooks.zapier.com\/hooks\/catch\/1234567\/X1X2Xxyz\/<\/a>).<\/li>\n<li><strong>Webhook API version<\/strong>: This defines the version of the Shopify API and determines the structure of the data sent by the webhook.<\/li>\n<\/ul>\n<blockquote>\n<p>If you save and test thoroughly then congratulations, you have just configured your first webhook correctly!<\/p>\n<\/blockquote>\n<p><!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} --><\/p>\n<p><!-- \/wp:paragraph --><\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-text-Z1z1yrX wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 0px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 0px;\">\n          <h3>Shopify app<\/h3>\n<p>Another method for configuring webhooks involves creating a dedicated Shopify app for your store. This allows for more advanced utilization of webhooks using JavaScript code. An example scenario could involve the need to utilize two interdependent webhooks.<\/p>\n<p>Firstly, you need to have a Shopify Partners account and <a href=\"https:\/\/shopify.dev\/docs\/apps\/getting-started\/create\" target=\"_blank\" rel=\"noopener\">create a Shopify app<\/a>. After setting up your environment (in this example, using JavaScript with Remix), you can proceed with configuring the webhooks.<\/p>\n<p>In the <code>shopify.server.ts<\/code> file, add the desired webhook to the <code>webhooks<\/code>\u00a0object, for example:<\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-inner-Z290dQ2 wp-block-lazyblock-inner\">\n<div class=\"lazyblock-inner-block-section wp-block-lazyblock-inner\">\n    \n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ORDERS_CREATE: {\n  deliveryMethod: DeliveryMethod.Http,\n\u00a0\u00a0callbackUrl: \"\/webhooks\",\n},<\/pre>\n\n\n<\/div>\n<\/div>\n\n<div class=\"lazyblock-text-1czByo wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 70px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 20px;\">\n          <p>This prepares your application to receive data for the specified webhook topic. Next, in the <code>routes\/webhook.tsx<\/code> file, add a new case to the switch statement, for instance:<\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-inner-Z1KoDyj wp-block-lazyblock-inner\">\n<div class=\"lazyblock-inner-block-section wp-block-lazyblock-inner\">\n    \n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">case \"ORDERS_CREATE\":\n  \/\/ Add business logic here to handle the webhook\n\n  break;<\/pre>\n\n\n<\/div>\n<\/div>\n\n<div class=\"lazyblock-text-Z2pNbsX wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 70px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 20px;\">\n          <p>In this section, you can implement the business logic responsible for handling the webhook data.<\/p>\n<p>Halfway through our success, now we need to subscribe to the webhook so that the application can use it. It&#8217;s best to do this in a way that allows the application user to enable and disable the webhook.<\/p>\n<p>Therefore, the first step is to create a user interface. Shopify provides a very user-friendly library called <a href=\"https:\/\/polaris.shopify.com\/components\" target=\"_blank\" rel=\"noopener\">Shopify Polaris<\/a>, which is recommended for use. Here&#8217;s an example view with a toggle:<\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-inner-ZKHeAv wp-block-lazyblock-inner\">\n<div class=\"lazyblock-inner-block-section wp-block-lazyblock-inner\">\n    \n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import { useSubmit } from \"@remix-run\/react\";\n\nexport default function WebhooksPage() {\n\n  const submit = useSubmit();\n\n  const subscribeWebhook = () => {\n      const data = new FormData();\n      data.append(\"custom_data\", \"x\"); \/\/ You can add here some data\n\n      submit(data, { method: \"POST\" });\n  };\n\n  return (\n    &lt;Page>\n      &lt;ui-title-bar title=\"Webhooks\" \/>\n      &lt;Layout>\n        &lt;Layout.Section>\n          &lt;Button onClick={subscribeWebhook}>On&lt;\/Button>\n        &lt;\/Layout.Section>\n      &lt;\/Layout>\n    &lt;\/Page>\n  );\n}<\/pre>\n\n\n<\/div>\n<\/div>\n\n<div class=\"lazyblock-text-McHIt wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 70px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 20px;\">\n          <p>Then, we need to attach an action to the toggle button that sends a request to subscribe to the webhook:<\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-inner-1cGMpL wp-block-lazyblock-inner\">\n<div class=\"lazyblock-inner-block-section wp-block-lazyblock-inner\">\n    \n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import { json } from \"@remix-run\/node\";\nimport { authenticate } from \"~\/shopify.server\";\n\nexport const action = async ({ request }: ActionFunctionArgs) => {\n  const { admin, session } = await authenticate.admin(request);\n  const formData = new URLSearchParams(await request.text()); \/\/ here you can use your passed data\n\n  const webhooksUrl = new URL(\n    \"\/webhooks\",\n    process.env.SHOPIFY_APP_URL,\n  ).toString();\n\n  if (request.method === \"POST\") {\n      const webhook = new admin.rest.resources.Webhook({ session: session });\n\n      if (!webhook) {\n        return json(\n          { error: \"No webhook object for given session\" },\n          { status: 400 },\n        );\n      }\n\n      webhook.topic = \"orders\/create\";\n      webhook.address = webhooksUrl;\n      webhook.format = \"json\";\n\n      try {\n        await webhook.save({ update: true });\n        return json(null, { status: 200 });\n      } catch (e) {\n        return json({ error: \"Failed while saving webhook\" }, { status: 400 });\n      }\n  }\n  return json({ error: \"Method not allowed\" }, { status: 405 });\n};<\/pre>\n\n\n<\/div>\n<\/div>\n\n<div class=\"lazyblock-text-30wtb wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 70px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 20px;\">\n          <blockquote>\n<p>It&#8217;s crucial to note that webhook subscription visibility is limited to the current session. Therefore, sending a request for active webhooks using a different API_KEY and API_SECRET than the application that subscribed to the webhook will return a different webhook context.<\/p>\n<\/blockquote>\n<p>To test and verify whether the webhook has been successfully subscribed you can use the loader function and return all subscribed webhooks:<\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-inner-2jBzge wp-block-lazyblock-inner\">\n<div class=\"lazyblock-inner-block-section wp-block-lazyblock-inner\">\n    \n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import { authenticate } from \"~\/shopify.server\";\n\nexport const loader = async ({ request }: LoaderFunctionArgs) => {\n  const { admin, session } = await authenticate.admin(request);\n\n  try {\n    const response = await admin.rest.resources.Webhook.all({\n      session: session,\n    });\n\n    const activeWebhooks = (response?.data ?? [])\n      .map((webhook) => ({\n        topic: webhook.topic,\n        id: webhook.id,\n        address: webhook.address,\n      }));\n\n    console.log(\"Active webhooks: \", activeWebhooks);\n\n    return json({ activeWebhooks }, { status: 200 });\n  } catch (e) {\n    console.log(\"Error while loading webhooks page\");\n    return json({ error: \"Error while loading webhooks page\" }, { status: 500 });\n  }\n};<\/pre>\n\n\n<\/div>\n<\/div>\n\n<div class=\"lazyblock-text-Z1Hlg1O wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 70px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                          lazyblocks-text-big-font-quote\n        \" style=\"--size-padding-text-block: 20px;\">\n          <blockquote>\n<p>Congratulations! If everything has been done correctly, you have successfully configured the webhook using Shopify app!<\/p>\n<\/blockquote>\n<p>The next steps will involve adding business logic upon receiving responses from the webhook and deploying the application to a production server so that it can operate on the target store.<\/p>\n<p>If your store requires highly intricate business logic or if you feel overwhelmed by the complexity of configuring webhooks, don&#8217;t hesitate to <a href=\"https:\/\/nubisoft.io\/#contact\">reach out to us<\/a>. We specialize professionally in handling such matters and we are here to help you.<\/p>\n<p>&nbsp;<\/p>\n<h2>Summary<\/h2>\n<p>In summary, we delved into the versatility of Shopify Webhooks for automating e-commerce operations. We<\/p>\n<ul>\n<li>defined webhooks,<\/li>\n<li>outlined integration methods,<\/li>\n<li>and showcased practical use cases.<\/li>\n<\/ul>\n<p>Shopify Webhooks offer a powerful way to automate and streamline various aspects of your e-commerce store, enhancing efficiency and competitiveness. Whether you&#8217;re handling simple integrations or complex business logic, webhooks can significantly improve your operations.<\/p>\n<blockquote>\n<p>Embrace automation and take your e-commerce business to the next level.<\/p>\n<\/blockquote>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-posts-23lHxi wp-block-lazyblock-posts\">\n\n\n<div style=\"--size-margin-posts-block: 70px;\" class=\"lazyblocks-posts-wrapper wp-block-lazyblock-posts\">\n                                <h3 class=\"lazyblocks-posts-header\">People who read this article also read:<\/h3>                     \n\n        <div class=\"lazyblocks-posts-container\">\n\n                            <div class=\"lazyblocks-posts-single-wrapper\">\n                                        <a class=\"lazyblocks-posts-image-wrapper\" style=\"--post-thumbail-url: url('https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/Optimizing-IT-Systems-150x150.png');\" href=\"https:\/\/nubisoft.io\/blog\/10x-faster-serp-after-moving-from-synchronous-to-reactive-approach\/\">\n\n\n                                                    <img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"287\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/Optimizing-IT-Systems-1024x507.png\" class=\"lazyblocks-posts-image wp-post-image\" alt=\"A bar graph with colorful, ascending bars visualizes the evolution and optimization of IT systems, while the green bars symbolize specific milestones or key improvements in the process.\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/Optimizing-IT-Systems-1024x507.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/Optimizing-IT-Systems-300x149.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/Optimizing-IT-Systems-768x380.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/Optimizing-IT-Systems-1200x594.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/05\/Optimizing-IT-Systems.png 1248w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/>                                            <\/a>\n\n                    <div class=\"lazyblocks-posts-info-wrapper\">\n                                                    <div class=\"lazyblocks-posts-category-wrapper\">\n                                <a href=\"https:\/\/nubisoft.io\/blog\/category\/case-study\/\" rel=\"category tag\">Case study<\/a> <a href=\"https:\/\/nubisoft.io\/blog\/category\/software-development\/\" rel=\"category tag\">Software Development<\/a>                            <\/div>\n                        \n                        <span class=\"lazyblocks-posts-read-time\">1 min read<\/span>                    <\/div>\n\n\n                    <div class=\"lazyblocks-posts-title-wrapper\">\n                        <h2 class=\"lazyblocks-posts-title\"><a href=\"https:\/\/nubisoft.io\/blog\/10x-faster-serp-after-moving-from-synchronous-to-reactive-approach\/\">10x Faster SERP after moving to reactive approach<\/a><\/h2>\n                        <a class=\"lazyblocks-posts-read-more\" href=\"https:\/\/nubisoft.io\/blog\/10x-faster-serp-after-moving-from-synchronous-to-reactive-approach\/\">Read more<\/a>\n                    <\/div>\n                <\/div>\n                            <div class=\"lazyblocks-posts-single-wrapper\">\n                                        <a class=\"lazyblocks-posts-image-wrapper\" style=\"--post-thumbail-url: url('https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-templateWspolpraca-150x150.png');\" href=\"https:\/\/nubisoft.io\/blog\/4-ways-to-stand-out-in-the-e-commerce-market\/\">\n\n\n                                                    <img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"287\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-templateWspolpraca-1024x507.png\" class=\"lazyblocks-posts-image wp-post-image\" alt=\"\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-templateWspolpraca-1024x507.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-templateWspolpraca-300x149.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-templateWspolpraca-768x380.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-templateWspolpraca-1200x594.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-templateWspolpraca.png 1248w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/>                                            <\/a>\n\n                    <div class=\"lazyblocks-posts-info-wrapper\">\n                                                    <div class=\"lazyblocks-posts-category-wrapper\">\n                                <a href=\"https:\/\/nubisoft.io\/blog\/category\/e-commerce\/\" rel=\"category tag\">E-commerce<\/a>                            <\/div>\n                        \n                        <span class=\"lazyblocks-posts-read-time\">3 min read<\/span>                    <\/div>\n\n\n                    <div class=\"lazyblocks-posts-title-wrapper\">\n                        <h2 class=\"lazyblocks-posts-title\"><a href=\"https:\/\/nubisoft.io\/blog\/4-ways-to-stand-out-in-the-e-commerce-market\/\">4 Ways to Stand Out in the E-commerce Market<\/a><\/h2>\n                        <a class=\"lazyblocks-posts-read-more\" href=\"https:\/\/nubisoft.io\/blog\/4-ways-to-stand-out-in-the-e-commerce-market\/\">Read more<\/a>\n                    <\/div>\n                <\/div>\n                            <div class=\"lazyblocks-posts-single-wrapper\">\n                                        <a class=\"lazyblocks-posts-image-wrapper\" style=\"--post-thumbail-url: url('https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-template-150x150.png');\" href=\"https:\/\/nubisoft.io\/blog\/the-top-3-end-to-end-testing-tools\/\">\n\n\n                                                    <img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"287\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-template-1024x507.png\" class=\"lazyblocks-posts-image wp-post-image\" alt=\"\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-template-1024x507.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-template-300x149.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-template-768x380.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-template-1200x594.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/01\/Blog-template.png 1248w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/>                                            <\/a>\n\n                    <div class=\"lazyblocks-posts-info-wrapper\">\n                                                    <div class=\"lazyblocks-posts-category-wrapper\">\n                                <a href=\"https:\/\/nubisoft.io\/blog\/category\/software-development\/\" rel=\"category tag\">Software Development<\/a>                            <\/div>\n                        \n                        <span class=\"lazyblocks-posts-read-time\">13 min read<\/span>                    <\/div>\n\n\n                    <div class=\"lazyblocks-posts-title-wrapper\">\n                        <h2 class=\"lazyblocks-posts-title\"><a href=\"https:\/\/nubisoft.io\/blog\/the-top-3-end-to-end-testing-tools\/\">The Top 3 End-to-End Testing Tools<\/a><\/h2>\n                        <a class=\"lazyblocks-posts-read-more\" href=\"https:\/\/nubisoft.io\/blog\/the-top-3-end-to-end-testing-tools\/\">Read more<\/a>\n                    <\/div>\n                <\/div>\n                    <\/div>\n    <\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>This article explains how webhooks work and how they can automate different parts of your online business. We&#8217;ll also show you how to set them up.<\/p>\n","protected":false},"author":10,"featured_media":2613,"comment_status":"open","ping_status":"open","sticky":false,"template":"post-2024.php","format":"standard","meta":{"_case_study_excerpt":"","footnotes":""},"categories":[410],"tags":[390,392,519],"class_list":["post-2520","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-e-commerce","tag-ecommerce","tag-shopify","tag-webhooks"],"_links":{"self":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/2520","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/comments?post=2520"}],"version-history":[{"count":32,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/2520\/revisions"}],"predecessor-version":[{"id":2750,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/2520\/revisions\/2750"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/media\/2613"}],"wp:attachment":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/media?parent=2520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/categories?post=2520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/tags?post=2520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}