{"id":119352,"date":"2026-06-29T16:51:46","date_gmt":"2026-06-29T11:21:46","guid":{"rendered":"https:\/\/www.guvi.in\/blog\/?p=119352"},"modified":"2026-06-29T16:51:48","modified_gmt":"2026-06-29T11:21:48","slug":"nats-messaging-tutorial","status":"publish","type":"post","link":"https:\/\/www.guvi.in\/blog\/nats-messaging-tutorial\/","title":{"rendered":"NATS Messaging Tutorial: Simple Guide for Beginners in 2026"},"content":{"rendered":"\n<p><strong>NATS<\/strong> is quietly becoming one of the most talked-about tools in modern cloud systems, especially when things need to move fast without any delay. There\u2019s something interesting about how it connects everything behind the scenes, almost like an invisible layer keeping systems in sync.<\/p>\n\n\n\n<p>What makes <strong>NATS<\/strong> even more intriguing is how simple it looks on the surface, yet it\u2019s trusted in some of the most demanding environments. Once you start exploring it, you begin to wonder how something so light can handle so much without breaking a sweat.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>TL;DR Summary<\/strong><\/h2>\n\n\n\n<ul>\n<li><strong>NATS<\/strong> is a <strong>lightweight messaging system<\/strong> used for <strong>fast communication<\/strong> between distributed applications in <strong>cloud-native environments<\/strong>.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li><strong>NATS can be installed<\/strong> using multiple methods, such as command-line scripts, <strong>Docker<\/strong>, <strong>package managers<\/strong>, <strong>manual downloads<\/strong>, or <strong>Go source<\/strong>.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li>In NATS, the <strong>publish\u2013subscribe model<\/strong> allows messages to be sent to <strong>subjects<\/strong> and received instantly by <strong>subscribed services<\/strong>.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li>With NATS, <strong>request\u2013reply communication<\/strong> enables applications to send a message and receive an <strong>immediate response<\/strong>.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li>NATS also includes <strong>JetStream<\/strong> for <strong>message storage and replay<\/strong>, along with common beginner mistakes like <strong>missing server startup<\/strong> or <strong>subject mismatches<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<div style=\"background-color: #099f4e; border: 3px solid #110053; border-radius: 12px; padding: 18px 22px; color: #FFFFFF; font-size: 18px; font-family: Montserrat, Helvetica, sans-serif; line-height: 1.6; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); max-width: 750px;\">\n\n<strong style=\"font-size: 22px; color: #ffffff;\">\ud83d\udca1 Did You Know?<\/strong> <br \/><br \/>\n\n  <span>\n<strong style=\"color: #110053;\">NATS<\/strong> was created by\n\n<strong style=\"color: #110053;\">Derek Collison<\/strong> to build a\n\n<strong style=\"color: #110053;\">fast, lightweight messaging system for cloud applications<\/strong>, making it a popular choice for modern distributed systems.\n&#8220;`\n\n  <\/span>\n\n<\/div>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What is NATS: Quick Overview<\/strong><\/h2>\n\n\n\n<p><strong>NATS<\/strong> <em>(Neural Autonomic Transport System) <\/em>is an <strong>open-source messaging system <\/strong>that lets applications communicate with each other via named topics (subjects) rather than connecting directly via fixed addresses. A service publishes a message to a subject, and anything listening on that subject receives it instantly.<\/p>\n\n\n\n<p>What makes NATS popular is its lightweight, fast nature. It ships as a single small binary with no extra dependencies, yet handles large message volumes with very low latency and even supports storing and later replaying messages through a feature called JetStream.<\/p>\n\n\n\n<p><em>Want to understand how real-world systems are built at scale? <\/em><strong><em>HCL GUVI\u2019s <\/em><\/strong><a href=\"https:\/\/www.guvi.in\/courses\/programming\/system-design\/?utm_source=blog&amp;utm_medium=hyperlink&amp;utm_campaign=nats-messaging-tutorial\" target=\"_blank\" rel=\"noreferrer noopener\"><strong><em>System Design course<\/em><\/strong><\/a><em> helps you learn core concepts like scalability, caching, and fault tolerance. Move from basic concepts to designing production-level systems. <\/em><strong><em>Enroll now and level up your skills!<\/em><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Installing NATS \u2014 Step-by-Step Implementation<\/strong><\/h2>\n\n\n\n<p>The following are the step-by-step instructions for installing NATS on your system:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 1: Check supported OS and architecture<\/strong><\/h3>\n\n\n\n<p>Before installing anything, just make sure your computer or server is actually supported. NATS runs on almost everything \u2014 Mac, <a href=\"https:\/\/www.guvi.in\/blog\/what-is-the-difference-between-windows-and-linux\/\" target=\"_blank\" rel=\"noreferrer noopener\">Linux, Windows<\/a>, and a few others \u2014 so this step is just a quick check, not really &#8220;work.&#8221;<\/p>\n\n\n\n<ul>\n<li><strong>macOS (Darwin):<\/strong> amd64, arm64<\/li>\n\n\n\n<li><strong>Linux:<\/strong> amd64, 386, arm6, arm7, arm64, mips64le, s390x<\/li>\n\n\n\n<li><strong>Windows:<\/strong> amd64, 386, arm6, arm7, arm64<\/li>\n\n\n\n<li><strong>FreeBSD:<\/strong> amd64<\/li>\n\n\n\n<li>(NetBSD and IBM z\/OS are experimental)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 2: Choose an installation method<\/strong><\/h3>\n\n\n\n<p>There&#8217;s no single &#8220;correct&#8221; way to install NATS \u2014 there are several options, and you just pick the one that fits how you work.<\/p>\n\n\n\n<p>If you prefer quick terminal commands, use the command-line method. If you already use Docker, use that. If you&#8217;re a Mac\/Windows\/Arch user who likes package managers, use that instead.<\/p>\n\n\n\n<ol>\n<li>Command line (quick install script)<\/li>\n\n\n\n<li>Docker<\/li>\n\n\n\n<li>Package manager (Homebrew, Scoop, AUR)<\/li>\n\n\n\n<li>Release zip\/tarball download<\/li>\n\n\n\n<li>From source (Go)<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3a: Install via command line (simplest method)<\/strong><\/h3>\n\n\n\n<p>This is the fastest way \u2014 one command downloads and installs the NATS server for you automatically. No extra steps needed.<\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>curl -fsSL https:\/\/binaries.nats.dev\/nats-io\/nats-server\/v2@v2.11.6 | sh<\/p>\n\n\n\n<p>Use @latest to get the most recent release, or @main for the development tip.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3b: Install via Docker<\/strong><\/h3>\n\n\n\n<p>If you already use <a href=\"https:\/\/www.guvi.in\/blog\/what-is-docker-in-devops\/\" target=\"_blank\" rel=\"noreferrer noopener\">Docker<\/a>, this is the cleanest option \u2014 it keeps NATS in its own isolated container instead of installing files directly on your system.<\/p>\n\n\n\n<p><strong>Pull the image:<\/strong><\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>docker pull nats:latest<\/p>\n\n\n\n<p><strong>Run the server:<\/strong><\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>docker run -p 4222:4222 -ti nats:latest<\/p>\n\n\n\n<p><strong>Expected output:<\/strong><\/p>\n\n\n\n<p>[1] 2019\/05\/24 15:42:58.228063 [INF] Starting nats-server version #.#.#<\/p>\n\n\n\n<p>[1] 2019\/05\/24 15:42:58.228115 [INF] Git commit [#######]<\/p>\n\n\n\n<p>[1] 2019\/05\/24 15:42:58.228201 [INF] Starting http monitor on 0.0.0.0:8222<\/p>\n\n\n\n<p>[1] 2019\/05\/24 15:42:58.228740 [INF] Listening for client connections on 0.0.0.0:4222<\/p>\n\n\n\n<p>[1] 2019\/05\/24 15:42:58.228765 [INF] Server is ready<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3c: Install via a package manager<\/strong><\/h3>\n\n\n\n<p>If you&#8217;re used to installing apps with a simple command (like <strong>brew install something<\/strong>), you can do the same here \u2014 your package manager handles the download and setup for you.<\/p>\n\n\n\n<p><strong>Windows (Scoop):<\/strong><\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>scoop install main\/nats-server<\/p>\n\n\n\n<p><strong>macOS (Homebrew):<\/strong><\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>brew install nats-server<\/p>\n\n\n\n<p><strong>Arch Linux (AUR):<\/strong><\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>yay -S nats-server<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3d: Download a release build manually<\/strong><\/h3>\n\n\n\n<p>This is the &#8220;do it yourself&#8221; method \u2014 you manually download the file, unzip it, and place it where your system can find it. Good if you want full control or a specific version.<\/p>\n\n\n\n<p><strong>Go to the<\/strong><a href=\"https:\/\/github.com\/nats-io\/nats-server\/releases\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong> nats-server GitHub releases page<\/strong><\/a><strong>, then:<\/strong><\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>curl -L https:\/\/github.com\/nats-io\/nats-server\/releases\/download\/vX.Y.Z\/nats-server-vX.Y.Z-linux-amd64.tar.gz -o nats-server.tar.gz<\/p>\n\n\n\n<p><strong>Extract it:<\/strong><\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>tar -xvzf nats-server.tar.gz<\/p>\n\n\n\n<p><strong>Copy the binary to your path:<\/strong><\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>sudo cp nats-server-vX.Y.Z-linux-amd64\/nats-server \/usr\/bin<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3e: Install from source (requires Go)<\/strong><\/h3>\n\n\n\n<p>This option is mainly for developers who already have Go installed and want the very latest (possibly unreleased) version straight from the source code.<\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>go install github.com\/nats-io\/nats-server\/v2@main<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 4: Verify the installation<\/strong><\/h3>\n\n\n\n<p>Once installed, this step just confirms everything worked. You simply type one command, and if NATS is running properly, it&#8217;ll show a &#8220;Server is ready&#8221; message.<\/p>\n\n\n\n<p><strong>Run:<\/strong><\/p>\n\n\n\n<p>nats-server<\/p>\n\n\n\n<p><strong>You should see output like:<\/strong><\/p>\n\n\n\n<p>[41634] 2019\/05\/13 09:42:11.745919 [INF] Starting nats-server version 2.*.*<\/p>\n\n\n\n<p>[41634] 2019\/05\/13 09:42:11.746240 [INF] Listening for client connections on 0.0.0.0:4222<\/p>\n\n\n\n<p>[41634] 2019\/05\/13 09:42:11.746249 [INF] Server id is NBNYNR4ZNTH4N2UQKSAAKBAFLDV3PZO4OUYONSUIQASTQT7BT4ZF6WX7<\/p>\n\n\n\n<p>[41634] 2019\/05\/13 09:42:11.746252 [INF] Server is ready<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Starting Your First NATS Server<\/strong><\/h2>\n\n\n\n<p>Once installed, running NATS is just one command \u2014 you don&#8217;t have to specify anything, and the server will start listening for client connections on port 4222 by default.<\/p>\n\n\n\n<p><strong>Run:<\/strong><\/p>\n\n\n\n<p>nats-server<\/p>\n\n\n\n<p><strong>You should see output confirming it&#8217;s running:<\/strong><\/p>\n\n\n\n<p>[41634] 2019\/05\/13 09:42:11.745919 [INF] Starting nats-server version 2.*.*<\/p>\n\n\n\n<p>[41634] 2019\/05\/13 09:42:11.746240 [INF] Listening for client connections on 0.0.0.0:4222<\/p>\n\n\n\n<p>[41634] 2019\/05\/13 09:42:11.746252 [INF] Server is ready<\/p>\n\n\n\n<p>That&#8217;s it \u2014 your local NATS server is now live and ready to accept connections. Keep this terminal window open; you&#8217;ll need it running in the background for the next steps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Publish and Subscribe (Hands-On Example)<\/strong><\/h2>\n\n\n\n<p>The most basic way to use NATS is publish-subscribe: a publisher sends a message on a subject, and any active subscriber listening to that subject receives it. Let&#8217;s see this in action using <a href=\"https:\/\/www.guvi.in\/blog\/guide-for-nodejs-as-backend\/\" target=\"_blank\" rel=\"noreferrer noopener\">Node.js<\/a>.<\/p>\n\n\n\n<p><strong>First, install the official NATS client for Node.js:<\/strong><\/p>\n\n\n\n<p>npm install nats<\/p>\n\n\n\n<p><strong>Subscriber<\/strong> <strong>(save as subscriber.js):<\/strong><\/p>\n\n\n\n<p>import { connect } from &#8220;nats&#8221;;<\/p>\n\n\n\n<p>const nc = await connect({ servers: &#8220;localhost:4222&#8221; });<\/p>\n\n\n\n<p>console.log(&#8220;Connected to NATS&#8221;);<\/p>\n\n\n\n<p>const sub = nc.subscribe(&#8220;greet.*&#8221;);<\/p>\n\n\n\n<p>for await (const msg of sub) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;console.log(`Received: ${msg.string()} on subject ${msg.subject}`);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><strong>Publisher (save as publisher.js):<\/strong><\/p>\n\n\n\n<p>import { connect } from &#8220;nats&#8221;;<\/p>\n\n\n\n<p>const nc = await connect({ servers: &#8220;localhost:4222&#8221; });<\/p>\n\n\n\n<p>nc.publish(&#8220;greet.joe&#8221;, &#8220;hello joe&#8221;);<\/p>\n\n\n\n<p>nc.publish(&#8220;greet.pam&#8221;, &#8220;hello pam&#8221;);<\/p>\n\n\n\n<p>await nc.flush();<\/p>\n\n\n\n<p>await nc.close();<\/p>\n\n\n\n<p><strong>Run the subscriber first, then the publisher in a separate terminal:<\/strong><\/p>\n\n\n\n<p>node subscriber.js<\/p>\n\n\n\n<p>node publisher.js<\/p>\n\n\n\n<p>The subscriber will print each message as it arrives, since it&#8217;s listening on <strong>greet.*<\/strong> \u2014 a wildcard that matches any subject starting with <strong>greet..<\/strong> This is the foundation of almost everything else you&#8217;ll build with NATS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Request-Reply Example<\/strong><\/h2>\n\n\n\n<p>Sometimes you don&#8217;t just want to send a message \u2014 you want a response back too, like calling an API.<\/p>\n\n\n\n<p>NATS handles this using the <strong>request-reply pattern<\/strong>: a request is published on a subject with a <strong>reply subject<\/strong> attached, and the responder sends its reply to that subject.<\/p>\n\n\n\n<p>This reply subject is called an <strong>&#8220;inbox,&#8221;<\/strong> dynamically created for each request, so the response always finds its way back to the right requester.<\/p>\n\n\n\n<p><strong>Responder (save as <\/strong><strong>responder.js<\/strong><strong>):<\/strong><\/p>\n\n\n\n<p>javascript<\/p>\n\n\n\n<p>import { connect } from &#8220;nats&#8221;;<\/p>\n\n\n\n<p>const nc = await connect({ servers: &#8220;localhost:4222&#8221; });<\/p>\n\n\n\n<p>console.log(&#8220;Responder ready, waiting for requests&#8230;&#8221;);<\/p>\n\n\n\n<p>const sub = nc.subscribe(&#8220;time&#8221;);<\/p>\n\n\n\n<p>for await (const msg of sub) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;msg.respond(new Date().toString());<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><strong>Requester (save as <\/strong><strong>requester.js<\/strong><strong>):<\/strong><\/p>\n\n\n\n<p>javascript<\/p>\n\n\n\n<p>import { connect } from &#8220;nats&#8221;;<\/p>\n\n\n\n<p>const nc = await connect({ servers: &#8220;localhost:4222&#8221; });<\/p>\n\n\n\n<p>const reply = await nc.request(&#8220;time&#8221;, undefined, { timeout: 1000 });<\/p>\n\n\n\n<p>console.log(`Got reply: ${reply.string()}`);<\/p>\n\n\n\n<p>await nc.close();<\/p>\n\n\n\n<p><strong>Run the responder first, then the requester in another terminal:<\/strong><\/p>\n\n\n\n<p>shell<\/p>\n\n\n\n<p>node responder.js<\/p>\n\n\n\n<p>node requester.js<\/p>\n\n\n\n<p>The<strong> requester sends a message<\/strong> on the time subject and waits up to one second for a reply.<\/p>\n\n\n\n<p>The <strong>responder receives<\/strong> it and immediately sends back the current time. If no responder is listening, the request simply times out \u2014 a useful signal that something on the other end isn&#8217;t running.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Common Mistakes to Avoid<\/strong><\/h2>\n\n\n\n<p>Here are the following common mistakes beginners make when working with NATS:<\/p>\n\n\n\n<ul>\n<li><strong>Forgetting to start the NATS server first<\/strong> \u2014 your client code will fail to connect if nats-server isn&#8217;t already running in the background.<\/li>\n\n\n\n<li><strong>Publishing before subscribing<\/strong> \u2014 since NATS doesn&#8217;t store messages by default, a subscriber that starts late misses any messages published before it connected.<\/li>\n\n\n\n<li><strong>Mixing up subjects<\/strong> \u2014 a small typo like greet.joe vs greet.Joe means your subscriber simply won&#8217;t receive the message, since subject names are case-sensitive.<\/li>\n\n\n\n<li><strong>Not setting a timeout on requests<\/strong> \u2014 in the request-reply pattern, forgetting the timeout means your code can hang indefinitely if no responder is listening.<\/li>\n\n\n\n<li><strong>Confusing Core NATS with JetStream<\/strong> \u2014 expecting messages to be saved and replayed later, when that&#8217;s only possible if JetStream is explicitly enabled.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>NATS is one of the simplest ways to get your applications talking to each other, and as you&#8217;ve seen, getting started takes only a few lines of code. With your server running and these basic patterns under your belt, you&#8217;re ready to start building real, message-driven applications of your own.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>FAQs<\/strong><\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1782567829669\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>Do I need to install NATS on a server before using it in an application?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes, the nats-server must be running before any client can connect and communicate.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1782567843989\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>Can NATS work without storing messages permanently?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>By default, messages are not stored, so they are lost if no subscriber is active at that moment.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1782567859569\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>What happens if a subscriber starts after a message is published?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The subscriber will miss the message because NATS does not retain it unless JetStream is enabled.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1782567860878\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>Why do developers use subjects like greet.joe instead of direct connections?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Subjects allow flexible routing, so multiple services can communicate without tight coupling.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1782567861636\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>What is the main risk in request\u2013reply communication?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>If no responder is active, the request can time out or hang, depending on the configuration.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1782567906774\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>Can NATS handle large-scale systems with many services?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>It is built for high scalability and low-latency communication across distributed systems.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>NATS is quietly becoming one of the most talked-about tools in modern cloud systems, especially when things need to move fast without any delay. There\u2019s something interesting about how it connects everything behind the scenes, almost like an invisible layer keeping systems in sync. What makes NATS even more intriguing is how simple it looks [&hellip;]<\/p>\n","protected":false},"author":64,"featured_media":119497,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[843],"tags":[],"views":"47","authorinfo":{"name":"Abhishek Pati","url":"https:\/\/www.guvi.in\/blog\/author\/abhishek-pati\/"},"thumbnailURL":"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/06\/NATS-300x116.webp","_links":{"self":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/119352"}],"collection":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/comments?post=119352"}],"version-history":[{"count":3,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/119352\/revisions"}],"predecessor-version":[{"id":119499,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/119352\/revisions\/119499"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media\/119497"}],"wp:attachment":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media?parent=119352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/categories?post=119352"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/tags?post=119352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}