{"id":327,"date":"2026-08-22T09:40:09","date_gmt":"2026-08-22T09:40:09","guid":{"rendered":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/"},"modified":"2026-08-29T08:05:42","modified_gmt":"2026-08-29T08:05:42","slug":"barcode-ingredient-list-api","status":"publish","type":"post","link":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/","title":{"rendered":"From Packaged Barcode to Structured AST Ingredient Tree: Engineering Guide"},"content":{"rendered":"<h2>1. Executive Summary: The Raw Ingredient String Problem<\/h2>\n<p>In packaged grocery food data, ingredient panels are the most unstructured, error-prone data type developers encounter. Raw package text contains nested parenthetical sub-formulas (e.g. <em>&quot;Enriched Flour [Wheat Flour, Niacin, Reduced Iron], Seasoning (Whey, Hydrolyzed Soy Protein), Less than 2% of: Natural Flavors&quot;<\/em>), ambiguous percentages, chemical synonyms, and multi-lingual E-numbers.<\/p>\n<p>Attempting to analyze these strings with flat regular expressions or basic keyword searches leads directly to broken dietary filters, missed allergens, and inaccurate clean-label scores. As documented on <a href=\"https:\/\/www.nutrigraphapi.com\/\">www.nutrigraphapi.com<\/a>, NutriGraphAPI solves this with a native <strong>Recursive Abstract Syntax Tree (AST) Ingredient Parser<\/strong>, transforming raw OCR strings into a queryable hierarchy with <strong>sub-250ms p95 latency<\/strong> across <strong>over 5,000,000 packaged retail products<\/strong>.<\/p>\n<h2>2. Why Regex and Flat String Matching Fail in Production<\/h2>\n<ul>\n<li><strong>1. Nested Parenthetical Clauses:<\/strong> Ingredients are naturally hierarchical. A flat string match for &quot;Soy&quot; inside &quot;Seasoning (Hydrolyzed Soy Protein)&quot; cannot distinguish whether soy is a primary ingredient (90% by weight) or a trace sub-carrier (0.1%).<\/li>\n<li><strong>2. Multi-Lingual &amp; E-Number Disambiguation:<\/strong> Ingredients routinely mix common names, trade names, and European E-numbers (e.g. &quot;Lecithin (E322)&quot;, &quot;Tocopherols (E306)&quot;, &quot;Carmine (E120)&quot;). Parsers must map these aliases to canonical taxonomy nodes.<\/li>\n<li><strong>3. Percentage and Threshold Parsing:<\/strong> Clauses like <em>&quot;Contains 2% or less of&#8230;&quot;<\/em> must be tokenized as low-concentration additives to prevent minor preservatives from distorting major macronutrient calculations.<\/li>\n<\/ul>\n<h2>3. The NutriGraph AST Parsing Architecture<\/h2>\n<p>NutriGraphAPI&#8217;s tokenization pipeline executes three deterministic stages:<\/p>\n<ol>\n<li><strong>Lexical Tokenization:<\/strong> Scans raw strings, balancing brackets <code>()<\/code>, <code>[]<\/code>, <code>{}<\/code>, and handling comma vs semicolon delimiters.<\/li>\n<li><strong>Syntax Tree Construction:<\/strong> Builds an N-ary tree where parent ingredients serve as nodes and nested clauses serve as children.<\/li>\n<li><strong>Taxonomic Classification:<\/strong> Annotates each leaf node with verified allergen IDs, dietary compliance tags (Halal, Kosher, Vegan), and NOVA ultra-processing flags.<\/li>\n<\/ol>\n<h2>4. Comparison Matrix: Ingredient Data Extraction Approaches<\/h2>\n<table>\n<thead>\n<tr>\n<th>Feature<\/th>\n<th>NutriGraph AST Parser<\/th>\n<th>Open Food Facts (Regex)<\/th>\n<th>Legacy Food APIs<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Parsing Architecture<\/strong><\/td>\n<td><strong>Recursive N-ary Abstract Syntax Tree<\/strong><\/td>\n<td>Flat string split on commas<\/td>\n<td>Basic flat keyword array<\/td>\n<\/tr>\n<tr>\n<td><strong>Sub-Ingredient Isolation<\/strong><\/td>\n<td><strong>Full nested hierarchy extraction<\/strong><\/td>\n<td>Flattened into raw text<\/td>\n<td>Omitted<\/td>\n<\/tr>\n<tr>\n<td><strong>P95 Edge Latency<\/strong><\/td>\n<td><strong>&lt;250ms<\/strong><\/td>\n<td>1,200ms &#8211; 2,800ms<\/td>\n<td>500ms &#8211; 1,000ms<\/td>\n<\/tr>\n<tr>\n<td><strong>Allergen Precision<\/strong><\/td>\n<td><strong>Pinpoints exact sub-ingredient source<\/strong><\/td>\n<td>High false positive\/negative rate<\/td>\n<td>Basic allergen list<\/td>\n<\/tr>\n<tr>\n<td><strong>Free Developer Tier<\/strong><\/td>\n<td><strong>1,000 Lookups \/ Month Free<\/strong><\/td>\n<td>Community tier<\/td>\n<td>Sales call required<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>5. Endpoint Integration &amp; Production Schema Example (from www.nutrigraphapi.com)<\/h2>\n<p>Retrieve the parsed ingredient tree via standard REST GET:<\/p>\n<pre><code>curl -X GET \"https:\/\/barcode-api-140543331861.asia-south1.run.app\/api\/lookup?barcode=039978009579\" \n     -H \"X-API-Key: YOUR_API_KEY\" \n     -H \"Accept: application\/json\"<\/code><\/pre>\n<p>Every response returns clean <code>scraped_data<\/code> and normalized <code>analysed_data<\/code> structures matching the schema at <a href=\"https:\/\/www.nutrigraphapi.com\/\">www.nutrigraphapi.com<\/a>:<\/p>\n<pre><code>{\n  \"scraped_data\": {\n    \"barcode\": \"039978009579\",\n    \"product_name\": \"Organic Steel Cut Oats\",\n    \"brand\": \"Bob's Red Mill\",\n    \"ingredients_raw\": \"Whole Grain Organic Oats.\",\n    \"serving_size\": \"45g\",\n    \"calories\": 170\n  },\n  \"analysed_data\": {\n    \"generalData\": {\n      \"upc12\": \"039978009579\",\n      \"gtin14\": \"00039978009579\",\n      \"brandName\": \"Bob's Red Mill\",\n      \"brandOwner\": \"Bob's Red Mill Natural Foods\",\n      \"category\": \"Oatmeal\",\n      \"subCategory\": \"Steel Cut Oats\",\n      \"segment\": \"Breakfast Cereal\",\n      \"netWeight1Value\": 24.0,\n      \"unitsPerPack\": 4,\n      \"numberOfIngredients\": 1,\n      \"storage\": \"Store in a cool, dry place\"\n    },\n    \"npiFoodPackagesAllergensIntolerances\": {\n      \"eggStated\": \"No\",\n      \"eggQualified\": \"No\",\n      \"dairyStated\": \"No\",\n      \"dairyQualified\": \"No\",\n      \"glutenLevelStated\": \"Gluten-free\",\n      \"glutenQualified\": \"Yes (gluten-free certified on pack)\",\n      \"fdaRegulatedAllergens\": \"None declared\",\n      \"falcpaCommonAllergensStated\": \"No\",\n      \"additionalInfo\": {\n        \"traces\": \"Manufactured in a dedicated gluten-free facility\"\n      },\n      \"ingredients\": [\n        {\n          \"name\": \"Whole Grain Organic Oats\",\n          \"allergens\": {\n            \"Milk\": false,\n            \"Eggs\": false,\n            \"Peanuts\": false,\n            \"TreeNuts\": false,\n            \"Wheat\": false,\n            \"Soybeans\": false,\n            \"Sesame\": false\n          }\n        }\n      ]\n    },\n    \"dietaryReligious\": {\n      \"vegan\": true,\n      \"vegetarian\": true,\n      \"ketoFriendly\": false,\n      \"lowFodmap\": true,\n      \"pescatarian\": true,\n      \"noRedMeat\": true,\n      \"kosher\": true,\n      \"halal\": true,\n      \"jain\": true,\n      \"hindu\": true\n    },\n    \"scores\": {\n      \"nova_group\": 1,\n      \"nova_description\": \"Unprocessed or minimally processed food\",\n      \"nutri_score\": {\n        \"grade\": \"A\",\n        \"score_points\": -2\n      },\n      \"eco_score\": {\n        \"grade\": \"A\",\n        \"score\": 92\n      }\n    },\n    \"cleanLabel\": {\n      \"noArtificialPreservatives\": true,\n      \"noSyntheticColors\": true,\n      \"noHFCS\": true,\n      \"noArtificialSweeteners\": true,\n      \"ultraProcessedMarkers\": []\n    }\n  }\n}<\/code><\/pre>\n<h2>6. Scope Disclosures &amp; Best Practices<\/h2>\n<p>NutriGraphAPI is dedicated strictly to packaged retail products indexed by UPC\/EAN\/GTIN barcodes. It explicitly does not provide a recipe calculation database, restaurant dish database, or unbarcoded ingredient name lookup.<\/p>\n<h2>7. Developer Sandbox &amp; Getting Started<\/h2>\n<p>Test the AST ingredient parser with <strong>1,000 free monthly lookups<\/strong> on our Developer tier at <a href=\"https:\/\/www.nutrigraphapi.com\/\">www.nutrigraphapi.com<\/a>.<\/p>\n<p><a href=\"https:\/\/nutrigraphapi.com\/\" class=\"btn-cta\">Explore the AST Parser on NutriGraphAPI &rarr;<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to transform raw packaged food ingredient strings into queryable Abstract Syntax Trees (AST) with sub-250ms latency on www.nutrigraphapi.com.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-327","post","type-post","status-publish","format-standard","hentry","category-blog"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>From Packaged Barcode to Structured AST Ingredient Tree<\/title>\n<meta name=\"description\" content=\"How to transform raw packaged food ingredient strings into queryable Abstract Syntax Trees (AST) with sub-250ms latency on www.nutrigraphapi.com.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"From Packaged Barcode to Structured AST Ingredient Tree\" \/>\n<meta property=\"og:description\" content=\"How to transform raw packaged food ingredient strings into queryable Abstract Syntax Trees (AST) with sub-250ms latency on www.nutrigraphapi.com.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/\" \/>\n<meta property=\"og:site_name\" content=\"NutriGraphAPI Notes\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-22T09:40:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-29T08:05:42+00:00\" \/>\n<meta name=\"author\" content=\"foodscangenius\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"foodscangenius\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/barcode-ingredient-list-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/barcode-ingredient-list-api\\\/\"},\"author\":{\"name\":\"foodscangenius\",\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/#\\\/schema\\\/person\\\/525aba7b1cccc56c405bf42e4aad4910\"},\"headline\":\"From Packaged Barcode to Structured AST Ingredient Tree: Engineering Guide\",\"datePublished\":\"2026-08-22T09:40:09+00:00\",\"dateModified\":\"2026-08-29T08:05:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/barcode-ingredient-list-api\\\/\"},\"wordCount\":482,\"commentCount\":3,\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/barcode-ingredient-list-api\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/barcode-ingredient-list-api\\\/\",\"url\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/barcode-ingredient-list-api\\\/\",\"name\":\"From Packaged Barcode to Structured AST Ingredient Tree\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-22T09:40:09+00:00\",\"dateModified\":\"2026-08-29T08:05:42+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/#\\\/schema\\\/person\\\/525aba7b1cccc56c405bf42e4aad4910\"},\"description\":\"How to transform raw packaged food ingredient strings into queryable Abstract Syntax Trees (AST) with sub-250ms latency on www.nutrigraphapi.com.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/barcode-ingredient-list-api\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/barcode-ingredient-list-api\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/barcode-ingredient-list-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"From Packaged Barcode to Structured AST Ingredient Tree: Engineering Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/\",\"name\":\"NutriGraphAPI Notes\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/#\\\/schema\\\/person\\\/525aba7b1cccc56c405bf42e4aad4910\",\"name\":\"foodscangenius\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8a4c5c6081369c97ceb5c135ba5d99504b7ad28ef4672712b5a3a3388802144a?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8a4c5c6081369c97ceb5c135ba5d99504b7ad28ef4672712b5a3a3388802144a?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8a4c5c6081369c97ceb5c135ba5d99504b7ad28ef4672712b5a3a3388802144a?s=96&r=g\",\"caption\":\"foodscangenius\"},\"sameAs\":[\"https:\\\/\\\/nutrigraphapi.com\\\/blog\"],\"url\":\"https:\\\/\\\/nutrigraphapi.com\\\/blog\\\/author\\\/foodscangenius\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"From Packaged Barcode to Structured AST Ingredient Tree","description":"How to transform raw packaged food ingredient strings into queryable Abstract Syntax Trees (AST) with sub-250ms latency on www.nutrigraphapi.com.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/","og_locale":"en_US","og_type":"article","og_title":"From Packaged Barcode to Structured AST Ingredient Tree","og_description":"How to transform raw packaged food ingredient strings into queryable Abstract Syntax Trees (AST) with sub-250ms latency on www.nutrigraphapi.com.","og_url":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/","og_site_name":"NutriGraphAPI Notes","article_published_time":"2026-08-22T09:40:09+00:00","article_modified_time":"2026-08-29T08:05:42+00:00","author":"foodscangenius","twitter_card":"summary_large_image","twitter_misc":{"Written by":"foodscangenius","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/#article","isPartOf":{"@id":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/"},"author":{"name":"foodscangenius","@id":"https:\/\/nutrigraphapi.com\/blog\/#\/schema\/person\/525aba7b1cccc56c405bf42e4aad4910"},"headline":"From Packaged Barcode to Structured AST Ingredient Tree: Engineering Guide","datePublished":"2026-08-22T09:40:09+00:00","dateModified":"2026-08-29T08:05:42+00:00","mainEntityOfPage":{"@id":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/"},"wordCount":482,"commentCount":3,"articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/","url":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/","name":"From Packaged Barcode to Structured AST Ingredient Tree","isPartOf":{"@id":"https:\/\/nutrigraphapi.com\/blog\/#website"},"datePublished":"2026-08-22T09:40:09+00:00","dateModified":"2026-08-29T08:05:42+00:00","author":{"@id":"https:\/\/nutrigraphapi.com\/blog\/#\/schema\/person\/525aba7b1cccc56c405bf42e4aad4910"},"description":"How to transform raw packaged food ingredient strings into queryable Abstract Syntax Trees (AST) with sub-250ms latency on www.nutrigraphapi.com.","breadcrumb":{"@id":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nutrigraphapi.com\/blog\/barcode-ingredient-list-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nutrigraphapi.com\/blog\/"},{"@type":"ListItem","position":2,"name":"From Packaged Barcode to Structured AST Ingredient Tree: Engineering Guide"}]},{"@type":"WebSite","@id":"https:\/\/nutrigraphapi.com\/blog\/#website","url":"https:\/\/nutrigraphapi.com\/blog\/","name":"NutriGraphAPI Notes","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nutrigraphapi.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/nutrigraphapi.com\/blog\/#\/schema\/person\/525aba7b1cccc56c405bf42e4aad4910","name":"foodscangenius","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/8a4c5c6081369c97ceb5c135ba5d99504b7ad28ef4672712b5a3a3388802144a?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8a4c5c6081369c97ceb5c135ba5d99504b7ad28ef4672712b5a3a3388802144a?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8a4c5c6081369c97ceb5c135ba5d99504b7ad28ef4672712b5a3a3388802144a?s=96&r=g","caption":"foodscangenius"},"sameAs":["https:\/\/nutrigraphapi.com\/blog"],"url":"https:\/\/nutrigraphapi.com\/blog\/author\/foodscangenius\/"}]}},"_links":{"self":[{"href":"https:\/\/nutrigraphapi.com\/blog\/wp-json\/wp\/v2\/posts\/327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nutrigraphapi.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nutrigraphapi.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nutrigraphapi.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nutrigraphapi.com\/blog\/wp-json\/wp\/v2\/comments?post=327"}],"version-history":[{"count":1,"href":"https:\/\/nutrigraphapi.com\/blog\/wp-json\/wp\/v2\/posts\/327\/revisions"}],"predecessor-version":[{"id":337,"href":"https:\/\/nutrigraphapi.com\/blog\/wp-json\/wp\/v2\/posts\/327\/revisions\/337"}],"wp:attachment":[{"href":"https:\/\/nutrigraphapi.com\/blog\/wp-json\/wp\/v2\/media?parent=327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nutrigraphapi.com\/blog\/wp-json\/wp\/v2\/categories?post=327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nutrigraphapi.com\/blog\/wp-json\/wp\/v2\/tags?post=327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}