{"id":21978,"date":"2023-11-03T10:00:55","date_gmt":"2023-11-03T10:00:55","guid":{"rendered":"https:\/\/ecommerce.folio3.com\/blog\/?p=21978"},"modified":"2025-08-28T16:22:13","modified_gmt":"2025-08-28T16:22:13","slug":"create-custom-graphql-in-magento-2","status":"publish","type":"post","link":"https:\/\/ecommerce.folio3.com\/blog\/create-custom-graphql-in-magento-2\/","title":{"rendered":"Create Custom GraphQL in Magento 2 | Step-by-Step Guide"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">In today&#8217;s fast-paced e-commerce landscape, having a flexible and efficient way to interact with your Magento 2 store is crucial. This is where GraphQL comes into play. With its ability to request exactly the data you need and nothing more, GraphQL has become a popular choice for developers to build efficient and tailored APIs.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In this blog post, we&#8217;ll dive into the world of Magento 2 GraphQL and show you how to create custom queries and mutations to better suit your business needs.<\/span><\/p>\n<h2>Understanding Magento 2 GraphQL<\/h2>\n<h3>What is GraphQL?<\/h3>\n<p><span style=\"font-weight: 400;\">GraphQL is a query language for APIs that allows you to request only the data you need, making it more efficient and versatile compared to traditional REST APIs. It gives clients the power to define the structure of the responses, reducing over-fetching and under-fetching of data.<\/span><\/p>\n<p style=\"text-align: center;\"><strong>Read Also:<\/strong> <a href=\"https:\/\/ecommerce.folio3.com\/blog\/how-to-set-up-and-integrate-cloudflare-with-magento-2\/\">How to Set Up and Integrate Cloudflare with Magento 2<\/a><\/p>\n<h3>Why Choose GraphQL in Magento 2?<\/h3>\n<p>Magento 2&#8217;s introduction of native GraphQL support marks a significant advancement in how developers interact with the platform&#8217;s APIs. If you&#8217;re considering adopting GraphQL in your Magento 2 projects, here are several compelling reasons:<\/p>\n<p><strong>&#8211; Flexibility:<\/strong> GraphQL allows you to customize data retrieval to precisely match your application&#8217;s needs. Unlike REST APIs, which return fixed data structures, GraphQL enables you to request exactly the data you need in a single query.<\/p>\n<p>This flexibility reduces the amount of data transferred and simplifies the development process.<\/p>\n<p><strong>&#8211; Efficiency:<\/strong> With GraphQL, you can fetch only the data required by your application, avoiding the over-fetching or under-fetching issues common with REST APIs.<\/p>\n<p>This efficiency leads to faster load times and improved overall performance, particularly in complex applications where multiple data points are needed from different resources.<\/p>\n<p><strong>&#8211; Scalability:<\/strong> As your business evolves, so do your API requirements. GraphQL\u2019s schema-based approach makes it easy to extend and modify your APIs without disrupting existing functionalities.<\/p>\n<p>You can add new fields and data types or deprecate older ones without breaking existing queries, ensuring smooth scalability as your business grows.<\/p>\n<p><strong>&#8211; Improved Developer Experience:<\/strong> GraphQL\u2019s strong type system provides real-time feedback and validation during development, reducing errors and making debugging easier.<\/p>\n<p>This leads to a more streamlined and productive development process, particularly in large-scale projects.<\/p>\n<p><strong>&#8211; Optimized Mobile and Web Performance:<\/strong> GraphQL is particularly beneficial for mobile and web applications where bandwidth and performance are critical.<\/p>\n<p>By minimizing the data load and reducing the number of network requests, GraphQL enhances the user experience on all devices.<\/p>\n<p>By leveraging GraphQL in Magento 2, developers can build more efficient, scalable, and flexible applications that meet the dynamic needs of modern eCommerce businesses.<\/p>\n<p style=\"text-align: center;\"><strong>Read Also:<\/strong> <a href=\"https:\/\/ecommerce.folio3.com\/blog\/magento-performance-optimization-guide\/\">Magento Performance Optimization Guide 2024<\/a><\/p>\n<p><a href=\"https:\/\/ecommerce.folio3.com\/contact-us\/\"><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-28148 size-full\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-7.jpg\" alt=\"\" width=\"850\" height=\"160\" srcset=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-7.jpg 850w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-7-300x56.jpg 300w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-7-768x145.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/a><\/p>\n<h2>Creating Custom GraphQL Queries in Magento 2<\/h2>\n<h3>Step 1: Define Your Query<\/h3>\n<p><span style=\"font-weight: 400;\">The first step in creating custom GraphQL queries is to define what data you want to retrieve. Start by identifying the specific information you need and the object types you want to work with.<\/span><\/p>\n<h3>Step 2: Create a Schema File<\/h3>\n<p><span style=\"font-weight: 400;\">In Magento 2, GraphQL schemas are defined in <\/span><span style=\"font-weight: 400;\">.graphqls<\/span><span style=\"font-weight: 400;\"> files. You&#8217;ll need to create a custom schema file where you define your query. For example, if you want to fetch product information, your schema might look like this:<\/span><\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied!<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<p>Graphql<br \/>\n# app\/code\/Vendor\/Module\/etc\/schema.graphqls<br \/>\ntype Query {<br \/>\ncustomProductQuery(id: Int!): CustomProduct @resolver(class: &#8220;\\\\Vendor\\\\Module\\\\Model\\\\Resolver\\\\CustomProductQuery&#8221;)<br \/>\n}<\/p>\n<p>type CustomProduct {<br \/>\nid: Int<br \/>\nname: String<br \/>\nprice: Float<br \/>\n# Add more fields as needed<br \/>\n}<\/p>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<h3>Step 3: Implement Resolver<\/h3>\n<p><span style=\"font-weight: 400;\">Next, you&#8217;ll need to implement a resolver for your custom query. The resolver is responsible for fetching the requested data and returning it in the required format.<\/span><\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied!<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<p>#app\/code\/Vendor\/Module\/Model\/Resolver\/CustomProductQuery.php<br \/>\n&lt;?php<br \/>\nnamespace Vendor\\Module\\Model\\Resolver;<br \/>\nuse Magento\\Framework\\GraphQl\\Config\\Element\\Field;<br \/>\nuse Magento\\Framework\\GraphQl\\Schema\\Type\\ResolveInfo;<br \/>\nuse Magento\\Framework\\GraphQl\\Query\\ResolverInterface;<br \/>\nuse Magento\\Framework\\GraphQl\\Query\\Resolver\\ValueFactory;<br \/>\nclass CustomProductQuery implements ResolverInterface<br \/>\n{<br \/>\n\/**<br \/>\n* @var ValueFactory<br \/>\n*\/<br \/>\nprivate $valueFactory;<\/p>\n<p>public function __construct(ValueFactory $valueFactory)<br \/>\n{<br \/>\n$this-&gt;valueFactory = $valueFactory;<br \/>\n}<\/p>\n<p>public function resolve(Field $field, $context, $info, array $value = null, array $args = null)<br \/>\n{<br \/>\n\/\/ Implement your logic to fetch and return the data here<br \/>\n$productId = $args[&#8216;id&#8217;];<br \/>\n\/\/ Perform your data retrieval logic here<br \/>\n$productData = [<br \/>\n&#8216;id&#8217; =&gt; $productId,<br \/>\n&#8216;name&#8217; =&gt; &#8216;Sample Product&#8217;,<br \/>\n&#8216;price&#8217; =&gt; 29.99,<br \/>\n\/\/ Add more data fields as needed<br \/>\n];<\/p>\n<p>$result = function () use ($productData) {<br \/>\nreturn !empty($productData) ? $productData : [];<br \/>\n};<br \/>\nreturn $this-&gt;valueFactory-&gt;create($result);<br \/>\n}<br \/>\n}<\/p>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<h3>Step 4: Test Your Custom Query<\/h3>\n<p><span style=\"font-weight: 400;\">Before using your custom query in a production environment, make sure to test it in the GraphQL Playground or via API calls.<\/span><\/p>\n<p style=\"text-align: center;\"><strong>Read Also:<\/strong> <a href=\"https:\/\/ecommerce.folio3.com\/blog\/magento-2-checkout-customization\/\">Magento 2 Checkout Customization: A Step By Step Development Tutorial<\/a><\/p>\n<p><a href=\"https:\/\/ecommerce.folio3.com\/contact-us\/\"><img decoding=\"async\" class=\"alignnone wp-image-28149 size-full\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-8.jpg\" alt=\"\" width=\"2550\" height=\"480\" srcset=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-8.jpg 2550w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-8-300x56.jpg 300w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-8-1024x193.jpg 1024w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-8-768x145.jpg 768w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-8-1536x289.jpg 1536w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-8-2048x386.jpg 2048w\" sizes=\"(max-width: 2550px) 100vw, 2550px\" \/><\/a><\/p>\n<h2>Creating Custom GraphQL Mutations in Magento 2<\/h2>\n<h3>Step 1: Define Your Mutation<\/h3>\n<p><span style=\"font-weight: 400;\">Mutations in GraphQL are used to modify data. To create a custom mutation, start by defining the changes you want to make and the input parameters required.<\/span><\/p>\n<h3>Step 2: Create a Schema File<\/h3>\n<p><span style=\"font-weight: 400;\">Similar to custom queries, you need to create a schema file for your custom mutation. Define the mutation and the expected input and output types.<\/span><\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied!<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<p># app\/code\/Vendor\/Module\/etc\/schema.graphqls<br \/>\ntype Mutation {<br \/>\nupdateProductQuantity(input: UpdateProductQuantityInput!): UpdateProductQuantityOutput @resolver(class: &#8220;\\\\Vendor\\\\Module\\\\Model\\\\Resolver\\\\UpdateProductQuantity&#8221;)<br \/>\n}<\/p>\n<p>input UpdateProductQuantityInput {<br \/>\nproductId: Int!<br \/>\nnewQuantity: Int!<br \/>\n}<\/p>\n<p>type UpdateProductQuantityOutput {<br \/>\nsuccess: Boolean<br \/>\nmessage: String<br \/>\n}<\/p>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<h3>Step 3: Implement Resolver<\/h3>\n<p><span style=\"font-weight: 400;\">Create a resolver for your custom mutation to handle the data modification. This resolver should include the necessary business logic to make the changes you defined.<\/span><\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied!<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<p>#app\/code\/Vendor\/Module\/Model\/Resolver\/UpdateProductQuantity.php<br \/>\n&lt;?php<br \/>\nnamespace Vendor\\Module\\Model\\Resolver;<br \/>\nuse Magento\\Framework\\GraphQl\\Config\\Element\\Field;<br \/>\nuse Magento\\Framework\\GraphQl\\Schema\\Type\\ResolveInfo;<br \/>\nuse Magento\\Framework\\GraphQl\\Query\\ResolverInterface;<br \/>\nuse Magento\\Catalog\\Api\\ProductRepositoryInterface;<br \/>\nuse Magento\\Catalog\\Model\\Product;<\/p>\n<p>class UpdateProductQuantity implements ResolverInterface<br \/>\n{<br \/>\nprivate $productRepository;<\/p>\n<p>public function __construct(ProductRepositoryInterface $productRepository)<br \/>\n{<br \/>\n$this-&gt;productRepository = $productRepository;<br \/>\n}<\/p>\n<p>public function resolve(Field $field, $context, $info, array $value = null, array $args = null)<br \/>\n{<br \/>\n$productId = $args[&#8216;input&#8217;][&#8216;productId&#8217;];<br \/>\n$newQuantity = $args[&#8216;input&#8217;][&#8216;newQuantity&#8217;];<\/p>\n<p>try {<br \/>\n\/** @var Product $product *\/<br \/>\n$product = $this-&gt;productRepository-&gt;getById($productId);<br \/>\n$product-&gt;setStockData([&#8216;qty&#8217; =&gt; $newQuantity, &#8216;is_in_stock&#8217; =&gt; $newQuantity &gt; 0]);<br \/>\n$this-&gt;productRepository-&gt;save($product);<\/p>\n<p>return [&#8216;success&#8217; =&gt; true, &#8216;message&#8217; =&gt; &#8216;Product quantity updated successfully.&#8217;];<br \/>\n} catch (\\Exception $e) {<br \/>\nreturn [&#8216;success&#8217; =&gt; false, &#8216;message&#8217; =&gt; $e-&gt;getMessage()];<br \/>\n}<br \/>\n}<br \/>\n}<\/p>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<h3>Step 4: Test Your Custom Mutation<\/h3>\n<p><span style=\"font-weight: 400;\">Thoroughly test your custom mutation to ensure it performs as expected and makes the desired changes.<\/span><\/p>\n<p style=\"text-align: center;\"><strong>Read Also:<\/strong> <a href=\"https:\/\/ecommerce.folio3.com\/blog\/integrating-yotpo-with-magento-2\/\">Magento 2 YOTPO &#8211; Comprehensive Guide to Installing and Integrating YOTPO with Magento 2<\/a><\/p>\n<h2>Conclusion<\/h2>\n<p><span style=\"font-weight: 400;\">In conclusion, custom GraphQL queries and mutations empower you to optimize your Magento 2 store&#8217;s performance and provide tailored experiences to your customers. <\/span><span style=\"font-weight: 400;\">By following the steps outlined in this guide, you can create custom GraphQL endpoints that perfectly align with your business requirements and improve the efficiency of your e-commerce platform. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Don&#8217;t hesitate to leverage the flexibility and power of GraphQL in Magento 2 to stay ahead in the competitive e-commerce landscape.<\/span><\/p>\n<h2>Frequently Asked Questions<\/h2>\n<h3>1. Are there any security considerations when creating custom GraphQL endpoints?<\/h3>\n<p><span style=\"font-weight: 400;\">Security is paramount. Always validate and sanitize user input and consider implementing authentication and authorization mechanisms to protect your GraphQL endpoints.<\/span><\/p>\n<h3>2. How do I handle errors in custom GraphQL queries and mutations?<\/h3>\n<p><span style=\"font-weight: 400;\">Implement error handling in your resolvers to provide meaningful error messages and gracefully handle unexpected situations.<\/span><\/p>\n<h3>3. Can I use third-party GraphQL tools and libraries with Magento 2?<\/h3>\n<p><span style=\"font-weight: 400;\">Yes, you can use third-party tools and libraries to enhance your GraphQL experience in <a href=\"https:\/\/ecommerce.folio3.com\/magento-development-company\/\" target=\"_blank\" rel=\"noopener\">Magento 2 development<\/a>. Popular options include Apollo Client and GraphQL Yoga.<\/span><\/p>\n<p><a href=\"https:\/\/ecommerce.folio3.com\/contact-us\/\"><img decoding=\"async\" class=\"alignnone wp-image-28150 size-full\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-9.jpg\" alt=\"\" width=\"2550\" height=\"480\" srcset=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-9.jpg 2550w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-9-300x56.jpg 300w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-9-1024x193.jpg 1024w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-9-768x145.jpg 768w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-9-1536x289.jpg 1536w, https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2024\/04\/Worried-about-breaking-your-store-during-migration_-9-2048x386.jpg 2048w\" sizes=\"(max-width: 2550px) 100vw, 2550px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In today&#8217;s fast-paced e-commerce landscape, having a flexible and efficient way to interact with your Magento 2 store is crucial. This is where GraphQL comes into play. With its ability to request exactly the data you need and nothing more, GraphQL has become a popular choice for developers to build efficient and tailored APIs. In<\/p>\n","protected":false},"author":42,"featured_media":21990,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[27],"tags":[159],"class_list":{"0":"post-21978","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-magento","8":"tag-custom-graphql-in-magento-2"},"acf":[],"featured_image_data":{"src":"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/11\/GraphQL-scaled.jpg","alt":"","caption":""},"_links":{"self":[{"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/posts\/21978"}],"collection":[{"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/comments?post=21978"}],"version-history":[{"count":0,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/posts\/21978\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/media\/21990"}],"wp:attachment":[{"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/media?parent=21978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/categories?post=21978"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/tags?post=21978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}