{"id":13605,"date":"2026-10-20T07:35:00","date_gmt":"2026-10-20T05:35:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=13605"},"modified":"2026-09-25T09:45:54","modified_gmt":"2026-09-25T07:45:54","slug":"203-routes-what-the-wordpress-rest-api-hands-out-without-a-login","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/","title":{"rendered":"203 Routes: What the WordPress REST API Hands Out Without a Login"},"content":{"rendered":"<p>A WordPress site is two things at once. One is the pages a browser shows. The other is an interface that answers in plain data, has been switched on since the first minute, and is rarely looked at by whoever runs the site.<\/p>\n<p>It lives at <code>\/wp-json\/<\/code>, and its first answer is a list of everything it can do.<\/p>\n<figure class=\"lw-diagram\">\n<img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/rest-api-en.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"203 routes split by namespace to scale, the routes that answer without a login beside those that require one, and the single route that answers 404 instead\"><figcaption>203 routes across nine namespaces, counted from the interface&#8217;s own index.<\/figcaption><\/figure>\n<h2>What the interface is for<\/h2>\n<p>The REST API exists so that something other than a browser can work with a site: the block editor in the admin area, a mobile app, another site pulling in articles, a script that publishes on a schedule.<\/p>\n<p>It is part of WordPress itself rather than a plugin, and it has answered by default since 2016. Nothing has to be switched on for it to work.<\/p>\n<p>The consequence worth holding on to: whatever is published on the site is published here as well, in a form built for machines. Not a copy and not a summary &#8211; the same content, far easier to collect.<\/p>\n<h2>203 routes on an ordinary site<\/h2>\n<p>The index at <code>\/wp-json\/<\/code> answered with 203 routes across nine namespaces on the site measured here.<\/p>\n<p>110 of them belong to <code>wp\/v2<\/code>, the core: posts, pages, media, comments, categories, tags, block types and the rest of the standard furniture.<\/p>\n<p>59 belong to a single plugin. That is more than a quarter of the whole interface contributed by one piece of software, and it is not unusual &#8211; a large plugin tends to register a route for every screen it owns.<\/p>\n<p>The remaining 34 are spread across seven namespaces, most of them holding between three and eight routes.<\/p>\n<h2>The namespace list is a plugin list<\/h2>\n<p>The index does not only count routes. It names the namespaces, and a namespace is chosen by whoever wrote the plugin.<\/p>\n<p>So the answer to one unauthenticated request contains, in plain text, which plugins are installed: the SEO plugin, the multilingual plugin, the code-block plugin, and any custom code the site registers for itself.<\/p>\n<p>That is not a leak in the sense of something being broken. It is how the interface has to work, because a client needs to know what is available. It does mean, though, that the question &#8220;which plugins does this site run&#8221; has a one-request answer &#8211; and that answer is routinely used to look up which versions have known problems.<\/p>\n<figure class=\"lw-illu\">\n<img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/illustrationen\/illu-rest-api.webp\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"A long wall of many small lit openings, with a single one filled in and only outlined\"><br \/>\n<\/figure>\n<h2>What answers without a login<\/h2>\n<p>Reading is largely open, which follows from the content being public anyway.<\/p>\n<p>Posts, pages, comments, categories, tags, post types, media and the routes added by the SEO and multilingual plugins all answered 200 with real content.<\/p>\n<p>One detail deserves a pause. A request for a single post returned 23,455 bytes: the complete rendered article, not an excerpt. Everything published is available at one request per post, cleanly separated into fields, without any of the surrounding markup a page would carry.<\/p>\n<h2>What asks for a login, and the better refusal<\/h2>\n<p>Everything describing the installation rather than the content required authentication: the settings, the plugin list, the theme list, the block types, the site health checks. All of them answered 401.<\/p>\n<p>One route answered differently, and it is the one worth copying. <code>wp\/v2\/users<\/code> returned 404.<\/p>\n<p>The difference is not cosmetic. A 401 or 403 confirms that the route exists and is being guarded, which tells a collector that the thing behind it is real and worth another attempt. A 404 says nothing at all. The route had been removed rather than protected, and from outside that is indistinguishable from a WordPress that never offered it.<\/p>\n<p>Author names are the usual reason for closing it. They are half of a login, and a public list of them is a public list of valid user names.<\/p>\n<h2>What is worth checking<\/h2>\n<p>Three questions answer themselves in one request each.<\/p>\n<p>What does <code>\/wp-json\/<\/code> list? Which namespaces appear, and does any of them belong to something no longer in use? A deactivated plugin registers nothing; an active but forgotten one registers everything it has.<\/p>\n<p>What does <code>\/wp-json\/wp\/v2\/users<\/code> answer? A 200 hands out author names. A 401 confirms they exist. A 404 says nothing.<\/p>\n<p>And what comes back for a single post? If the answer is the whole article, that is the interface working exactly as designed &#8211; but it is worth knowing that this is a shape the content is available in, and not only as a page.<\/p>\n<p>The same two questions, how many routes <code>\/wp-json\/<\/code> lists and what <code>wp\/v2\/users<\/code> answers, were also put to twelve installations; the results, from 203 to 1,107 routes, are in <a data-lw-artikel=\\\"15765\\\">1,107 Routes Without a Login: What Ten WordPress Installations Hand Out at \/wp-json\/<\/a>.<\/p>\n<div class=\"lw-faq\">\n<h2>Questions and answers<\/h2>\n<h3>Is removing wp\/v2\/users enough to stop user names from getting out?<\/h3>\n<p>No, the route is merely the most convenient list. By default two other places give away the same thing:<\/p>\n<ul>\n<li>The author archive. For authors with published posts, an address such as \/?author=1 redirects to \/author\/&lt;slug&gt;\/, and WordPress derives that slug from the login name when the user is created. Requesting the numbers one after another yields essentially the same list.<\/li>\n<li>The oEmbed interface under \/wp-json\/oembed\/1.0\/. For every post it returns the author&#8217;s display name and the address of the author archive, slug included.<\/li>\n<\/ul>\n<p>The display name in feeds and under posts is harmless as long as it differs from the login name. The lasting fix is therefore less about hiding and more about a login name that appears nowhere in public, and a login for which the name alone is useless, for example through a strong password and a second factor.<\/p>\n<h3>Does a site reveal its plugins even without the index at \/wp-json\/?<\/h3>\n<p>Usually, yes. A plugin&#8217;s stylesheets and scripts sit under \/wp-content\/plugins\/ in a folder normally named after the plugin, and they often carry the version number in the ver parameter. Hiding the index therefore removes one source, not the information.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress REST API handbook<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress developer resources<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Every WordPress site answers at an address most people never open. Counted on one ordinary installation it offers 203 routes, and the list of them names every plugin before a single one is asked about.<\/p>\n","protected":false},"author":1,"featured_media":16139,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92642],"tags":[91219,91315,91096],"class_list":["post-13605","post","type-post","status-publish","format-standard","hentry","category-tutorials-en-wordpress-plugins-tricks","tag-tutorial","tag-web-performance","tag-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>203 Routes: What the WordPress REST API Hands Out Without a Login | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"How many routes a normal WordPress site exposes, which of them answer without a login, why the namespaces alone reveal the plugin list, and why 404 beats 403 as a refusal.\" \/>\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.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"203 Routes: What the WordPress REST API Hands Out Without a Login | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"How many routes a normal WordPress site exposes, which of them answer without a login, why the namespaces alone reveal the plugin list, and why 404 beats 403 as a refusal.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-20T05:35:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-13605-wordpress-rest-api-without-login-nz.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"203 Routes: What the WordPress REST API Hands Out Without a Login\",\"datePublished\":\"2026-10-20T05:35:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/\"},\"wordCount\":988,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-13605-wordpress-rest-api-without-login-nz.png\",\"keywords\":[\"Tutorial\",\"Web Performance\",\"WordPress\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/\",\"name\":\"203 Routes: What the WordPress REST API Hands Out Without a Login | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-13605-wordpress-rest-api-without-login-nz.png\",\"datePublished\":\"2026-10-20T05:35:00+00:00\",\"description\":\"How many routes a normal WordPress site exposes, which of them answer without a login, why the namespaces alone reveal the plugin list, and why 404 beats 403 as a refusal.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-13605-wordpress-rest-api-without-login-nz.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-13605-wordpress-rest-api-without-login-nz.png\",\"width\":1200,\"height\":630,\"caption\":\"203 Routes: What the WordPress REST API Hands Out Without a Login\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/wordpress-plugins-tricks\\\/tutorials-en-wordpress-plugins-tricks\\\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"203 Routes: What the WordPress REST API Hands Out Without a Login\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"203 Routes: What the WordPress REST API Hands Out Without a Login | Lukas Wojcik","description":"How many routes a normal WordPress site exposes, which of them answer without a login, why the namespaces alone reveal the plugin list, and why 404 beats 403 as a refusal.","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.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/","og_locale":"en_US","og_type":"article","og_title":"203 Routes: What the WordPress REST API Hands Out Without a Login | Lukas Wojcik","og_description":"How many routes a normal WordPress site exposes, which of them answer without a login, why the namespaces alone reveal the plugin list, and why 404 beats 403 as a refusal.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-10-20T05:35:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-13605-wordpress-rest-api-without-login-nz.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"203 Routes: What the WordPress REST API Hands Out Without a Login","datePublished":"2026-10-20T05:35:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/"},"wordCount":988,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-13605-wordpress-rest-api-without-login-nz.png","keywords":["Tutorial","Web Performance","WordPress"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/","name":"203 Routes: What the WordPress REST API Hands Out Without a Login | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-13605-wordpress-rest-api-without-login-nz.png","datePublished":"2026-10-20T05:35:00+00:00","description":"How many routes a normal WordPress site exposes, which of them answer without a login, why the namespaces alone reveal the plugin list, and why 404 beats 403 as a refusal.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-13605-wordpress-rest-api-without-login-nz.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-13605-wordpress-rest-api-without-login-nz.png","width":1200,"height":630,"caption":"203 Routes: What the WordPress REST API Hands Out Without a Login"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/203-routes-what-the-wordpress-rest-api-hands-out-without-a-login\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"203 Routes: What the WordPress REST API Hands Out Without a Login"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13605"}],"version-history":[{"count":3,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13605\/revisions"}],"predecessor-version":[{"id":22757,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13605\/revisions\/22757"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/16139"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=13605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}