{"id":3862,"date":"2018-02-02T06:03:17","date_gmt":"2018-02-02T06:03:17","guid":{"rendered":"https:\/\/www.botreetechnologies.com\/blog\/?p=3862"},"modified":"2020-12-10T18:27:26","modified_gmt":"2020-12-10T12:57:26","slug":"django-private-content-streaming-using-amazon-s3","status":"publish","type":"post","link":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/","title":{"rendered":"DJango\u200a:\u200a Private Content Streaming using Amazon S3"},"content":{"rendered":"\n<p>In one of our recent project we had a requirement of streaming a video, to only a specific set of users who have subscribed to our content.<\/p>\n\n\n\n<p>We were using <a href=\"https:\/\/www.botreetechnologies.com\/blog\/amazon-aws-s3-how-to-handle-deprecated-sslv3-connectivity\" target=\"_blank\" rel=\"noopener noreferrer\">AWS S3 bucket<\/a> to store our media files. By default if you upload a file on S3, it&#8217;s private and not accessible to anyone except the account owner. So that achieved fifty percent of our task, but now we had to focus on sharing the files to a specific set of users who have subscribed to our service.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.botreetechnologies.com\/aws-devops-services\" target=\"_blank\" rel=\"noopener noreferrer\">AWS<\/a> provides a unique feature of generating a signed URL. We can add a time limit until which that URL is valid.<\/p>\n\n\n\n<p>Below is the code to generate a signed URL<\/p>\n\n\n\n<p><script src=\"https:\/\/gist.github.com\/yogendra-btc\/a8366b4a7ab8c2e2d4bad03276ac8c65.js\"><\/script><\/p>\n\n\n\n<p><span style=\"font-size: 16.0pt; font-family: 'Georgia','serif'; letter-spacing: -.05pt;\">So now we have a URL which was only accessible for 15 mins<\/span><\/p>\n\n\n\n<p><b>generate_url parameters<\/b><\/p>\n\n\n\n<p><b>expires_in<\/b>&nbsp;represents the time in seconds after which the URL is invalid<\/p>\n\n\n\n<p><b>query_auth<\/b>&nbsp;if set to true it will sign the request in the URL<\/p>\n\n\n\n<p><b>force_http<\/b>&nbsp;if set to true it will create http URL instead of https<\/p>\n\n\n\n<p>But when we used the URL in VLC or other media player, the video was played until the URL expired. Which undermined the whole motive of restricting the access.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">AWS Bucket Policy to the&nbsp;rescue<\/h2>\n\n\n\n<p>To allow read access to our private objects i.e our videos only from our website, we need to add a bucket policy that allows&nbsp;<b><i><span style=\"color: #999;\">s3:GetObject<\/span><\/i><\/b>&nbsp;permission with a condition, using&nbsp;<b><i>aws:referer<\/i><\/b>&nbsp;key, that the get request must originate from specific webpages.<\/p>\n\n\n\n<p>So we added the following snippet into our AWS bucket policy,<\/p>\n\n\n\n<p><script src=\"https:\/\/gist.github.com\/yogendra-btc\/c2f4a007c2dc2c978d6974701d71a382.js\"><\/script><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"418\" src=\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/aws-bucket-policy.png\" alt=\"AWS bucket policy\" class=\"wp-image-14447\" srcset=\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/aws-bucket-policy.png 800w, https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/aws-bucket-policy-300x157.png 300w, https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/aws-bucket-policy-768x401.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p>Policy generator option under the Bucket Policy tab will help generating the policy, after which you can make the necessary changes to it. Please refer<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><a title=\"https:\/\/awspolicygen.s3.amazonaws.com\/policygen.html\" href=\"https:\/\/awspolicygen.s3.amazonaws.com\/policygen.html\" data-href=\"https:\/\/awspolicygen.s3.amazonaws.com\/policygen.html\"><b><i>AWS Policy Generator<\/i><\/b><br>AWS Policy Generatorawspolicygen.s3.amazonaws.com<\/a><\/p><\/blockquote>\n\n\n\n<ol class=\"wp-block-list\"><li>For the first step to select the policy type choose S3 Bucket Policy<\/li><li>Then for Principal field use * and for Actions choose GetObject<\/li><li>Click on Add Condition, it will show you the following<\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"164\" src=\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/add-condition.png\" alt=\"Content Streaming using Amazon\u00a0S3\" class=\"wp-image-14448\" srcset=\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/add-condition.png 800w, https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/add-condition-300x62.png 300w, https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/12\/add-condition-768x157.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<ol class=\"wp-block-list\"><li>For the Condition select the StringLike option<\/li><li>Key should have aws::Referer and Value should be your domain name eg http:\/\/www.example.com\/*<\/li><li>Once the policy is generated you can paste it into the Bucket Policy page as per the content mentioned previously.<\/li><\/ol>\n\n\n\n<p>After saving now all the private contents are accessible from our domain only.<\/p>\n\n\n\n<p>But now we need to remove the code for generating a signed URL, as that piece of code overrides the bucket policy.<\/p>\n\n\n\n<p>Once that is removed all media content, though it is private, will be accessible only through our domain.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.botreetechnologies.com\/django-development\" target=\"_blank\" rel=\"noopener noreferrer\">Click here for more details&#8230;<\/a><\/h3>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>At <a href=\"https:\/\/www.botreetechnologies.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">BoTree Technologies<\/a>, we build enterprise applications with our Django team of 20+ engineers.<\/p>\n\n\n\n<p>We also specialize in RPA, AI, Python, Ruby on Rails, JavaScript and ReactJS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.botreetechnologies.com\/contact\" target=\"_blank\" rel=\"noopener noreferrer\">Consulting is free<\/a> &#8211; let us help you grow!<\/h3>\n","protected":false},"excerpt":{"rendered":"<p>In one of our recent project we had a requirement&#8230;<\/p>\n","protected":false},"author":12,"featured_media":14445,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[68,10],"tags":[],"class_list":["post-3862","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-django","category-technology"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>DJango\u200a:\u200a Private Content Streaming using Amazon S3<\/title>\n<meta name=\"description\" content=\"In one of our recent project we had a requirement of streaming a video, to only a specific set of users who have subscribed to our content.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DJango\u200a:\u200a Private Content Streaming using Amazon S3\" \/>\n<meta property=\"og:description\" content=\"In one of our recent project we had a requirement of streaming a video, to only a specific set of users who have subscribed to our content.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/\" \/>\n<meta property=\"og:site_name\" content=\"BoTree Technologies\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/BoTreeTechnologies\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-02T06:03:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-12-10T12:57:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/django-private-content-streaming.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"852\" \/>\n\t<meta property=\"og:image:height\" content=\"479\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Nipun Brahmbhatt\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@BoTreeTech\" \/>\n<meta name=\"twitter:site\" content=\"@BoTreeTech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nipun Brahmbhatt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/\"},\"author\":{\"name\":\"Nipun Brahmbhatt\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/8944ad04a5e0bffba6243cf8e02168f7\"},\"headline\":\"DJango\u200a:\u200a Private Content Streaming using Amazon S3\",\"datePublished\":\"2018-02-02T06:03:17+00:00\",\"dateModified\":\"2020-12-10T12:57:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/\"},\"wordCount\":485,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/django-private-content-streaming.jpg\",\"articleSection\":[\"Django\",\"Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/\",\"name\":\"DJango\u200a:\u200a Private Content Streaming using Amazon S3\",\"isPartOf\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/django-private-content-streaming.jpg\",\"datePublished\":\"2018-02-02T06:03:17+00:00\",\"dateModified\":\"2020-12-10T12:57:26+00:00\",\"author\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/8944ad04a5e0bffba6243cf8e02168f7\"},\"description\":\"In one of our recent project we had a requirement of streaming a video, to only a specific set of users who have subscribed to our content.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#primaryimage\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/django-private-content-streaming.jpg\",\"contentUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/django-private-content-streaming.jpg\",\"width\":852,\"height\":479,\"caption\":\"Django Development\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.botreetechnologies.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DJango\u200a:\u200a Private Content Streaming using Amazon S3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#website\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/\",\"name\":\"BoTree Technologies\",\"description\":\"Committed to inspire generation.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.botreetechnologies.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/8944ad04a5e0bffba6243cf8e02168f7\",\"name\":\"Nipun Brahmbhatt\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/nipun-brahmbhatt-150x150.png\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/nipun-brahmbhatt-150x150.png\",\"contentUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/nipun-brahmbhatt-150x150.png\",\"caption\":\"Nipun Brahmbhatt\"},\"description\":\"Nipun is a Python Team Lead and Machine Learning enthusiastic. He has also worked extensively on Android. He is always keen to explore the latest Machine Learning trends, tools and algorithms. He loves mentoring his colleagues in Python and Django.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DJango\u200a:\u200a Private Content Streaming using Amazon S3","description":"In one of our recent project we had a requirement of streaming a video, to only a specific set of users who have subscribed to our content.","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:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/","og_locale":"en_US","og_type":"article","og_title":"DJango\u200a:\u200a Private Content Streaming using Amazon S3","og_description":"In one of our recent project we had a requirement of streaming a video, to only a specific set of users who have subscribed to our content.","og_url":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/","og_site_name":"BoTree Technologies","article_publisher":"https:\/\/www.facebook.com\/BoTreeTechnologies\/","article_published_time":"2018-02-02T06:03:17+00:00","article_modified_time":"2020-12-10T12:57:26+00:00","og_image":[{"width":852,"height":479,"url":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/django-private-content-streaming.jpg","type":"image\/jpeg"}],"author":"Nipun Brahmbhatt","twitter_card":"summary_large_image","twitter_creator":"@BoTreeTech","twitter_site":"@BoTreeTech","twitter_misc":{"Written by":"Nipun Brahmbhatt","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#article","isPartOf":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/"},"author":{"name":"Nipun Brahmbhatt","@id":"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/8944ad04a5e0bffba6243cf8e02168f7"},"headline":"DJango\u200a:\u200a Private Content Streaming using Amazon S3","datePublished":"2018-02-02T06:03:17+00:00","dateModified":"2020-12-10T12:57:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/"},"wordCount":485,"commentCount":0,"image":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/django-private-content-streaming.jpg","articleSection":["Django","Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/","url":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/","name":"DJango\u200a:\u200a Private Content Streaming using Amazon S3","isPartOf":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#primaryimage"},"image":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/django-private-content-streaming.jpg","datePublished":"2018-02-02T06:03:17+00:00","dateModified":"2020-12-10T12:57:26+00:00","author":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/8944ad04a5e0bffba6243cf8e02168f7"},"description":"In one of our recent project we had a requirement of streaming a video, to only a specific set of users who have subscribed to our content.","breadcrumb":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#primaryimage","url":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/django-private-content-streaming.jpg","contentUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/django-private-content-streaming.jpg","width":852,"height":479,"caption":"Django Development"},{"@type":"BreadcrumbList","@id":"https:\/\/www.botreetechnologies.com\/blog\/django-private-content-streaming-using-amazon-s3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.botreetechnologies.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DJango\u200a:\u200a Private Content Streaming using Amazon S3"}]},{"@type":"WebSite","@id":"https:\/\/www.botreetechnologies.com\/blog\/#website","url":"https:\/\/www.botreetechnologies.com\/blog\/","name":"BoTree Technologies","description":"Committed to inspire generation.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.botreetechnologies.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/8944ad04a5e0bffba6243cf8e02168f7","name":"Nipun Brahmbhatt","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/nipun-brahmbhatt-150x150.png","url":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/nipun-brahmbhatt-150x150.png","contentUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/nipun-brahmbhatt-150x150.png","caption":"Nipun Brahmbhatt"},"description":"Nipun is a Python Team Lead and Machine Learning enthusiastic. He has also worked extensively on Android. He is always keen to explore the latest Machine Learning trends, tools and algorithms. He loves mentoring his colleagues in Python and Django."}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/3862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/comments?post=3862"}],"version-history":[{"count":1,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/3862\/revisions"}],"predecessor-version":[{"id":14449,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/3862\/revisions\/14449"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/media\/14445"}],"wp:attachment":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/media?parent=3862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/categories?post=3862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/tags?post=3862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}