LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Blog Overview /WordPress Plugins & Tricks/Tutorials / Which WordPress Data Is Public: Understanding REST...
Read this article in other languages:

Which WordPress Data Is Public: Understanding REST API Access and Permissions

Which WordPress Data Is Public: Understanding REST API Access and PermissionsWhich WordPress Data Is Public: Understanding REST API Access and Permissions

Management Summary

The WordPress REST API is a connection through which applications read or change website data. It supports editing and integrations, so a long public list of available routes is not automatically evidence of a security problem. The important distinction is between knowing that an operation exists and having permission to perform it. The example of 203 listed routes shows why public content and protected actions need different treatment. Hiding the list does not secure access, while disabling everything can disrupt useful website functions.

Contents
  1. Finding and interpreting the index
  2. The historical 203-route example
  3. Public content is not every stored field
  4. Namespaces provide clues, not a full plugin inventory
  5. 200, 401, 403 and 404 need context
  6. Author identity is not automatically a login name
  7. A practical review
  8. Questions and answers
  9. Sources

The WordPress REST API is an interface through which programs request or change website data. It exposes structured data for the block editor, apps and integrations. An API index can list hundreds of routes without granting anonymous access to every operation. Route visibility, returned fields and permission checks are separate questions.

Listed routes do not establish public access to every operation.
Listed routes do not establish public access to every operation.

Finding and interpreting the index

REST content endpoints became part of WordPress core in version 4.7, released in December 2016. The usual root is /wp-json/ relative to the WordPress site, for example /blog/wp-json/. Without pretty permalinks, ?rest_route=/ can provide the index. The page’s API discovery link identifies the configured root. Plugins, filters or server rules can change access.

A route is a URL pattern. An endpoint combines a route with an operation such as GET or POST. A listed POST method is not evidence that unauthenticated publishing is possible: authorization runs separately. Some routes may also be omitted from discovery. The index is an inventory aid, not a complete security audit.

The historical 203-route example

The saved measurement for this site’s blog, dated 6 September 2026, records 203 routes and ten namespaces. The entries include 110 routes assigned to wp/v2 and 59 to yoast/v1. The namespace subtotals sum to 202, one fewer than the overall count. The overall route count and namespace subtotals therefore use different scopes in this saved summary.

These are installation-specific counts at a recorded time, not a WordPress default or a current measurement. Even wp/v2 is not exclusively core: custom content types can add routes there. A namespace such as vendor/v1 identifies an API family and version; v1 is not the installed plugin’s release version.

The same snapshot records successful GET responses for posts, pages, media, comments, types and search, 401 for settings, plugins and themes, and 404 for the users collection. These observations apply to the tested requests. They do not establish the permissions of every method, record or field.

Public content is not every stored field

For ordinary public posts, the API can return article HTML in content.rendered as well as a separate excerpt. That is not the complete themed page: navigation and layout are separate, and rendering filters can affect the content. A response size alone does not establish completeness.

Drafts, private posts, password-protected content and editing fields have separate rules. Custom types require REST support, and plugins can modify permissions or representations. A claim that everything published anywhere on the site is available through one standard post request is too broad.

Namespaces provide clues, not a full plugin inventory

A distinctive namespace can indicate a component, but not every active plugin registers REST routes. Themes and custom code can register routes, and one component can use several namespaces. The index therefore neither lists every installed plugin nor proves exact versions or vulnerabilities. Asset paths and version parameters can provide additional clues, but may be rewritten or use unrelated cache versions.

For site administration, the reliable inventory comes from installed components and their actual versions. Unneeded active components deserve review; an unfamiliar namespace alone does not establish that a component is unused.

200, 401, 403 and 404 need context

A 200 may contain an empty collection or intentionally public data. A 401 generally indicates an authentication problem; 403 indicates refusal. Neither code proves that a particular account or private record exists. A 404 may reflect a missing route, missing object, policy decision or upstream response. Status, response body, method and configuration need joint interpretation.

Removing an unused route can reduce exposure, but 404 is not inherently a better authorization control. A hidden index does not disable the underlying endpoints. Broad API shutdowns can break the block editor and integrations. Required endpoints need explicit permission checks and tests for permitted and denied operations.

Author identity is not automatically a login name

The core user schema distinguishes public display name name, public author slug, and login username, which belongs to the editing context. Without user-list privileges, the standard collection is generally limited to authors with published posts in REST-enabled types. A successful collection response is not a list of all accounts.

The author slug can derive from the login during creation, but a supplied value, sanitization, filters and collision suffixes can change the result. Display name, slug and login can coincide without being identical by definition. Public identity is not a password and should not be treated as the main authentication secret.

A practical review

A review records the discovered root, timestamp and route inventory, then compares representative public responses with the intended publication policy. Sensitive operations require separate capability tests, including an anonymous request and a low-privilege account in a controlled test environment. Reading a route list does not exercise write permissions.

Strong unique passwords, appropriate multi-factor authentication, limited privileges, maintained components and controlled application credentials remain relevant. Browser-login MFA does not automatically add a second factor to every application-password integration; those credentials need separate management.

The historical comparison surveyed twelve addresses and obtained ten REST indexes. The counts describe reachable indexes, not twelve proven WordPress installations or anonymous write access. Comparison of REST route inventories across sites.

A long wall of many small lit openings, with a single one filled in and only outlined

Questions and answers

Does blocking the users collection hide all author information?

No. Author archives, article bylines, feeds and oEmbed can expose public author details. Core oEmbed can include a display name and author URL for public embeddable posts. Availability and fields depend on filters and configuration. Removing one route does not establish that every other source is absent.

Is a different display name always harmless?

No. A public name can identify a person even when unrelated to the login. Publication requires a clear decision about which name and other author details should be public. Authentication should remain robust even when the account identifier is known.

Does a high route count mean an insecure site?

No. Complexity increases review work, but security depends on data exposure, permission checks and maintained code. Public read access and correctly denied writes can coexist on the same route.

Sources

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in touch

A question or an idea for a web project? Tell me a little about it. This form uses reCAPTCHA and formconfirmed to protect against spam.

Write a comment

Experience with other plugins or hosting environments and questions about the setup are welcome here.

The email address is not published. Required fields are marked with an asterisk.

LUKASWOJCIK.COM · NEWSLETTER

Fresh ideas in your inbox

New articles, practical tools and updates from the projects.

Choose topics (optional)
No selection: all topics.

Subscription starts after confirmation by email. · Privacy

Privacy · Newsletter

Email address, language, selected topics and subscription/confirmation dates are stored to deliver the newsletter. Double opt-in is required. Every issue includes an immediate unsubscribe link. Formconfirmed checks the signup for spam. No email open or click tracking.

Read the full privacy policy ↗