{"id":15765,"date":"2026-11-12T08:05:00","date_gmt":"2026-11-12T07:05:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=15765"},"modified":"2026-10-26T13:33:23","modified_gmt":"2026-10-26T12:33:23","slug":"what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/","title":{"rendered":"What the Public WordPress API Reveals: Checking REST Routes and Data Access"},"content":{"rendered":"<p>A WordPress REST index describes publicly visible API routes. A route is an addressable path; an endpoint combines that path with an HTTP method and a handler. An index entry therefore does not imply anonymous access to every associated record or write operation.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" alt=\"Public route index, response content and operation permissions\" height=\"580\" loading=\"lazy\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-15765-review-20261024.png\" width=\"1120\"\/><figcaption>Public route index, response content and operation permissions.<\/figcaption><\/figure>\n<h2>Finding the index<\/h2>\n<p>The entry point is often <code>\/wp-json\/<\/code>. A better starting point is the discovery link published by WordPress with the relation <code>https:\/\/api.w.org\/<\/code>, for example in an HTTP header or HTML. Subdirectories, changed prefixes and intermediate systems can affect the actual API URL.<\/p>\n<p>WordPress also supports <code>?rest_route=\/<\/code>, including configurations with pretty permalinks. Blocking one URL path therefore does not prove complete access restriction. Conversely, a 404 at a guessed path proves neither that the API is disabled nor that the site runs WordPress.<\/p>\n<h2>A route count is not a plugin inventory<\/h2>\n<p>A namespace such as <code>vendor\/v1<\/code> groups routes. The version number normally denotes an API version, not an installed plugin release. Extensions can register several namespaces, add routes to existing namespaces or operate without REST routes. Themes and custom code can also add routes. Publicly visible index data can additionally be filtered.<\/p>\n<p>The count therefore describes entries in the particular index response. It is neither a complete list of installed plugins nor a measure of vulnerabilities. Similar counts do not prove a shared platform either. A complete extension inventory requires administrative inventory data.<\/p>\n<p>A declared method such as <code>POST<\/code> or <code>DELETE<\/code> documents an interface. An anonymous GET sample does not test write permissions. The relevant evidence is the actual permission check and the data returned under the specific request conditions.<\/p>\n<h2>Status and content belong together<\/h2>\n<ul>\n<li><strong>200:<\/strong> The HTTP request succeeded. Content type, complete parseable JSON and the expected structure are still needed to identify the actual REST response. An HTML blocking page with status 200 is not a user list.<\/li>\n<li><strong>401 or 403:<\/strong> The specific request was rejected. A WordPress error, a firewall and an upstream service are different causes. The status does not establish correct permissions throughout the API.<\/li>\n<li><strong>404:<\/strong> No matching resource was served at that address. An incorrect path, a removed route or upstream rules remain possible explanations.<\/li>\n<li><strong>Failure or truncated JSON:<\/strong> The count has not been reliably determined. A displayed zero must not be interpreted as proof of zero existing routes.<\/li>\n<\/ul>\n<h2>Public authors are not all user accounts<\/h2>\n<p>The default <code>\/wp\/v2\/users<\/code> route can return public author data without authentication. Without the <code>list_users<\/code> capability, core restricts the normal collection to accounts with published posts in REST-visible post types. Filters and extensions can change that behaviour. Collections are also paginated, meaning the results are split across several responses. One response is not automatically the complete set.<\/p>\n<p>The public <code>slug<\/code> field corresponds to the URL-friendly <code>user_nicename<\/code>, which can differ from the login name. The separate <code>username<\/code> field belongs to the protected editing context in the default schema; passwords are never returned. Public author names are therefore not an exposed password file and do not by themselves establish a vulnerability.<\/p>\n<p>Public identifiers can nevertheless support unwanted contact or targeted login attempts. Assessment depends on the actual data returned and the intended level of publicity. Access protection still requires effective authentication and appropriate permissions. Hiding a single collection does not replace those controls.<\/p>\n<h2>Precise descriptions of permissions<\/h2>\n<p>WordPress checks capabilities rather than relying solely on role names. For example, the default settings route checks <code>manage_options<\/code>, while the plugin collection checks <code>activate_plugins<\/code>. Theme requirements also depend on the request. A blanket claim that all these routes require administrator privileges is therefore imprecise.<\/p>\n<p>With cookie authentication, the REST nonce is an additional check value sent with the request. It helps protect against certain requests triggered by another website through a logged-in browser. A nonce replaces neither authentication nor permission checking. Other supported methods, such as application passwords over HTTPS, do not use the same cookie\/nonce combination. Not every valid REST request requires a nonce.<\/p>\n<h2>Limits of the route inventory tool<\/h2>\n<p><a href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/wordpress-rest-route-inventory\/\">The linked inventory<\/a> tries <code>\/wp-json\/<\/code> and, under certain failure conditions, <code>?rest_route=\/<\/code>. Ten fixed GET samples follow. This is neither complete API discovery nor testing of every method.<\/p>\n<p>The current evaluation classifies samples solely by HTTP status. A local test using a synthetic HTML blocking page with status 200 therefore produces an open label. An empty JSON list receives the same label. In this implementation, that label does not demonstrate disclosure of user accounts.<\/p>\n<p>The fetch limit is 8 MiB. A truncated index produces a warning, but the numerical route count in the current output remains zero. Only the first 4096 content bytes of each sample reach the evaluation, so a larger valid JSON response can become unparseable. There is no complete user count or pagination. Namespace grouping also uses only the first two path segments, which can incorrectly combine longer namespaces.<\/p>\n<p>Six local test cases check these evaluation limits using synthetic responses. The results do not constitute a new ranking of third-party installations or a security assessment of those sites.<\/p>\n<p><a href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/wordpress-plugins-tricks\/tutorials-en-wordpress-plugins-tricks\/which-wordpress-data-is-public-understanding-rest-api-access-and-permissions\/\">A related article discusses public data in the WordPress REST API.<\/a><\/p>\n<div class=\"lw-faq\">\n<h2>Questions and answers<\/h2>\n<h3>Does disabling the users route hide public authors?<\/h3>\n<p>No. Author archives, links and sitemaps may still contain public identifiers. Restrictions need to match the intended access model. Removing the route completely can also affect block-editor features or other applications.<\/p>\n<h3>Can an index remain public while data stays protected?<\/h3>\n<p>Yes. Interface descriptions and access to data are separate layers. The index supports integration; permission checks govern the specific operation.<\/p>\n<h3>What makes useful verification evidence?<\/h3>\n<p>The actual API entry point, timestamp, method, parameters, authentication state, status and inspected response content belong together. Claims about write protection need suitable authorized tests or focused code review. One anonymous GET response is insufficient.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/using-the-rest-api\/discovery\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: API discovery<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/extending-the-rest-api\/adding-custom-endpoints\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: Custom endpoints and namespaces<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/using-the-rest-api\/authentication\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: Authentication methods<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/reference\/users\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: User schema<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_rest_users_controller\/get_items\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: Public user collections<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_rest_themes_controller\/get_items_permissions_check\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: Theme permissions<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_rest_plugins_controller\/get_items_permissions_check\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: Plugin permissions<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_rest_settings_controller\/get_item_permissions_check\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: Settings permissions<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/apis\/security\/nonces\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: Nonce limitations<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/using-the-rest-api\/pagination\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: Pagination<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_rest_server\/get_data_for_routes\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress: Public index filters<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/\">WordPress REST API handbook<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/\">WordPress developer resources<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A public WordPress REST index describes visible routes, not a complete plugin inventory or permission audit. Status, response content, author fields and the limits of fixed GET samples need separate checks.<\/p>\n","protected":false},"author":1,"featured_media":31095,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[158],"tags":[91219,91115,91096],"class_list":["post-15765","post","type-post","status-publish","format-standard","hentry","category-tutorials-en-web-development","tag-tutorial","tag-web-security","tag-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>What the Public WordPress API Reveals: Checking REST Routes and Data Access | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Route directories from 203 to 1,107 routes, the user list open on eight of ten installations, and a directory so large it broke the measuring tool.\" \/>\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\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What the Public WordPress API Reveals: Checking REST Routes and Data Access | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Route directories from 203 to 1,107 routes, the user list open on eight of ten installations, and a directory so large it broke the measuring tool.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-12T07:05:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-15765.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\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"What the Public WordPress API Reveals: Checking REST Routes and Data Access\",\"datePublished\":\"2026-11-12T07:05:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/\"},\"wordCount\":984,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/klarheit-20261111-15765.png\",\"keywords\":[\"Tutorial\",\"Web Security\",\"WordPress\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/\",\"name\":\"What the Public WordPress API Reveals: Checking REST Routes and Data Access | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/klarheit-20261111-15765.png\",\"datePublished\":\"2026-11-12T07:05:00+00:00\",\"description\":\"Route directories from 203 to 1,107 routes, the user list open on eight of ten installations, and a directory so large it broke the measuring tool.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/klarheit-20261111-15765.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/klarheit-20261111-15765.png\",\"width\":1200,\"height\":630,\"caption\":\"What the Public WordPress API Reveals: Checking REST Routes and Data Access\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What the Public WordPress API Reveals: Checking REST Routes and Data Access\"}]},{\"@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":"What the Public WordPress API Reveals: Checking REST Routes and Data Access | Lukas Wojcik","description":"Route directories from 203 to 1,107 routes, the user list open on eight of ten installations, and a directory so large it broke the measuring tool.","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\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/","og_locale":"en_US","og_type":"article","og_title":"What the Public WordPress API Reveals: Checking REST Routes and Data Access | Lukas Wojcik","og_description":"Route directories from 203 to 1,107 routes, the user list open on eight of ten installations, and a directory so large it broke the measuring tool.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-11-12T07:05:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-15765.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\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"What the Public WordPress API Reveals: Checking REST Routes and Data Access","datePublished":"2026-11-12T07:05:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/"},"wordCount":984,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-15765.png","keywords":["Tutorial","Web Security","WordPress"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/","name":"What the Public WordPress API Reveals: Checking REST Routes and Data Access | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-15765.png","datePublished":"2026-11-12T07:05:00+00:00","description":"Route directories from 203 to 1,107 routes, the user list open on eight of ten installations, and a directory so large it broke the measuring tool.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-15765.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/klarheit-20261111-15765.png","width":1200,"height":630,"caption":"What the Public WordPress API Reveals: Checking REST Routes and Data Access"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/what-the-public-wordpress-api-reveals-checking-rest-routes-and-data-access\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"What the Public WordPress API Reveals: Checking REST Routes and Data Access"}]},{"@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\/15765","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=15765"}],"version-history":[{"count":8,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/15765\/revisions"}],"predecessor-version":[{"id":31834,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/15765\/revisions\/31834"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/31095"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=15765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=15765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=15765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}