{"id":14,"date":"2026-11-04T02:57:52","date_gmt":"2026-11-04T02:57:52","guid":{"rendered":"https:\/\/globalcorpora.com\/blog\/yt-dlp-sign-in-to-confirm-not-a-bot\/"},"modified":"2026-11-04T02:58:21","modified_gmt":"2026-11-04T02:58:21","slug":"yt-dlp-sign-in-to-confirm-not-a-bot","status":"publish","type":"post","link":"https:\/\/globalcorpora.com\/blog\/yt-dlp-sign-in-to-confirm-not-a-bot\/","title":{"rendered":"yt-dlp \"Sign in to confirm you're not a bot\": How to Fix It"},"content":{"rendered":"<p>If yt-dlp suddenly fails with <code>ERROR: [youtube] VIDEO_ID: Sign in to confirm you're not a bot<\/code>, YouTube has decided that your session or your IP address looks automated. It often shows up together with HTTP 403, HTTP 429 or \"This content isn't available, try again later\". This guide walks through the fixes in order, cheapest first. It keeps two cases apart: one person on a laptop, and a pipeline doing thousands of downloads per hour from servers.<\/p>\n<p>Everything below was checked against the yt-dlp README, the official wiki and the source code as of early November 2026, when the latest stable release was <code>2026.10.26<\/code>. YouTube changes enforcement often, so treat client names and limits as a snapshot.<\/p>\n<h2>TL;DR<\/h2>\n<ul>\n<li><strong>Update first.<\/strong> Run <code>yt-dlp -U<\/code>, or switch to the nightly channel with <code>yt-dlp --update-to nightly<\/code>. Many \"bot\" and 403 reports turn out to be outdated installs.<\/li>\n<li><strong>Install a JavaScript runtime.<\/strong> YouTube extraction now needs an external JS runtime (Deno is the default) plus the <code>yt-dlp-ejs<\/code> scripts. Without them, some formats go missing.<\/li>\n<li><strong>Slow down.<\/strong> The wiki puts the guest rate limit at about 300 videos\/hour per session. <code>-t sleep<\/code> applies sensible delays for you.<\/li>\n<li><strong>PO tokens fix 403s on some clients, not the bot check.<\/strong> Use a PO Token Provider plugin such as <code>bgutil-ytdlp-pot-provider<\/code>.<\/li>\n<li><strong>Cookies work, but they put the account at risk.<\/strong> Fine for one person on a laptop. At pipeline scale, expect accounts to be banned.<\/li>\n<li><strong>On servers, IP reputation decides most of the outcome.<\/strong> Datacenter ranges get the bot check much more often than residential IPs. Spread load across IPs and sessions instead of pushing harder through one.<\/li>\n<\/ul>\n<h2>What the error actually means<\/h2>\n<p>The text comes from YouTube's player response, not from yt-dlp. yt-dlp appends a hint (\"Use --cookies-from-browser or --cookies for the authentication\") and links the <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\/wiki\/Extractors\">wiki's cookie instructions<\/a>. Don't misread it: the video doesn't need an account. YouTube wants a session it trusts more than an anonymous request from your IP.<\/p>\n<p>The related errors have different causes, which is why they need different fixes:<\/p>\n<ul>\n<li><strong>\"This content isn't available, try again later\"<\/strong> means your session hit the rate limit. In current yt-dlp versions, the error says the session \"has been rate-limited by YouTube for up to an hour\" and suggests <code>-t sleep<\/code>.<\/li>\n<li><strong>HTTP Error 403: Forbidden<\/strong> on the actual media download usually means a missing or invalid PO token for the client in use, an outdated yt-dlp, or a JS challenge that failed. Less often, the IP is blocked.<\/li>\n<li><strong>HTTP Error 429: Too Many Requests<\/strong> means your IP is being throttled. The <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\/wiki\/FAQ\">yt-dlp FAQ<\/a> calls this \"usually a soft block\".<\/li>\n<\/ul>\n<h2>Error \u2192 cause \u2192 fix<\/h2>\n<table>\n<thead>\n<tr>\n<th>Error message<\/th>\n<th>Likely cause<\/th>\n<th>First fix to try<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>Sign in to confirm you're not a bot<\/code><\/td>\n<td>Low-reputation IP (often datacenter), or too many requests from one IP or session<\/td>\n<td>Update, slow down, and change egress IP. Use cookies only as a last resort (account risk).<\/td>\n<\/tr>\n<tr>\n<td><code>This content isn't available, try again later<\/code><\/td>\n<td>Session rate limit: about 300 videos\/hour for guests, about 2,000\/hour for accounts (per the wiki)<\/td>\n<td><code>-t sleep<\/code> or the sleep flags. Wait up to an hour.<\/td>\n<\/tr>\n<tr>\n<td><code>HTTP Error 403: Forbidden<\/code> on media\/fragments<\/td>\n<td>Missing PO token (GVS) for the chosen client, outdated yt-dlp, or a JS challenge that wasn't solved<\/td>\n<td>Update, install Deno and EJS, add a PO Token Provider plugin<\/td>\n<\/tr>\n<tr>\n<td><code>HTTP Error 429: Too Many Requests<\/code><\/td>\n<td>IP throttled for overuse<\/td>\n<td>Back off. Use fewer parallel workers per IP. Move to another IP.<\/td>\n<\/tr>\n<tr>\n<td><code>No supported JavaScript runtime could be found<\/code> (warning)<\/td>\n<td>No Deno, or another runtime not enabled<\/td>\n<td>Install Deno, or pass <code>--js-runtimes node<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>n challenge solving failed: Some formats may be missing<\/code><\/td>\n<td>EJS scripts missing or outdated, or the runtime is too old<\/td>\n<td>Update yt-dlp together with <code>yt-dlp-ejs<\/code>. Check the runtime version.<\/td>\n<\/tr>\n<tr>\n<td><code>YouTube is requiring a captcha challenge before playback<\/code><\/td>\n<td>IP or session flagged<\/td>\n<td>Stop and rotate the IP. Don't retry in a tight loop.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Step 1: Diagnose with <code>-v<\/code><\/h2>\n<p>Before you change anything, run a single failing URL with verbose output:<\/p>\n<pre><code>yt-dlp -v \"https:\/\/www.youtube.com\/watch?v=VIDEO_ID\"<\/code><\/pre>\n<p>Check the <code>[debug]<\/code> header for the version and channel, the <code>JS runtimes:<\/code> line, and the detected <code>JS Challenge Providers<\/code> and <code>PO Token Providers<\/code>. If the runtimes line says <code>none<\/code>, or a provider you installed is missing, you've found the problem. Add <code>--print-traffic<\/code> for the raw HTTP exchange.<\/p>\n<h2>Step 2: Update yt-dlp (and pick the right channel)<\/h2>\n<p>YouTube breaks yt-dlp regularly, and fixes ship fast. The <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp#update-channels\">README's update section<\/a> describes three channels. <code>stable<\/code> is released on a roughly monthly schedule and is \"often 'stale' and prone to external breakage\". <code>nightly<\/code> is the \"recommended channel for regular users\". <code>master<\/code> publishes after every push.<\/p>\n<pre><code># Official binary: update within the current channel\nyt-dlp -U\n\n# Switch a stable binary to nightly\nyt-dlp --update-to nightly\n\n# pip install: re-run the install, including the default extras (pulls in yt-dlp-ejs)\npython3 -m pip install -U \"yt-dlp[default]\"\n\n# pip nightly (development releases)\npython3 -m pip install -U --pre \"yt-dlp[default]\"<\/code><\/pre>\n<p>If your distro package is outdated, the <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\/wiki\/FAQ\">FAQ<\/a> says to install the official release instead. In a pipeline, pin a version in your image but rebuild it often.<\/p>\n<h2>Step 3: Install a JavaScript runtime and the EJS scripts<\/h2>\n<p>This is the newest requirement and a common cause of missing formats and 403s. Per the <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\/wiki\/EJS\">EJS wiki page<\/a>, yt-dlp now solves YouTube's JavaScript challenges with an external runtime that runs the <a href=\"https:\/\/github.com\/yt-dlp\/ejs\">yt-dlp-ejs<\/a> solver scripts. The old built-in interpreter is no longer used for YouTube, and the code now calls extraction without a JS runtime \"deprecated\".<\/p>\n<ul>\n<li><strong>Deno<\/strong> (2.3.0 or newer) is recommended and enabled by default.<\/li>\n<li><strong>Node<\/strong> (22.0.0 or newer) works with <code>--js-runtimes node<\/code>. <strong>QuickJS<\/strong> works with <code>--js-runtimes quickjs<\/code>. <strong>Bun<\/strong> support is deprecated.<\/li>\n<li>The official binaries (<code>yt-dlp_linux<\/code>, <code>yt-dlp.exe<\/code>, the zipimport <code>yt-dlp<\/code>) bundle <code>yt-dlp-ejs<\/code>. If you install with pip, use <code>yt-dlp[default]<\/code>. If your distro package doesn't ship the scripts, add <code>--remote-components ejs:github<\/code> (or <code>ejs:npm<\/code> with Deno or Bun).<\/li>\n<\/ul>\n<pre><code># Deno somewhere other than PATH\nyt-dlp --js-runtimes \"deno:\/opt\/deno\/bin\/deno\" URL\n\n# Use Node instead of Deno (clear the defaults first if Deno is also installed)\nyt-dlp --no-js-runtimes --js-runtimes node URL<\/code><\/pre>\n<p>The wiki stresses that <code>yt-dlp-ejs<\/code> must be updated together with yt-dlp, because older versions are ignored. In Docker images, install both in the same layer.<\/p>\n<h2>Step 4: Slow down<\/h2>\n<p>The <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\/wiki\/Extractors#this-content-isnt-available-try-again-later\">Extractors wiki<\/a> gives concrete numbers. With default settings, the limit is \"~300 videos\/hour (~1000 webpage\/player requests per hour)\" for guest sessions and \"~2000 videos\/hour (~4000 webpage\/player requests per hour)\" for accounts. It recommends a delay of about 5\u201310 seconds between downloads.<\/p>\n<p>The easiest option is the built-in preset. <code>-t sleep<\/code> expands to <code>--sleep-subtitles 5 --sleep-requests 0.75 --sleep-interval 10 --max-sleep-interval 20<\/code>. The individual flags:<\/p>\n<table>\n<thead>\n<tr>\n<th>Flag<\/th>\n<th>What it does<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>--sleep-requests SECONDS<\/code><\/td>\n<td>Sleep between requests during extraction (webpage, player API calls)<\/td>\n<\/tr>\n<tr>\n<td><code>--sleep-interval SECONDS<\/code> (alias <code>--min-sleep-interval<\/code>)<\/td>\n<td>Sleep before each download. Acts as the minimum when combined with the max.<\/td>\n<\/tr>\n<tr>\n<td><code>--max-sleep-interval SECONDS<\/code><\/td>\n<td>Upper bound for a random sleep. Only valid together with the minimum.<\/td>\n<\/tr>\n<tr>\n<td><code>--sleep-subtitles SECONDS<\/code><\/td>\n<td>Sleep before each subtitle download<\/td>\n<\/tr>\n<tr>\n<td><code>-r, --limit-rate RATE<\/code><\/td>\n<td>Cap download bandwidth, e.g. <code>5M<\/code>. Makes traffic look less bursty but doesn't change the request count.<\/td>\n<\/tr>\n<tr>\n<td><code>-R, --retries<\/code> \/ <code>--retry-sleep<\/code><\/td>\n<td>Retry count (default 10) and backoff, e.g. <code>--retry-sleep http:exp=1:120<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Throughput math: with <code>-t sleep<\/code> the per-video sleep averages (10 + 20) \/ 2 = 15 s, so one worker starts at most 3600 \/ 15 = 240 videos\/hour, under the ~300\/hour guest figure. Faster pipelines need more sessions, not less sleep.<\/p>\n<h2>Step 5: PO tokens and player clients (for 403s)<\/h2>\n<p>The <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\/wiki\/PO-Token-Guide\">PO Token Guide<\/a> describes a Proof of Origin token that some YouTube clients must send. Without it, \"requests for the affected clients' format URLs may return HTTP Error 403, or result in your account or IP address being blocked\". Tokens are now bound to the video ID, so pasting a token by hand is no longer recommended. The guide's recommended setup is a PO Token Provider plugin that feeds the <code>mweb<\/code> client. It features two plugins: <a href=\"https:\/\/github.com\/Brainicism\/bgutil-ytdlp-pot-provider\">bgutil-ytdlp-pot-provider<\/a> and <a href=\"https:\/\/github.com\/coletdjnz\/yt-dlp-getpot-wpc\">yt-dlp-getpot-wpc<\/a>.<\/p>\n<pre><code># 1) Run the bgutil token server, bound to loopback only\ndocker run --name bgutil-provider -d --init \\\n  -p 127.0.0.1:4416:4416 brainicism\/bgutil-ytdlp-pot-provider\n\n# 2) Install the plugin next to a pip-installed yt-dlp\npython3 -m pip install -U bgutil-ytdlp-pot-provider\n\n# 3) Use it with the mweb client\nyt-dlp -v --extractor-args \"youtube:player_client=default,mweb\" URL<\/code><\/pre>\n<p>In the <code>-v<\/code> output, look for <code>[pot:bgutil:http] Generating a gvs PO Token<\/code>. The bgutil README warns that leaving <code>127.0.0.1<\/code> out of the port mapping exposes an unauthenticated server.<\/p>\n<p>About <code>player_client<\/code>: in 2026.10.26 the README gives the default as <code>tv_samsung,visionos,web<\/code>, with a different set when logged-in cookies are passed. Use <code>default,-web<\/code> syntax to add or exclude clients. The wiki's PO token table predates some of these clients, so check the README for your installed version rather than copying old forum advice.<\/p>\n<p>An important limit, stated in the bgutil README: <strong>a PO token does not bypass IP-based login restrictions<\/strong>. If you still see \"Sign in to confirm you're not a bot\" after a token was generated, which is common on datacenter IPs, the problem is your IP or session, not the token.<\/p>\n<h2>Step 6: Cookies (laptop yes, pipeline carefully)<\/h2>\n<p>For a single user, logged-in cookies are the quickest way past the bot check. The Extractors wiki has a caution box: \"By using your account with yt-dlp, you run the risk of it being banned (temporarily or permanently).\" It suggests a throwaway account. YouTube rotates cookies on open tabs, so the wiki's method for long-lived cookies is this: log in from a private window, open <code>https:\/\/www.youtube.com\/robots.txt<\/code> in that same tab, export the <code>youtube.com<\/code> cookies with an extension, then close the window.<\/p>\n<pre><code># Laptop: read cookies straight from a browser profile\nyt-dlp --cookies-from-browser firefox URL\n\n# Exported Netscape-format file\nyt-dlp --cookies \/secure\/path\/cookies.txt URL<\/code><\/pre>\n<p>Two practical points. First, the wiki says <em>not<\/em> to export with <code>--cookies-from-browser BROWSER --cookies FILE<\/code> for this purpose, because that exports your regular browser cookies, not the private session. Second, <code>--cookies FILE<\/code> both reads <em>and writes<\/em> the file. If you share one file across parallel workers, they share one session, write over each other's changes, and burn through that account's ~2,000 videos\/hour budget together.<\/p>\n<p><strong>At pipeline scale, don't build on accounts.<\/strong> Accounts get a higher rate limit, but every ban costs you one. Use cookies to retry the occasional login-gated video, not as your main path.<\/p>\n<h2>Step 7: IP reputation, proxies and spreading load<\/h2>\n<p>This is the step laptop guides skip. YouTube judges requests partly by source IP, and cloud and hosting ranges carry far more automated traffic than home connections. They hit the bot check much sooner, so a command that works at home can fail immediately on a fresh VM. Google publishes no thresholds, so test on your own ranges.<\/p>\n<p>yt-dlp's tools for this are <code>--proxy<\/code> (HTTP, HTTPS or SOCKS) and <code>--source-address<\/code>, which binds to a specific local IP if your host has several. Use <code>-4<\/code> or <code>-6<\/code> to pin the address family.<\/p>\n<pre><code># HTTP proxy with auth\nyt-dlp --proxy \"http:\/\/USER:PASS@proxy.example.com:8080\" URL\n\n# SOCKS5 (note the scheme)\nyt-dlp --proxy \"socks5:\/\/USER:PASS@proxy.example.com:1080\" URL<\/code><\/pre>\n<p>For a full walkthrough of proxy types, authentication and rotation patterns, see our <a href=\"https:\/\/globalcorpora.com\/blog\/yt-dlp-proxy-guide\/\">yt-dlp proxy guide<\/a>.<\/p>\n<h3>A pattern for thousands of downloads per hour<\/h3>\n<ol>\n<li><strong>One worker = one egress IP = one guest session.<\/strong> Give each worker its own proxy endpoint or sticky session and its own cookie jar (or none). Don't share state between workers.<\/li>\n<li><strong>Size the pool with arithmetic, not hope.<\/strong> With <code>-t sleep<\/code> a worker waits 10\u201320 s (15 s on average) before each download, so it tops out at about 3,600 \u00f7 15 = 240 videos\/hour before counting the download time itself. Using that ceiling, a target of 5,000 videos\/hour needs at least 5000 \/ 240 \u2248 21 workers, each on separate IPs. Plan for more, since some IPs will be cooling down at any moment. For bandwidth sizing, see <a href=\"https:\/\/globalcorpora.com\/blog\/bandwidth-for-large-scale-video-downloads\/\">our bandwidth guide<\/a>.<\/li>\n<li><strong>Treat bot and rate-limit errors as signals, not retryable failures.<\/strong> When an IP returns the bot check or a 429, take it out of rotation for at least an hour. Hammering it with retries extends the block.<\/li>\n<li><strong>Keep the toolchain current everywhere.<\/strong> yt-dlp, <code>yt-dlp-ejs<\/code>, Deno and the PO token plugin should be rebuilt together on a regular schedule.<\/li>\n<li><strong>Make runs resumable.<\/strong> Use <code>--download-archive<\/code> so a rotated or restarted worker skips finished IDs.<\/li>\n<\/ol>\n<pre><code># yt-dlp.conf for one pipeline worker\n--proxy http:\/\/USER:PASS@proxy.example.com:8080\n--sleep-requests 1\n--sleep-interval 10\n--max-sleep-interval 20\n--sleep-subtitles 5\n--retries 5\n--retry-sleep http:exp=1:120\n--extractor-retries 3\n--download-archive \/data\/archive.txt\n-o \/data\/%(id)s.%(ext)s<\/code><\/pre>\n<p>For the surrounding pipeline (manifests, deduplication, metadata), see <a href=\"https:\/\/globalcorpora.com\/blog\/build-youtube-video-dataset-for-multimodal-training\/\">how to build a YouTube video dataset for multimodal training<\/a> and our notes on <a href=\"https:\/\/globalcorpora.com\/blog\/download-youtube-video-datasets-panda-70m-hd-vila-internvid\/\">downloading Panda-70M, HD-VILA and InternVid<\/a>.<\/p>\n<h2>Troubleshooting order, cheapest first<\/h2>\n<ol>\n<li>Run <code>-v<\/code> on one URL and read the debug header.<\/li>\n<li>Update yt-dlp (<code>-U<\/code> or <code>--update-to nightly<\/code>) and <code>yt-dlp-ejs<\/code>.<\/li>\n<li>Install Deno (or enable Node\/QuickJS) and confirm the <code>JS runtimes:<\/code> line.<\/li>\n<li>Add <code>-t sleep<\/code> and cut parallelism per IP.<\/li>\n<li>Install a PO Token Provider plugin. Try <code>player_client<\/code> variations if 403s persist.<\/li>\n<li>Laptop: pass cookies from a throwaway account. Pipeline: move to cleaner IPs and spread load across more of them.<\/li>\n<li>Still stuck on the latest nightly? Check the <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\/issues\/3766\">pinned known-issues thread<\/a> and the issue tracker before you file a report with full <code>-v<\/code> output.<\/li>\n<\/ol>\n<h2>A note on compliance<\/h2>\n<p>YouTube's Terms of Service restrict automated access and downloading. Building a training set also involves copyright and licensing (for example, filtering for Creative Commons content), privacy rules for faces and voices (such as GDPR), and honoring takedown and opt-out requests. Get legal review for your jurisdiction and use case.<\/p>\n<h2>If you'd rather not run this yourself<\/h2>\n<p>Corpora offers dedicated 1\u201340 Gbps unmetered proxy capacity (HTTP(S) and SOCKS5, rotating pools, multi-region) that drops into the <code>--proxy<\/code> setup above, at <a href=\"https:\/\/globalcorpora.com\/#pricing\">$2,000 per Gbps per month<\/a>. If you'd rather skip the infrastructure, we can also collect and deliver video, audio, subtitles and metadata straight to your object storage. <a href=\"https:\/\/globalcorpora.com\/#contact\">Get in touch<\/a> for a free sample batch.<\/p>\n<h2>FAQ<\/h2>\n<h3>Why does yt-dlp say \"Sign in to confirm you're not a bot\" on my server but not on my laptop?<\/h3>\n<p>The message comes from YouTube and depends heavily on the source IP. Datacenter and cloud IPs are flagged far more readily than residential connections. Updating and slowing down help, but on servers the lasting fix is better IPs plus spreading load across them.<\/p>\n<h3>Does a PO token fix \"Sign in to confirm you're not a bot\"?<\/h3>\n<p>Usually not. PO tokens fix 403s on clients that need them. Per the bgutil README, a token \"does not bypass IP-based login restrictions\".<\/p>\n<h3>Do I need Deno for yt-dlp now?<\/h3>\n<p>For YouTube you need a supported JavaScript runtime. Deno is the default. Node and QuickJS work with <code>--js-runtimes<\/code>.<\/p>\n<h3>Is using cookies with yt-dlp safe?<\/h3>\n<p>The wiki warns the account can be banned temporarily or permanently. Use a throwaway account and low request rates.<\/p>\n<h3>How long does the \"This content isn't available, try again later\" block last?<\/h3>\n<p>yt-dlp's own message says the session is rate-limited \"for up to an hour\". Wait, then resume with <code>-t sleep<\/code> or equivalent delays so you stay under the roughly 300 videos\/hour guest limit.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fix yt-dlp \"Sign in to confirm you're not a bot\" plus 403\/429 errors: update, JS runtime, PO tokens, sleep flags, cookies and IP reputation at scale.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[12,9,13,14,11,7],"class_list":["post-14","post","type-post","status-publish","format-standard","hentry","category-guides","tag-po-token","tag-proxies","tag-rate-limiting","tag-troubleshooting","tag-youtube","tag-yt-dlp"],"_links":{"self":[{"href":"https:\/\/globalcorpora.com\/blog\/wp-json\/wp\/v2\/posts\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/globalcorpora.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/globalcorpora.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/globalcorpora.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/globalcorpora.com\/blog\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":1,"href":"https:\/\/globalcorpora.com\/blog\/wp-json\/wp\/v2\/posts\/14\/revisions"}],"predecessor-version":[{"id":15,"href":"https:\/\/globalcorpora.com\/blog\/wp-json\/wp\/v2\/posts\/14\/revisions\/15"}],"wp:attachment":[{"href":"https:\/\/globalcorpora.com\/blog\/wp-json\/wp\/v2\/media?parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/globalcorpora.com\/blog\/wp-json\/wp\/v2\/categories?post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/globalcorpora.com\/blog\/wp-json\/wp\/v2\/tags?post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}