{"id":592,"date":"2022-04-04T21:29:12","date_gmt":"2022-04-05T01:29:12","guid":{"rendered":"https:\/\/buildbreakautomate.com\/?p=592"},"modified":"2022-04-05T09:19:51","modified_gmt":"2022-04-05T13:19:51","slug":"conversing-with-tanrest-part-iii-going-to-the-max","status":"publish","type":"post","link":"https:\/\/buildbreakautomate.com\/index.php\/2022\/04\/04\/conversing-with-tanrest-part-iii-going-to-the-max\/","title":{"rendered":"Conversing with TanREST Part III: Going to the Max"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This post is the third entry of a multi-part series that will teach users how to dynamically target endpoints for administrative activity by leveraging questions and actions issued via the Tanium API.&nbsp; The plan for the series is as follows:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\"><li><strong><a href=\"https:\/\/buildbreakautomate.com\/index.php\/2022\/02\/23\/conversing-with-tanrest-part-i-starting-the-conversation\/\">Starting the Conversation<\/a><\/strong> \u2013 Asking basic questions via the Tanium API<\/li><li><strong><a href=\"https:\/\/buildbreakautomate.com\/index.php\/2022\/03\/01\/conversing-with-tanrest-part-ii-taking-action\/\">Taking Action<\/a><\/strong> \u2013 Issuing basic Actions via the Tanium API<\/li><li><strong>Going to the Max<\/strong> \u2013 Writing basic automation to dynamically target an online audience with consideration for hard maximums<\/li><li><strong>Bringing it Home<\/strong> \u2013 A real-world example of how these capabilities can be utilized to supplement most environments in simple, effective ways<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">If you would like to skip directly to the technical details, click <a href=\"#unfamiliar-approach\">here<\/a>.  You can also jump right into the <a href=\"https:\/\/github.com\/teamhendo\/taniumAPIQuestionSeries\/blob\/main\/part3-tanrestGoingToTheMaxCompanion.ps1\">companion script<\/a> on github if that is more your speed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"the-problem\">A Rock | Ops | A Hard Place<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Limitations to the pace of administrative activities are simply a fact of life once an enterprise has reached a certain level of maturity. These limitations are not necessarily arbitrary as each enterprise has unique constraints.  One must respect these limits as an aspiring developer of automation or you may find yourself in hot water. Tanium moves quickly by design. Automation through Tanium moves at an even greater pace. Mistakes delivered via automation move even quicker still. It is your responsibility to develop solutions with these simple truths in mind.<br><br>Unfortunately, Ops teams must perpetually seek to balance risks. Moving too quickly with a given activity may imperil the stability of the environment. Moving too slowly may invite the condemnation of your InfoSec team. To that end, deployment rings with well-defined sizes or audiences are a common compromise. Let&#8217;s explore how we can respect such compromises with TanREST while making the most of a dynamic, online audience.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"the-problem\">Opportunistic Deployments with TanREST<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"the-problem\">Familiar Territory<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tell me if you&#8217;ve heard this one; your team has been asked to deploy a BIOS update to endpoints.  You do not know for sure how many will be online in the evening.  The Support team says that this activity creates high call volume and wants a maximum audience of 1 (Suspend disbelief here; we are labbing this).  InfoSec wants this effort completed by the end of the week due to a vulnerability in old BIOS versions.  You need to hit the maximum number of endpoints each night to get this done by the end of the week.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"unfamiliar-approach\">Unfamiliar Approach<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The scenario is likely familiar for anyone in Ops.  To address this problem, we need to do the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Manually create deployment targeting workstation systems with outdated BIOS <strong>and <\/strong>a Custom Tag <\/li><li>Identify the number of online workstations with an outdated BIOS <\/li><li>Compare the number of online workstations with an outdated BIOS to our defined maximum of two<\/li><li>Issue an action that enrolls the correct number of endpoints into the deployment and makes the most of the evening&#8217;s deployment opportunity without breaching defined maximums<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">All 4 of these tasks are technically possible with the API but creating a deployment with Deploy via TanREST is sufficiently complex to require its own article.  For the sake of simplicity, we will assume you did that manually during the day and just want the automation to dynamically handle adding endpoints to the targeting logic in the evening.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"the-problem\">Validate Your Targeting<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">We want use Tanium Interact to ensure that our targeting logic is precise before we go any further.  I used the following investigative question for that purpose:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1719\" height=\"597\" src=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-01-targetingValidation.png\" alt=\"\" class=\"wp-image-605\" srcset=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-01-targetingValidation.png 1719w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-01-targetingValidation-300x104.png 300w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-01-targetingValidation-768x267.png 768w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-01-targetingValidation-1536x533.png 1536w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-01-targetingValidation-1200x417.png 1200w\" sizes=\"auto, (max-width: 1719px) 100vw, 1719px\" \/><figcaption>Get Computer Name and BIOS Version from all machines with ( ( Windows OS Type contains windows workstation and Is Virtual equals yes ) and BIOS Version &lt; 090009 ) &#8211; <a href=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-01-targetingValidation.png\">Full Size<\/a><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1721\" height=\"526\" src=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-02-customTagsBeforeInvocation.png\" alt=\"\" class=\"wp-image-606\" srcset=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-02-customTagsBeforeInvocation.png 1721w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-02-customTagsBeforeInvocation-300x92.png 300w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-02-customTagsBeforeInvocation-768x235.png 768w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-02-customTagsBeforeInvocation-1536x469.png 1536w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-02-customTagsBeforeInvocation-1200x367.png 1200w\" sizes=\"auto, (max-width: 1721px) 100vw, 1721px\" \/><figcaption>The Before &#8211; Get Custom Tags from all machines. <a href=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-02-customTagsBeforeInvocation.png\">Full Size<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">No change in an enterprise environment propagates more quickly than a mistake so I am consciously using this opportunity to validate the <strong>BIOS Versions<\/strong> as well as the <strong>Computer Names <\/strong>of the endpoints that would be captured by the filtering logic.  Doing so actually helped me identify an initial problem in my targeting logic; there was an <strong>Or<\/strong> clause rather than an <strong>And<\/strong> clause which resulted in some unintended assets showing up. <\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"the-problem\">The Companion Snippets<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">I tend to rely heavily on the PowerShell <a href=\"https:\/\/docs.microsoft.com\/en-us\/powershell\/scripting\/learn\/deep-dives\/everything-about-pscustomobject?view=powershell-7.2\">PSCustomObject<\/a> when I am doing this type of work; it is a versatile data type that is easy to work with. We are establishing a PSCustomObject with the <strong>$biosObject<\/strong> variable and giving it some basic structural properties that we will be calling on later. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n$biosObject = &#x5B;PSCustomObject]@{\n\tquestion             = &quot;Get Online from all machines with ( ( Windows OS Type contains windows workstation and Is Virtual equals yes ) and BIOS Version &lt; 090009 )&quot;\n\tparsed               = $null\n\tmax                  = $biosMax\n\tid                   = $null\n\tresults              = $null\n\tresultCount          = $null\n\tactionObject         = $null\n\taction               = $null\n\tactionResult         = $null\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">With that out of the way, we pass the <strong>$biosObject.question<\/strong> property to the <strong>New-TaniumCoreParseQuestion<\/strong> function and capture the output of that activity in <strong>$biosObject.parsed<\/strong>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n## Pass question property of $biosObject to parser and retain results in parsed property of $biosObject\n\n$biosObject.parsed = New-TaniumCoreParseQuestion -Data @{text=$biosObject.question}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If the parser finds only 1 possible interpretation of the submitted question, we will have a canonical value of 1 which will satisfy our if statement.  The <strong>$biosObject.parsed<\/strong> property that we put data into previously is now called upon and passed to the <strong>New-TaniumCoreQuestion<\/strong> function which formally puts the Tanium platform to the task of gathering that information.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n## Submit Tanium questions upon validating that canonical value of 1\n\nif($biosObject.parsed.from_canonical_text -eq 1) {\n\tWrite-Output 'Gathering number of online assets meeting BIOS targeting logic...'\n\t\n\t$biosObject.id = @{ query_text = $biosObject.parsed&#x5B;0].question_text } | New-TaniumCoreQuestion | Select-Object -ExpandProperty id\n}\n\nWrite-Output \"Sleeping 60 seconds to allow response to BIOS targeting question...\"\n\nStart-Sleep -Seconds 60\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The results of the question have been collected at this point and the script moves on to gather those results into the <strong>$biosObject.results<\/strong> property by way of the <strong>Get-TaniumCoreQuestionResult <\/strong>function. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n## Collect question results into the results property of $biosObject\n\n$biosObject.results = Get-TaniumCoreQuestionResult -ID $biosObject.id | Format-TaniumCoreQuestionResults\n\n$biosObject.resultCount = $biosObject.results | Where-Object {$_.Online -eq 'True'} | Select-Object -ExpandProperty Count\n\nWrite-Output \"The number of online respondents to BIOS targeting logic is $($biosObject.resultCount).\"\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">This next part is interesting. We collected the results for this section below where we determine if the number of online assets meeting our criteria breaches the $biosMax value that we set at the beginning of the script.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nif (&#x5B;int]$($biosObject.resultCount) -gt $biosObject.max -and $null -ne $biosObject.resultCount) \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If the number of online assets exceeds our maximum allowable value for BIOS upgrades, we use some basic math to determine what percentage of the online assets must be targeted in order to maximize the night&#8217;s deployment opportunity.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n## Determine the maximum percentage of online assets that can be targeted within your defined maximum\n\n\t&#x5B;int]$biosSamplePercentage = ($biosObject.max \/ $biosObject.resultCount * 100)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The block below uses <strong>New-TaniumActionObject<\/strong> to create an action object. The syntax here is highly sensitive so move carefully to modify it. The comparison operators are listed below the script block. I use the <strong>Custom Tagging &#8211; Add Tags<\/strong> package with a date-specific tag and deliver it to a percentage of the online assets determined by our little algebra problem from earlier. The <strong>Windows OS Type,<\/strong> <strong>Is Virtual<\/strong>, <strong>BIOS Version<\/strong>, and <strong>Online Random Sample <\/strong>sensors are used to accomplish this.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n$biosObject.actionObject = New-TaniumActionObject -Name \"Dynamic Deployment Targeting - BIOS Example - $($(Get-Date).ToString(\"yyyyMMdd\"))\" `\n\t\t-Package 'Custom Tagging - Add Tags' `\n\t\t-Parameters @{key='$1';value=$(-join ($(Get-Date).ToString(\"yyyyMMdd\"),'-IPUTarget'))} `\n\t\t-Filter @(`\n\t\t@{sensor='Windows OS Type';operator='contains';value='workstation'},`\n\t\t@{sensor='Is Virtual';operator='contains';value='yes'},`\n\t\t@{sensor='BIOS Version';operator='lt';value='090009'}, `\n\t\t@{sensor='Online Random Sample';operator='contains';value='True';params=@(\"$biosSamplePercentage\")}) `\n\t\t-ActionGroup 'All Windows Workstations' `\n\t\t-Expiration 600\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Supported operators:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n    contains = Return contains the supplied value\n    notcontains = Return does not contain the supplied value\n    startswith = Return starts with the supplied value\n    notstartswith = Return does not start with the supplied value\n    endswith = Return ends with the supplied value\n    notendswith = Return does not end with the supplied value\n    regex = Return matches the supplied regular expression\n    notregex = Return does not match the supplied regular expression\n    lt = Return is less than the supplied value\n    notlt = Return is not less than the supplied value\n    le = Return is less than or equal to the supplied value\n    nle = Return is not less than or equal to the supplied value\n    gt = Return is greater than the supplied value\n    ngt = Return is not greater than the supplied value\n    ge = Return is greater than or equal to the supplied value\n    nge = Return is not greater than or equal to the supplied value\n    eq = Return is equal to the supplied value\n    neq = Return is not equal to the supplied value\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The <strong>Action <\/strong>object has been established and validated at this point so it is then passed to the <strong>New-TaniumAction<\/strong> function and the output of that activity is passed into <strong>$biosObject.action<\/strong>.  The script then pauses for 5 minutes and then gathers the results into the <strong>$biosObject.actionResult<\/strong> property.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n## Pass the assembled Action object to the API to deploy the Custom Tagging - Add Tags package\n\n\t$biosObject.action = New-TaniumAction -Data $biosObject.actionObject\n\n\t## Sleep while package is deployed\n\n\tStart-Sleep -Seconds 300\n\n\t## Collect the results of the deployed Action\n\n     $biosObject.actionResult = (Get-TaniumCoreActionResult -WebSession $Session -ID $($biosObject.action.id))\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-03-actionDeployment.png\" alt=\"\" class=\"wp-image-607\" width=\"610\" height=\"186\" srcset=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-03-actionDeployment.png 1687w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-03-actionDeployment-300x92.png 300w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-03-actionDeployment-768x235.png 768w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-03-actionDeployment-1536x471.png 1536w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-03-actionDeployment-1200x368.png 1200w\" sizes=\"auto, (max-width: 610px) 100vw, 610px\" \/><figcaption>Action History &#8211; <a href=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-03-actionDeployment.png\">Full Size<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The else portion of this is identical save for the absence of the <strong>Online Random Sample<\/strong> sensor.  <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1723\" height=\"984\" src=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-04-actionDeploymentStatus.png\" alt=\"\" class=\"wp-image-608\" srcset=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-04-actionDeploymentStatus.png 1723w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-04-actionDeploymentStatus-300x171.png 300w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-04-actionDeploymentStatus-768x439.png 768w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-04-actionDeploymentStatus-1536x877.png 1536w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-04-actionDeploymentStatus-1200x685.png 1200w\" sizes=\"auto, (max-width: 1723px) 100vw, 1723px\" \/><figcaption>The Action Summary of our dynamically targeted action.  <a href=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-04-actionDeploymentStatus.png\">Full Size<\/a><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1719\" height=\"655\" src=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-05-customTagsAfterInvocation.png\" alt=\"\" class=\"wp-image-609\" srcset=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-05-customTagsAfterInvocation.png 1719w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-05-customTagsAfterInvocation-300x114.png 300w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-05-customTagsAfterInvocation-768x293.png 768w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-05-customTagsAfterInvocation-1536x585.png 1536w, https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-05-customTagsAfterInvocation-1200x457.png 1200w\" sizes=\"auto, (max-width: 1719px) 100vw, 1719px\" \/><figcaption>The After &#8211; Get Custom Tags from all machines returns a new tag that could be used for a deployment. <a href=\"https:\/\/buildbreakautomate.com\/wp-content\/uploads\/2022\/04\/apiSeries3-05-customTagsAfterInvocation.png\">Full Size<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"font-size:12px\"><strong>Disclaimer:  <\/strong>Any code made available on this site is free to use at your own discretion but it is provided without any explicit or implied guarantees of support, reliability, or functionality.  I accept no responsibility in the event that the code, in its original form or any derivative versions thereafter, malfunctions or causes problems .  Anything from this site that you decide to work with should be tested thoroughly in development environments in collaboration with your Technical Account Manager (TAM) until such time that you, the responsible party, decides that you are satisfied with its outcomes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post is the third entry of a multi-part series that will teach users how to dynamically target endpoints for administrative activity by leveraging questions and actions issued via the Tanium API.&nbsp; The plan for the series is as follows: Starting the Conversation \u2013 Asking basic questions via the Tanium API Taking Action \u2013 Issuing [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,6],"tags":[14,12,10,7],"class_list":["post-592","post","type-post","status-publish","format-standard","hentry","category-powershell","category-tanium","tag-automation","tag-operations","tag-powershell","tag-tanium"],"_links":{"self":[{"href":"https:\/\/buildbreakautomate.com\/index.php\/wp-json\/wp\/v2\/posts\/592","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buildbreakautomate.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buildbreakautomate.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buildbreakautomate.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buildbreakautomate.com\/index.php\/wp-json\/wp\/v2\/comments?post=592"}],"version-history":[{"count":14,"href":"https:\/\/buildbreakautomate.com\/index.php\/wp-json\/wp\/v2\/posts\/592\/revisions"}],"predecessor-version":[{"id":621,"href":"https:\/\/buildbreakautomate.com\/index.php\/wp-json\/wp\/v2\/posts\/592\/revisions\/621"}],"wp:attachment":[{"href":"https:\/\/buildbreakautomate.com\/index.php\/wp-json\/wp\/v2\/media?parent=592"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buildbreakautomate.com\/index.php\/wp-json\/wp\/v2\/categories?post=592"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buildbreakautomate.com\/index.php\/wp-json\/wp\/v2\/tags?post=592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}