{"id":50,"date":"2023-11-22T03:28:58","date_gmt":"2023-11-22T03:28:58","guid":{"rendered":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/?p=50"},"modified":"2024-02-13T18:42:17","modified_gmt":"2024-02-13T18:42:17","slug":"javascript-widget","status":"publish","type":"post","link":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/2023\/11\/22\/javascript-widget\/","title":{"rendered":"JavaScript Widget"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Sometimes an OpenAI service can be down.  You can visit <a href=\"https:\/\/status.openai.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/status.openai.com\/<\/a> to see the latest status updates for each individual area of OpenAI such as ChatGPT and the API.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you create an application that relies on OpenAI and OpenAI goes down, it might be a good idea to inform your users that the service is having issues.  One approach towards doing this in a web application environment is to create a widget using JavaScript.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At first I was going to try and create a widget on my own, but I&#8217;m glad I asked ChatGPT to help first.  My main concern was trying to find a way to get the current status of the OpenAI services programmatically.  ChatGPT not only provided me with ways to obtain the status information I was looking for but helped me write a widget from scratch using only JavaScript.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here is the beginning of my conversation using ChatGPT-4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>You<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">is there a way for me to programmatically know the current status of openai api that&#8217;s displayed on the status.openai.com site?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ChatGPT<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, you can programmatically access the current status of the OpenAI API as displayed on the status.openai.com site using various API endpoints. Here are a few key endpoints you can use:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Summary Endpoint<\/strong>: This provides a summary of the status page, including a status indicator, component statuses, unresolved incidents, and any upcoming or in-progress scheduled maintenances. The endpoint is <code>https:\/\/status.openai.com\/api\/v2\/summary.json<\/code>\u200b<a href=\"https:\/\/status.openai.com\/api\/v2#:~:text=Get%20a%20summary%20of%20the,json%20Click%20for%20example\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\u200b.<\/li>\n\n\n\n<li><strong>Status Endpoint<\/strong>: This endpoint gives you the status rollup for the whole page, including an indicator (none, minor, major, or critical) and a description of the blended component status. The endpoint is <code>https:\/\/status.openai.com\/api\/v2\/status.json<\/code>\u200b<a href=\"https:\/\/status.openai.com\/api\/v2#:~:text=Get%20the%20status%20rollup%20for,https%3A%2F%2Fstatus.openai.com%2Fapi%2Fv2%2Fstatus.json%20Click%20for%20example\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\u200b.<\/li>\n\n\n\n<li><strong>Components Endpoint<\/strong>: This endpoint lists all the components of the page along with their statuses, which can be operational, degraded performance, partial outage, or major outage. The endpoint is <code>https:\/\/status.openai.com\/api\/v2\/components.json<\/code>\u200b<a href=\"https:\/\/status.openai.com\/api\/v2#:~:text=Get%20the%20components%20for%20the,json%20Click%20for%20example\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\u200b.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">These endpoints can be accessed using standard HTTP requests, making it easy to integrate into various programming environments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>You<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">that&#8217;s exactly what i needed, how do i figure out what all of the status values are, not just for the page overall but for each component<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ChatGPT<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I did a quick search and here&#8217;s what I discovered.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To understand the status values for each component of the OpenAI API, you can refer to the following information:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Component Status Values<\/strong>: Each component listed on the OpenAI status page can have one of the following statuses:\n<ul class=\"wp-block-list\">\n<li><code>operational<\/code><\/li>\n\n\n\n<li><code>degraded_performance<\/code><\/li>\n\n\n\n<li><code>partial_outage<\/code><\/li>\n\n\n\n<li><code>major_outage<\/code> These values represent the current operational status of each component. You can access this information through the components endpoint: <code>https:\/\/status.openai.com\/api\/v2\/components.json<\/code>\u200b<a href=\"https:\/\/status.openai.com\/api\/v2\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\u200b.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Incident Status Values<\/strong>: Incidents, which are significant events affecting the status, usually go through a progression of statuses, which include:\n<ul class=\"wp-block-list\">\n<li><code>Investigating<\/code><\/li>\n\n\n\n<li><code>Identified<\/code><\/li>\n\n\n\n<li><code>Monitoring<\/code><\/li>\n\n\n\n<li><code>Resolved<\/code><\/li>\n\n\n\n<li><code>Postmortem<\/code> The impact of these incidents is also classified as <code>None<\/code> (black), <code>Minor<\/code> (yellow), <code>Major<\/code> (orange), or <code>Critical<\/code> (red)\u200b<a href=\"https:\/\/status.openai.com\/api\/v2#:~:text=Incidents%20are%20the%20cornerstone%20of,red\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\u200b.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">These status values provide a comprehensive view of the health and performance of the OpenAI API components and can be used for monitoring and alerting purposes in your applications.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>You<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">create me a javascript widget that shows the current status of the API and GPT components. i want to be able to refence this widget by linking to a .js file. the widget should float on the bottom right of the page and should be color coded for the status, red amber or green for each of the two components. provide me the js and i will create the .js file.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">After some back and forth, I ended up with some really great JavaScript code.  You can copy this into a .js file and create the widget yourself!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note: this script utilizes jQuery.<\/p>\n\n\n\n<!-- Include Prism CSS -->\n<link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/prism\/1.24.1\/themes\/prism.min.css\" rel=\"stylesheet\" \/>\n\n<div id=\"codeContainer\" style=\"position: relative; background-color: #444444; padding: 20px; border-radius: 8px; font-family: monospace; overflow-y: auto;\">\n    <button onclick=\"copyToClipboard();\" style=\"background-color: #4CAF50; color: white; border: none; border-radius: 5px; padding: 5px 10px; cursor: pointer;\">Copy<\/button>\n    <pre><code class=\"language-javascript\">$(document).ready(function() {\n    var componentsToShow = [];\n\n    \/\/ Iterate over all script tags to find the specific JS file\n    $('script').each(function() {\n        var src = $(this).attr('src');\n        if (src && src.includes('openaistatus.min.js')) {\n            var urlParams = new URL(src, window.location.href).searchParams;\n            componentsToShow = urlParams.get('components') ? urlParams.get('components').toLowerCase().split(',') : [];\n            return false; \/\/ Break the loop\n        }\n    });\n\n    \/\/ Function to determine color based on status\n    function getStatusColor(status) {\n        switch(status) {\n            case \"operational\": return \"green\";\n            case \"degraded_performance\": return \"yellow\";\n            case \"partial_outage\": return \"orange\";\n            case \"major_outage\": return \"red\";\n            default: return \"grey\";\n        }\n    }\n\n    \/\/ Function to create a status box with tooltip\n    function createStatusBox(status, name, tooltip) {\n        var color = getStatusColor(status);\n        var statusStyle = 'width: 100px; height: 30px; border-radius: 4px; background-color: ' + color + '; margin: 0 5px; display: flex; align-items: center; justify-content: center; color: white;';\n        return '<div style=\"' + statusStyle + '\" title=\"' + tooltip + '\">' + name + '<\/div>';\n    }\n\n    \/\/ Fetch and display status information\n    $.getJSON(\"https:\/\/status.openai.com\/api\/v2\/components.json\", function(data) {\n        data.components.forEach(function(component) {\n            if (componentsToShow.includes(component.name.toLowerCase())) {\n                var status = component.status;\n                var tooltipText = component.name + \" Status: \" + status + \"\\nLast Modified: \" + component.updated_at + \"\\nDescription: \" + (component.description || \"N\/A\");\n                $(\"#statusWidget\").append(createStatusBox(status, component.name, tooltipText));\n            }\n        });\n    });\n\n    \/\/ Add the floating status widget container with modern styling\n    var widgetStyle = 'position: fixed; bottom: 10px; right: 10px; background-color: #fff; border: 1px solid #ddd; padding: 10px; z-index: 1000; font-family: Arial, sans-serif; border-radius: 8px; display: flex; cursor: pointer;';\n    $(\"body\").append('<div id=\"statusWidget\" style=\"' + widgetStyle + '\"><\/div>');\n\n    \/\/ Open the status page in a new window on click\n    $(\"#statusWidget\").click(function() {\n        window.open(\"https:\/\/status.openai.com\", \"_blank\");\n    });\n});\n\n    <\/code><\/pre>\n<\/div>\n\n<!-- Include Prism JS -->\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/prism\/1.24.1\/prism.min.js\"><\/script>\n\n<script>\n    function copyToClipboard() {\n        var textToCopy = document.querySelector('#codeContainer pre').innerText;\n        navigator.clipboard.writeText(textToCopy);\n    }\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\">I took the code, created a .js file, and deployed the widget to the a web application. Here it is implemented on the MetroShareGPT site.  Note that the current status for the OpenAI API is green &#x1f44d;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a61b168080d4&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a61b168080d4\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2023\/11\/Image2-1.png\" alt=\"\" class=\"wp-image-118\" srcset=\"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2023\/11\/Image2-1.png 1920w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2023\/11\/Image2-1-300x169.png 300w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2023\/11\/Image2-1-1024x576.png 1024w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2023\/11\/Image2-1-768x432.png 768w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2023\/11\/Image2-1-1536x864.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now the user will know if the OpenAI service is not currently functioning and whether or not to expect an interruption in service.  You can link to the JavaScript file you create in your own page using a script tag.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script src=\"~\/js\/openaistatus.min.js?components=api\"&gt;&lt;\/script&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Notice the <strong>components <\/strong>parameter in the query string of the script tag.  There are 4 components: API, ChatGPT, Labs, and Playground.  Update your script tag and include the components as necessary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When the status of the API changes, I will try to capture an updated screen shot of the widget in action.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>UPDATE<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>13-Feb-2024<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve captured images of the widget being activated during an OpenAI outage.  Here are screen shots from the MetroShareGPT website that hosts the widget and the OpenAI website that displays outage details.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a61b168083d6&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a61b168083d6\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image3.png\" alt=\"\" class=\"wp-image-272\" srcset=\"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image3.png 1920w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image3-300x169.png 300w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image3-1024x576.png 1024w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image3-768x432.png 768w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image3-1536x864.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a61b16808569&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a61b16808569\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image4.png\" alt=\"\" class=\"wp-image-273\" srcset=\"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image4.png 1920w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image4-300x169.png 300w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image4-1024x576.png 1024w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image4-768x432.png 768w, https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-content\/uploads\/2024\/02\/Image4-1536x864.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Sometimes an OpenAI service can be down. You can visit https:\/\/status.openai.com\/ to see the latest status updates for each individual area of OpenAI such as ChatGPT and the API. If you create an application that relies on OpenAI and OpenAI goes down, it might be a good idea to inform your users that the service [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":68,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[],"class_list":["post-50","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript"],"_links":{"self":[{"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/posts\/50","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/comments?post=50"}],"version-history":[{"count":61,"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/posts\/50\/revisions"}],"predecessor-version":[{"id":278,"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/posts\/50\/revisions\/278"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/media\/68"}],"wp:attachment":[{"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/media?parent=50"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/categories?post=50"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/metrosharesolutions.com\/blogs\/gpt\/wp-json\/wp\/v2\/tags?post=50"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}