WordPress REST API vs Headless CMS: Why Developers Switch

Honest comparison of 6 dimensions — plus when to stay on WordPress.

July 24, 2026 · 13 min read
WordPress REST API vs Headless CMS: Why Developers Switch

WordPress has a REST API. So why are developers abandoning it for purpose-built headless CMS platforms?

The answer isn't that the WordPress REST API is broken. It works. It's been shipping since WordPress 4.7 in December 2016, and millions of sites use it. The real problem is that "works" and "built for this" are different things. When you're using WordPress as a headless backend — serving JSON to a Next.js or Astro frontend — you're asking a traditional monolithic CMS to do a job it was never designed for.

TL;DR: The WordPress REST API gives you a JSON interface on top of a full WordPress install — PHP runtime, MySQL, plugin stack, and all. It's fine for simple use cases. But developers hitting scale, auth complexity, or plugin-dependency problems switch to purpose-built headless CMS platforms because those systems were designed API-first from day one. Migration is manual (no official WordPress importer in most alternatives), but developers consistently say the new constraint set is easier to manage than the old one.


What the WordPress REST API Actually Does

The WordPress REST API exposes your WordPress data at predictable endpoints:

  • GET /wp/v2/posts — list posts with pagination
  • GET /wp/v2/posts/{id} — single post
  • GET /wp/v2/pages — pages
  • GET /wp/v2/media — media library items
  • GET /wp/v2/categories, /wp/v2/tags — taxonomy
  • GET /wp/v2/users — author data

For writing: POST /wp/v2/posts creates a post, PUT updates, DELETE removes. Standard REST semantics.

Authentication options:

  • Application passwords (built-in since WP 5.6) — base64-encoded username:password in the Authorization header
  • JWT plugins (third-party) — plugins like JWT Authentication for WP REST API
  • Cookie authentication — works only on the same domain; useless for a true decoupled setup
  • OAuth 1.0a (via WP OAuth Server plugin) — technically the most "correct" but verbose

For many projects, this is genuinely enough. A Next.js blog that pulls posts on build time with getStaticProps, renders static HTML, and never needs write access? WordPress REST API handles that fine. A Gatsby site with a once-a-day ISR schedule? Also fine.

The problems start when you push past the basics.


Where the WordPress REST API Falls Short

1. You're still running a full WordPress stack

This is the biggest one that marketing copy glosses over. When you use WordPress headlessly, you don't skip WordPress — you run the entire thing and just ignore the frontend. That means:

  • PHP 8.x + a web server (Apache or Nginx)
  • MySQL database
  • WordPress core (~60 MB on disk, more after plugins)
  • All your plugins (WooCommerce, ACF, Yoast, WPRocket, etc.) still running on every API request

A REST API response from /wp/v2/posts boots PHP, initializes WordPress, loads all active plugins, queries MySQL, and formats a JSON response. On shared hosting, that costs 200–800ms per request before any network overhead.

Purpose-built headless CMS platforms typically have a lighter runtime specifically optimized for API responses. The PHP overhead isn't inherently bad, but it means you're paying for a full traditional CMS server even when your frontend is static.

2. No native rate limiting

WordPress REST API has no built-in rate limiting. If your frontend hammers the API (or a bot does), you're relying on your web server or a CDN to protect WordPress. Every request hits PHP and MySQL directly unless you've layered in a cache plugin or a reverse proxy.

Some headless CMS platforms include rate limiting at the API layer out of the box. Others (including self-hosted ones) let you configure it at the server level. But with WordPress, it's your problem to solve every time.

3. Plugin dependency hell for advanced features

Need custom post types exposed via the API? You need either code (register CPTs with show_in_rest => true) or a plugin. Need custom fields on those CPTs? Advanced Custom Fields (ACF), and then either ACF PRO's REST API addon or yet another plugin. Want field validation? Another plugin or custom code.

On a pure WordPress site, this plugin dependency is normal. In a headless setup, it multiplies fast. Each plugin adds PHP load on every API request. Plugin updates can break your API responses. A single poorly written plugin can add 300ms to every call.

One developer on the /r/webdev subreddit described it well:

"We were running 23 plugins just to get our headless WordPress setup to do what we needed. Three of them hadn't been updated in two years. We updated one plugin and our custom fields disappeared from the REST API response for 6 hours until we figured out it was a dependency conflict."

4. Authentication is harder than it looks

Application passwords are the "modern" WordPress auth method, but they're HTTP Basic Auth with the WordPress credentials baked in. You're sending a base64-encoded username:password on every authenticated request. That's fine with HTTPS, but it means every frontend environment (local, staging, production) needs real WordPress credentials, which creates credential management overhead.

JWT is cleaner but requires a plugin that isn't officially maintained by WordPress core. The most popular one (JWT Authentication for WP REST API) hasn't had a major update in years.

Contrast this with headless CMS platforms that typically issue API tokens scoped to read-only or write access, with rotation, expiry, and environment-specific keys built into the admin UI.

5. No signed webhooks for content events

If your frontend needs to know when content changes — to trigger a revalidation or a rebuild — WordPress's built-in webhook support is minimal. You either use a plugin like WP Webhooks, or you poll the API on a schedule, or you write custom hooks.

Purpose-built headless CMS platforms typically ship HMAC-signed webhooks as a first-class feature. Your frontend registers a URL, the CMS signs every payload with a secret, and you verify the signature before triggering a rebuild. Secure, reliable, and zero plugin overhead.

For example, UnfoldCMS ships HMAC-signed webhooks out of the box — you register webhook endpoints in the admin and each delivery includes an X-Unfold-Signature header for verification. No plugins, no cron polling.

6. The REST API doesn't expose everything

Custom blocks from Gutenberg? Not easily accessible via the REST API without serializing block HTML and parsing it client-side. Block metadata? Hidden inside serialized PHP. Post revisions? Technically exposed at /wp/v2/posts/{id}/revisions but limited.

If your content model leans heavily on Gutenberg blocks, extracting structured data for a frontend renderer is non-trivial. Many teams end up writing custom REST routes to flatten block data, which is effectively building an API layer on top of an API layer.


What a Purpose-Built Headless CMS Gives You Instead

A CMS designed API-first treats the API as the core product, not a layer added on top. The differences that matter most:

Structured content modeling — Instead of WordPress post types + custom fields via plugins, you define content models directly in the admin. Fields, validation, and relationships are first-class concepts, not extensions.

Lightweight API runtime — The API server doesn't boot a full CMS on every request. Responses are typically faster because the system was built specifically for API output.

Token-based auth designed for APIs — Sanctum tokens, API keys, or JWT issued by the CMS itself. Scoped to read-only for public endpoints, write-capable for authenticated ones. No credentials shared between environments.

Signed webhooks, built-in — Content change events delivered to your frontend automatically, with signature verification. Rebuild triggers work reliably.

No plugin dependency — The feature set is what ships with the CMS. No ecosystem of third-party plugins with unpredictable maintenance schedules.

That said, purpose-built headless CMS platforms aren't universally better. They make different tradeoffs.

For UnfoldCMS specifically, it's worth being upfront about what it doesn't have yet: no GraphQL endpoint (REST only), no official WordPress importer (migration is a manual data export/import process), no revision history or version diffing on content, and no real-time collaborative editing. If those features are blockers, check whether they exist in whichever platform you're evaluating — they're not universal.

You can explore the full feature set to see what's actually shipped versus what's on the roadmap.


WordPress REST API vs Headless CMS: Side-by-Side


When to Stay on the WordPress REST API

Switching has real costs. The WordPress REST API is the right choice when:

Your content team knows WordPress. Editors who know Gutenberg, media library workflows, and WordPress roles are productive. Moving them to a new CMS means retraining — and sometimes the productivity loss isn't worth it.

You're already heavily invested in the plugin ecosystem. If WooCommerce, membership plugins, or form plugins power core business logic, extracting those features from WordPress is a significant project. The REST API lets you keep those systems while adding a headless frontend.

The existing setup already works at your scale. If your site handles 50,000 visits/month without performance problems, the overhead argument doesn't apply. Don't fix what isn't broken.

You have a tight deadline. Migrating to a new CMS, rebuilding content models, and moving data is weeks of work. If you have two weeks to ship a new frontend, WordPress REST API + a new Next.js layer might be the pragmatic call.

Your content model is shallow. Simple blog posts with title, body, and featured image? WordPress REST API handles that trivially. Content modeling complexity is where WordPress starts to creak.


When Switching Makes Sense

The developers who most often switch away from WordPress REST API share a few patterns:

When plugin dependencies become unstable. If you've had API responses break because of a plugin update, you've already paid the cost that moving platforms was supposed to avoid. At that point, the migration cost starts looking more attractive.

When your auth setup requires credential sprawl. Managing WordPress application passwords across local, staging, and production environments, and rotating them when team members leave, gets complicated fast. Token-based auth with scoped keys is genuinely easier.

When you need reliable content webhooks. Polling the API every 30 seconds to check for new posts isn't a sustainable rebuild trigger. If Jamstack-style ISR or build-on-change workflows are important to you, native signed webhooks are worth the migration cost.

When performance at the API layer matters. High-traffic sites that use WordPress REST API for SSR (not just static) can see the PHP boot cost add up. Moving to a leaner API runtime reduces time-to-first-byte on dynamic routes.

When the content model outgrows what WordPress CPTs + ACF can reasonably express. Complex nested relationships, multi-dimensional taxonomy, or content types with conditional fields get messy in WordPress. A purpose-built CMS with a proper content modeling UI handles this more cleanly.


Migration Path: What "Switching" Actually Looks Like

There's no magic migration tool that reads your WordPress database and populates a new headless CMS. Every platform I've seen, including UnfoldCMS, requires a manual migration process.

The practical steps:

  1. Export your content. WordPress exports XML via Tools → Export. Most headless CMS platforms don't import WordPress XML directly — you'll parse it and load via API or direct database insert.
  2. Rebuild your content model. Map your post types, custom fields, and taxonomies to the new platform's content types. This is where you clean up years of accumulated schema debt.
  3. Migrate media. Images need to move to the new media library or a CDN. Hardcoded URLs in post content need updating.
  4. Preserve SEO. Keep your slugs, set up 301 redirects for anything that changes, migrate your meta titles and descriptions.
  5. Test your API consumption. Your frontend's fetch calls will have different endpoint shapes. Update and test each one.

The WordPress migration guide at /migrate-from-wordpress covers the SEO-preservation steps in detail — slug mapping, redirect setup, and what to do with Yoast metadata during the move.

Plan for the migration taking 2–4 weeks for a medium-sized site (50–500 posts, 2–5 custom post types). Larger sites with complex plugin integrations take longer.


FAQ

Does WordPress REST API support GraphQL?

Not natively. You need the WPGraphQL plugin, which adds a separate GraphQL endpoint at /graphql. WPGraphQL is well-maintained and widely used — it's a legitimate option if you specifically want GraphQL. Purpose-built headless CMS platforms vary: some (Contentful, Hygraph) support GraphQL natively, others (including UnfoldCMS) are REST-only.

Is the WordPress REST API fast enough for production?

For static site generation (Gatsby, Next.js getStaticProps, Astro with build-time fetches) — yes. You build once and the API calls happen at build time, not per user request. For SSR (server-side rendering on each request), the PHP boot cost can add 200–600ms per page render. That's noticeable in Time to First Byte metrics.

What's the biggest practical difference between WordPress REST API and a purpose-built headless CMS?

The difference developers talk about most isn't performance — it's the mental overhead of maintaining a full WordPress install, plugin stack, and security patches while also managing a modern frontend stack. Purpose-built headless CMS platforms reduce the backend surface area significantly. You trade WordPress ecosystem breadth for operational simplicity.

Do I need a developer to use a headless CMS?

Yes, typically. Headless CMS platforms are built for teams that have developers handling the frontend. The CMS manages content; developers build what renders it. If you don't have a developer and need a website that works out of the box, WordPress with a traditional theme is still the more practical choice.

Can I run a headless CMS on my own server?

Yes — this is actually one of the stronger arguments for self-hosted headless CMS platforms. You keep your data, control your infrastructure, and avoid SaaS pricing that scales with traffic or content volume. UnfoldCMS, Strapi, and Payload all support self-hosting. The complete guide to headless CMS covers infrastructure options in detail.

What happens to my WordPress plugins when I go headless?

They stop being relevant. Moving to a headless CMS means leaving the WordPress plugin ecosystem entirely. SEO via Yoast becomes your CMS's meta fields + sitemap generation. Forms become standalone form tools or custom API endpoints. Caching becomes a CDN concern. Each plugin dependency gets replaced — or dropped if it was never actually necessary.


The Bottom Line

The WordPress REST API is real, functional, and still the right choice for teams already deep in the WordPress ecosystem. Don't let anyone tell you it's broken — it's not.

What it is: a REST interface layered on a traditional CMS that wasn't designed for decoupled architectures. For teams pushing into complex content models, reliable rebuild triggers, or cleaner auth patterns, that fundamental mismatch creates ongoing maintenance overhead.

Purpose-built headless CMS platforms make different tradeoffs. They're lighter on the API layer, designed for token auth, and ship webhooks as a first-class feature. The cost is losing the WordPress plugin ecosystem and doing a manual migration.

If you're in the middle — hitting the limits of WordPress REST API but not sure whether a switch is worth it — check what specifically is causing friction. Plugin instability, auth complexity, and webhook reliability are solvable by switching platforms. Team familiarity with WordPress and deep plugin dependencies are not.

Want to see what a purpose-built headless CMS actually ships with? The features page has the full breakdown — including what's live and what's not yet built.


Hamed Pakdaman is the developer behind UnfoldCMS, a self-hosted headless CMS built on Laravel and React. He's been building with WordPress since 2012 and started UnfoldCMS after spending too many hours debugging plugin conflicts on client projects.

Sources: WordPress REST API Handbook (developer.wordpress.org), Patchstack WordPress Security Report 2024, Web Almanac HTTP Archive 2024 CMS chapter, developer discussions on r/webdev and r/PHP.

Free & Open Source

Own your CMS. No subscriptions.

Unfold CMS is free to download and self-host. Built on Laravel + React, full source code included.

Share this post:

Discussion

Comments (0)

Leave a Comment

Please log in to leave a comment.

Don't have an account? Register here

No comments yet. Be the first to share your thoughts!

Keep Reading

Related Posts

Back to all posts