{"id":44062,"date":"2026-03-18T20:27:47","date_gmt":"2026-03-18T14:57:47","guid":{"rendered":"https:\/\/www.inogic.com\/blog\/?p=44062"},"modified":"2026-03-18T20:27:47","modified_gmt":"2026-03-18T14:57:47","slug":"improve-dynamics-365-performance-by-fixing-pcf-refresh-storm","status":"publish","type":"post","link":"https:\/\/www.inogic.com\/blog\/2026\/03\/improve-dynamics-365-performance-by-fixing-pcf-refresh-storm\/","title":{"rendered":"Improve Dynamics 365 Performance by Fixing PCF Refresh Storm"},"content":{"rendered":"<div><img decoding=\"async\" class=\"alignnone size-full wp-image-44067\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/Improve-Dynamics-365-Performance-by-Fixing-PCF-Refresh-Storm.png\" alt=\"PCF Refresh Storm\" width=\"2100\" height=\"1200\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/Improve-Dynamics-365-Performance-by-Fixing-PCF-Refresh-Storm.png 2100w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/Improve-Dynamics-365-Performance-by-Fixing-PCF-Refresh-Storm-300x171.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/Improve-Dynamics-365-Performance-by-Fixing-PCF-Refresh-Storm-1024x585.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/Improve-Dynamics-365-Performance-by-Fixing-PCF-Refresh-Storm-768x439.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/Improve-Dynamics-365-Performance-by-Fixing-PCF-Refresh-Storm-1536x878.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/Improve-Dynamics-365-Performance-by-Fixing-PCF-Refresh-Storm-2048x1170.png 2048w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/Improve-Dynamics-365-Performance-by-Fixing-PCF-Refresh-Storm-660x377.png 660w\" sizes=\"(max-width: 2100px) 100vw, 2100px\" \/>If you&#8217;ve been developing Power Apps Component Framework (PCF) dataset controls for Dynamics 365 Model-Driven Apps, you&#8217;ve probably hit this at some point: one PCF control calls context.parameters.dataset.refresh(), and suddenly every PCF control on the form fires its updateView() not just the one that triggered the refresh.<\/div>\n<div>\n<p>On a simple form it might go unnoticed. On a real-world CRM form with several custom PCF controls, it causes real problems:<\/p>\n<ul>\n<li>Controls that had nothing to do with the refresh are forced to re-render<\/li>\n<li>You see flickering, wasted CPU cycles, and confusing console output<\/li>\n<li>Debugging becomes harder because every control reports a full re-render on every action<\/li>\n<\/ul>\n<p>This post walks through the exact scenario, shows the problem with two sample PCF controls, explains why it happens, and gives you a complete, working fix.<\/p>\n<h4><strong>You&#8217;re Not Alone, This Is a Known Issue<\/strong><\/h4>\n<p>This behavior is well documented both in Microsoft&#8217;s official documentation and by experienced PCF developers who have investigated it in depth.<\/p>\n<p>The Microsoft official docs describe context.updatedProperties as the array that tells you what changed inside updateView. Crucially, it doesn&#8217;t prevent the call from happening \u2014 it just gives you the information to decide what to do with it.<\/p>\n<h3><strong>The Scenario<\/strong><\/h3>\n<p>Imagine a Dynamics 365 Lead form with two custom PCF dataset controls:<\/p>\n<ul>\n<li><strong>Business Overview Grid<\/strong> \u2014 displays related records (e.g. Tasks) in a styled data table<\/li>\n<li><strong>Activity Timeline<\/strong> \u2014 displays related activities (e.g. Phone Calls) in a vertical timeline layout<\/li>\n<\/ul>\n<p>Both are dataset controls bound to different subgrids on the same form.<\/p>\n<h3><strong>What should happen<\/strong><\/h3>\n<ul>\n<li>Clicking &#8220;Refresh&#8221; on the Business Overview Grid \u2192 only that control re-fetches and re-renders<\/li>\n<li>Clicking &#8220;Refresh&#8221; on the Activity Timeline \u2192 only that control re-fetches and re-renders<\/li>\n<\/ul>\n<h3><strong>What actually happens (the problem)<\/strong><\/h3>\n<ul>\n<li>Clicking &#8220;Refresh&#8221; on the Business Overview Grid \u2192 both controls fully re-render<\/li>\n<li>The Activity Timeline&#8217;s updatedProperties is empty [] nothing relevant changed for it, yet it still re-renders completely<\/li>\n<\/ul>\n<h3><strong>Understanding Why This Happens<\/strong><\/h3>\n<p>PCF controls using control-type=&#8221;virtual&#8221; share the platform&#8217;s React rendering tree. When you call context.parameters.dataset.refresh(), the PCF framework notifies the form context that data has changed. The form then broadcasts an updateView() call to all PCF controls on the form \u2014 not just the one that triggered it.<\/p>\n<p>There are many reasons updateView() gets called beyond your specific dataset changing:<\/p>\n<ul>\n<li>Another PCF control calling refresh()<\/li>\n<li>Form-level events (save, tab change, resize, fullscreen toggle)<\/li>\n<li>Field value changes on the form<\/li>\n<li>data.refresh() or formContext.data.save()<\/li>\n<\/ul>\n<p>The core issue is straightforward: if your updateView() always returns a new React element without checking what actually changed, every control re-renders every time any control does anything. That&#8217;s the refresh storm.<\/p>\n<h3><strong>Part 1: The Problematic Code<\/strong><\/h3>\n<p>Both controls follow the same flawed pattern \u2014 there&#8217;s no guard in updateView() to check whether the call is even relevant to them.<\/p>\n<p><strong>Business Overview Grid \u2014 index.ts (problematic)<\/strong><\/p>\n<pre class=\"lang:css gutter:true start:1\">\/\/ Virtual PCF \u2014 implements ReactControl\r\n\r\nexport class BusinessOverviewGrid\r\n\r\nimplements ComponentFramework.ReactControl&lt;IInputs, IOutputs&gt; {\r\n\r\n\u00a0\r\n\r\npublic updateView(\r\n\r\ncontext: ComponentFramework.Context&lt;IInputs&gt;\r\n\r\n): React.ReactElement {\r\n\r\nthis._renderCount++;\r\n\r\n\u00a0\r\n\r\n\/\/ \u00a0PROBLEM: Always fires, even when triggered by ANOTHER PCF\r\n\r\nconsole.log(` BusinessOverviewGrid: updateView \u2014 FULL RE-RENDER!`);\r\n\r\n\u00a0\r\n\r\nreturn React.createElement(BusinessGrid, {\r\n\r\ndataset: context.parameters.businessDataSet,\r\n\r\nrenderCount: this._renderCount,\r\n\r\n});\r\n\r\n}\r\n\r\n}<\/pre>\n<p><strong>Activity Timeline \u2014 index.ts (problematic)<\/strong><\/p>\n<pre class=\"lang:css gutter:true start:1\">\/\/ Virtual PCF \u2014 implements ReactControl\r\n\r\nexport class ActivityTimeline\r\n\r\nimplements ComponentFramework.ReactControl&lt;IInputs, IOutputs&gt; {\r\n\r\n\u00a0\r\n\r\npublic updateView(\r\n\r\ncontext: ComponentFramework.Context&lt;IInputs&gt;\r\n\r\n): React.ReactElement {\r\n\r\nthis._renderCount++;\r\n\r\n\u00a0\r\n\r\n\/\/ \u00a0PROBLEM: Always fires, even when triggered by ANOTHER PCF\r\n\r\nconsole.log(` ActivityTimeline: updateView \u2014 FULL RE-RENDER!`);\r\n\r\n\u00a0\r\n\r\nreturn React.createElement(Timeline, {\r\n\r\ndataset: context.parameters.timelineDataSet,\r\n\r\nrenderCount: this._renderCount,\r\n\r\n});\r\n\r\n}\r\n\r\n}<\/pre>\n<p><strong>What you see in the console<\/strong><\/p>\n<p>When you click Refresh on the Business Overview Grid:<img decoding=\"async\" class=\"alignnone size-full wp-image-44063\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-1.jpg\" alt=\"Power Apps Component Framework (PCF)\" width=\"808\" height=\"180\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-1.jpg 808w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-1-300x67.jpg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-1-768x171.jpg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-1-660x147.jpg 660w\" sizes=\"(max-width: 808px) 100vw, 808px\" \/>The Activity Timeline&#8217;s updatedProperties is empty. Nothing relevant changed for it, but it still re-rendered completely.<img decoding=\"async\" class=\"alignnone size-full wp-image-44064\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-2.jpg\" alt=\"Power Apps Component Framework (PCF)\" width=\"1867\" height=\"884\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-2.jpg 1867w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-2-300x142.jpg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-2-1024x485.jpg 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-2-768x364.jpg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-2-1536x727.jpg 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-2-660x313.jpg 660w\" sizes=\"(max-width: 1867px) 100vw, 1867px\" \/><span style=\"color: #808080;\"><em>Figure 1 \u2014 Both PCF controls show &#8220;Refreshing&#8230;&#8221; simultaneously, even though only one Refresh was clicked<\/em><\/span><\/p>\n<h3><strong>Part 2: The Fix<\/strong><\/h3>\n<p>Two complementary techniques eliminate the refresh storm entirely.<\/p>\n<p><strong>Fix #1 \u2014 context.updatedProperties guard in updateView()<\/strong>: check whether your specific dataset appears in updatedProperties before returning a new React element. If it doesn&#8217;t, return the previously cached element instead.<\/p>\n<p><strong>Fix #2 \u2014 React.memo on your component<\/strong>: even if updateView() returns a new element object, React.memo prevents the actual DOM re-render when props haven&#8217;t meaningfully changed. Think of it as a second line of defence.<\/p>\n<p><strong>Fixed: Business Overview Grid \u2014 index.ts<\/strong><\/p>\n<pre class=\"lang:css gutter:true start:1\">export class BusinessOverviewGrid\r\n\r\nimplements ComponentFramework.ReactControl&lt;IInputs, IOutputs&gt; {\r\n\r\n\u00a0\r\n\r\nprivate _cachedElement: React.ReactElement | null = null;\r\n\r\n\u00a0\r\n\r\npublic updateView(\r\n\r\ncontext: ComponentFramework.Context&lt;IInputs&gt;\r\n\r\n): React.ReactElement {\r\n\r\n\u00a0\r\n\r\n\/\/ \u00a0FIX #1: Guard \u2014 only re-render when OUR dataset changed\r\n\r\nconst updated = context.updatedProperties;\r\n\r\nconst relevantChange =\r\n\r\nupdated.includes('businessDataSet') ||\r\n\r\nupdated.includes('fullscreen_open') \u00a0||\r\n\r\nupdated.includes('fullscreen_close') ||\r\n\r\n!this._cachedElement;\r\n\r\n\u00a0\r\n\r\nif (!relevantChange) {\r\n\r\nreturn this._cachedElement!;\r\n\r\n}\r\n\r\n\u00a0\r\n\r\nthis._renderCount++;\r\n\r\nthis._cachedElement = React.createElement(BusinessGrid, {\r\n\r\ndataset: context.parameters.businessDataSet,\r\n\r\nrenderCount: this._renderCount,\r\n\r\n});\r\n\r\nreturn this._cachedElement;\r\n\r\n}\r\n\r\n}<\/pre>\n<p><strong>Fixed: Activity Timeline \u2014 index.ts<\/strong><\/p>\n<pre class=\"lang:css gutter:true start:1\">export class ActivityTimeline\r\n\r\nimplements ComponentFramework.ReactControl&lt;IInputs, IOutputs&gt; {\r\n\r\nprivate _cachedElement: React.ReactElement | null = null;\r\n\r\npublic updateView(\r\n\r\ncontext: ComponentFramework.Context&lt;IInputs&gt;\r\n\r\n): React.ReactElement {\r\n\r\n\/\/ \u00a0FIX #1: Guard \u2014 only re-render when OUR dataset changed\r\n\r\nconst updated = context.updatedProperties;\r\n\r\nconst relevantChange =\r\n\r\nupdated.includes('timelineDataSet') ||\r\n\r\nupdated.includes('fullscreen_open') \u00a0||\r\n\r\nupdated.includes('fullscreen_close') ||\r\n\r\n!this._cachedElement;\r\n\r\n\u00a0\r\n\r\nif (!relevantChange) {\r\n\r\nreturn this._cachedElement!;\r\n\r\n}\r\n\r\nthis._renderCount++;\r\n\r\nthis._cachedElement = React.createElement(Timeline, {\r\n\r\ndataset: context.parameters.timelineDataSet,\r\n\r\nrenderCount: this._renderCount,\r\n\r\n});\r\n\r\nreturn this._cachedElement;\r\n\r\n}\r\n\r\n}<\/pre>\n<p><strong>Fix #2 \u2014 React.memo on the component<\/strong><\/p>\n<pre class=\"lang:css gutter:true start:1\">\/\/ BusinessGrid.tsx\r\n\r\nconst BusinessGrid: React.FC&lt;Props&gt; = ({ dataset, renderCount }) =&gt; {\r\n\r\nreturn &lt;div&gt;...&lt;\/div&gt;;\r\n\r\n};\r\n\r\n\u00a0\r\n\r\n\/\/ FIX #2: Wrap with React.memo\r\n\r\nexport default React.memo(BusinessGrid);<\/pre>\n<p><strong>What you now see in the console<\/strong><img decoding=\"async\" class=\"alignnone size-full wp-image-44065\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-3.jpg\" alt=\"Power Apps Component Framework (PCF)\" width=\"828\" height=\"200\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-3.jpg 828w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-3-300x72.jpg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-3-768x186.jpg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-3-660x159.jpg 660w\" sizes=\"(max-width: 828px) 100vw, 828px\" \/>The Activity Timeline skips its re-render entirely. Only the control that triggered the refresh re-renders. Problem solved.<img decoding=\"async\" class=\"alignnone size-full wp-image-44066\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-4.jpg\" alt=\"Power Apps Component Framework (PCF)\" width=\"1867\" height=\"881\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-4.jpg 1867w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-4-300x142.jpg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-4-1024x483.jpg 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-4-768x362.jpg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-4-1536x725.jpg 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/03\/PCF-Refresh-Storm-4-660x311.jpg 660w\" sizes=\"(max-width: 1867px) 100vw, 1867px\" \/><span style=\"color: #808080;\"><em>Figure 2 \u2014 After the fix: Activity Timeline shows &#8220;Renders: 0&#8221; and no spinner \u2014 only the Task List refreshes<\/em><\/span><\/p>\n<h3><strong>Edge Cases and Caveats<\/strong><\/h3>\n<p>A few things worth keeping in mind when you apply this pattern:<\/p>\n<ul>\n<li><strong>Always allow re-render <\/strong><strong>on the first<\/strong> The !this._cachedElement check ensures the control renders at least once during initialization. Without it, you&#8217;d get a null reference on the first load.<\/li>\n<li><strong>Include container and full screen events.<\/strong> fullscreen_open and fullscreen_close affect layout, so always let those through the guard, otherwise your grid won&#8217;t resize correctly when a user expands to full screen.<\/li>\n<li><strong>Don&#8217;t skip on dataset loading states.<\/strong> If your dataset is in a loading state, you may want to allow the re-render so you can show a spinner or loading indicator to the user.<\/li>\n<li><strong>Test across all form events.<\/strong> Run through tab changes, form saves, field edits, and record navigation to make sure your guard conditions hold up in each case.<\/li>\n<\/ul>\n<h3><strong>Summary<\/strong><\/h3>\n<table width=\"624\">\n<thead>\n<tr>\n<td width=\"187\"><\/td>\n<td width=\"219\"><strong>Before Fix<\/strong><\/td>\n<td width=\"219\"><strong>After Fix<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"187\"><strong>updateView() calls on refresh<\/strong><\/td>\n<td width=\"219\">Both controls fire<\/td>\n<td width=\"219\">Only the refreshed control fires<\/td>\n<\/tr>\n<tr>\n<td width=\"187\"><strong>React re-renders<\/strong><\/td>\n<td width=\"219\">Both components re-render<\/td>\n<td width=\"219\">Only the relevant component<\/td>\n<\/tr>\n<tr>\n<td width=\"187\"><strong>Console noise<\/strong><\/td>\n<td width=\"219\">High \u2014 every control log<\/td>\n<td width=\"219\">Clean \u2014 skipped calls silent<\/td>\n<\/tr>\n<tr>\n<td width=\"187\"><strong>Performance<\/strong><\/td>\n<td width=\"219\">Wasted CPU on every refresh<\/td>\n<td width=\"219\">Minimal \u2014 only necessary work<\/td>\n<\/tr>\n<tr>\n<td width=\"187\"><strong>User experience<\/strong><\/td>\n<td width=\"219\">Flicker on all controls<\/td>\n<td width=\"219\">Smooth \u2014 only affected UI updates<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><strong>Conclusion<\/strong><\/h3>\n<p>So, when I first ran into this, it took a while to understand why refreshing one control was causing the entire form to light up. Once I traced it back to how the platform broadcasts updateView() across all controls sharing the React tree, the fix became clear. Guarding updateView() with context.updatedProperties and wrapping the component in React.memo solved it completely no more unnecessary re-renders, no more console noise, no more flicker on controls that had nothing to do with the refresh. If you&#8217;re building multiple PCF dataset controls on the same form, put this guard in from the start. It&#8217;ll save you the debugging session I had to sit through.<\/p>\n<h3><strong>\u00a0<\/strong>FAQs<\/h3>\n<p><strong>1. Why does refreshing a dataset in one PCF control trigger updates in all PCF controls?<\/strong><\/p>\n<p>Refreshing a dataset in one PCF control signals to the Dynamics 365 form that data has changed. Because all PCF controls using virtual rendering share a common React rendering tree, the platform triggers the update lifecycle for every control on the form.<\/p>\n<p><strong>2. What causes unnecessary re-rendering across multiple PCF controls?<\/strong><\/p>\n<p>Unnecessary re-rendering occurs when the update lifecycle always returns a new UI element without verifying whether the control\u2019s specific dataset or relevant properties have actually changed.<\/p>\n<p><strong>3. What is the purpose of the updated properties list in PCF controls?<\/strong><\/p>\n<p>The updated properties list identifies which values or datasets changed during a lifecycle update. Developers can use this information to determine whether a specific PCF control should re-render or skip the update.<\/p>\n<p><strong>4. Why does a PCF control re-render even when no relevant data has changed?<\/strong><\/p>\n<p>A PCF control re-renders when the update lifecycle generates a new UI output, even if no relevant dataset changes are present. The platform still triggers the update, and the rendering decision depends on the control\u2019s logic.<\/p>\n<p><strong>5. How can a PCF control avoid unnecessary re-rendering during a refresh event?<\/strong><\/p>\n<p>A PCF control can avoid unnecessary re-rendering by checking whether its own dataset or related properties are included in the list of updated properties. If no relevant change is detected, the control can reuse the previously rendered UI.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;ve been developing Power Apps Component Framework (PCF) dataset controls for Dynamics 365 Model-Driven Apps, you&#8217;ve probably hit this at some point: one PCF control calls context.parameters.dataset.refresh(), and suddenly every PCF control on the form fires its updateView() not just the one that triggered the refresh. On a simple form it might go unnoticed.\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.inogic.com\/blog\/2026\/03\/improve-dynamics-365-performance-by-fixing-pcf-refresh-storm\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":15,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[44,2361],"tags":[3325],"class_list":["post-44062","post","type-post","status-publish","format-standard","hentry","category-power-apps","category-technical","tag-power-apps-component-framework-pcf"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/44062","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/comments?post=44062"}],"version-history":[{"count":0,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/44062\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/media?parent=44062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/categories?post=44062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/tags?post=44062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}