{"id":363437,"date":"2026-10-07T12:20:19","date_gmt":"2026-10-07T12:20:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/headless-fast-api\/"},"modified":"2026-10-09T10:19:47","modified_gmt":"2026-10-09T10:19:47","slug":"code-and-core-headless-fast-api","status":"publish","type":"plugin","link":"https:\/\/ary.wordpress.org\/plugins\/code-and-core-headless-fast-api\/","author":22039652,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Code and core Headless Fast API - Standalone, cacheable REST endpoints that skip the core load cycle","header_author":"Code and core","header_description":"Fast, cacheable headless API endpoints answered before the theme, the REST API and WP_Query load.","assets_banners_color":"10192d","last_updated":"2026-10-09 10:19:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/codeandcore.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":169,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"codeandcore","date":"2026-10-07 12:19:59","revision":3732553},"1.0.1":{"tag":"1.0.1","author":"codeandcore","date":"2026-10-09 10:19:47","revision":3736390}},"upgrade_notice":{"1.0.1":"<p>Adds anonymous usage-data telemetry (opt-in) and a deactivation feedback form. No functional changes to API endpoints. Update recommended.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3732553,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3732553,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3732553,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3732553,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3732553,"resolution":"1","location":"assets","locale":"","width":1440,"height":900},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3732553,"resolution":"10","location":"assets","locale":"","width":1901,"height":866},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3732553,"resolution":"11","location":"assets","locale":"","width":1440,"height":900},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3732553,"resolution":"12","location":"assets","locale":"","width":1440,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3732553,"resolution":"2","location":"assets","locale":"","width":1440,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3732553,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3732553,"resolution":"4","location":"assets","locale":"","width":1440,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3732553,"resolution":"5","location":"assets","locale":"","width":1440,"height":900},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3732553,"resolution":"6","location":"assets","locale":"","width":1896,"height":869},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3732553,"resolution":"7","location":"assets","locale":"","width":1882,"height":874},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3732553,"resolution":"8","location":"assets","locale":"","width":1440,"height":900},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3732553,"resolution":"9","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"<strong>Dashboard: API endpoints reference.<\/strong> Every active endpoint (home, posts, pages, media, custom post types, taxonomies, users and ACF options pages) with its full URL and a one-click Copy button.","2":"<strong>Dashboard: built-in request tester.<\/strong> Open any endpoint, fill in path and query parameters (page, per_page, search, include, exclude, order, orderby), press \"Execute Request\" and see the status, request URL and live JSON response.","3":"<strong>Fast Mode popup.<\/strong> Shown once after activation. Fast Mode is only turned on if you click \"Enable Fast Mode\", and it can be changed later under Advanced.","4":"<strong>Entities.<\/strong> Switch each public post type, taxonomy and the Users endpoint on or off with one click.","5":"<strong>Schema: live response builder.<\/strong> Pick an endpoint from the dropdown, add an ID or slug, and press Send to load a live sample of the real response.","6":"<strong>Schema: field exclusion tree.<\/strong> Switch any field off, including nested ACF repeaters, groups and flexible-content layouts. Turning off a parent turns off all of its children.","7":"<strong>Schema: query parameters and custom fields.<\/strong> Add, reorder and reset query parameters, and expose post meta keys as string, integer, boolean or JSON values.","8":"<strong>Integrations.<\/strong> Status cards and switches for Yoast SEO and Advanced Custom Fields, with Strict REST API Parity and Force Sync for the ACF field map.","9":"<strong>Advanced: performance and Fast Mode.<\/strong> Disk caching, Clear Cache on Save, and Fast Mode status with an enable or disable button.","10":"<strong>Advanced: import, export and reset.<\/strong> Download a JSON backup of the whole configuration, restore it on any site, or reset to factory defaults.","11":"<strong>Dark and light theme.<\/strong> Switch the admin screens between dark and light with the toggle on the Dashboard.","12":"<strong>JSON response.<\/strong> A sample <code>\/posts<\/code> response showing REST-style fields, the <code>acf<\/code> object, <code>yoast_head_json<\/code> and the <code>count<\/code>, <code>total<\/code> and <code>total_pages<\/code> totals."}},"plugin_section":[],"plugin_tags":[2211,181897,141196,247,23853],"plugin_category":[54,59],"plugin_contributors":[240189],"plugin_business_model":[],"class_list":["post-363437","plugin","type-plugin","status-publish","hentry","plugin_tags-acf","plugin_tags-decoupled","plugin_tags-headless","plugin_tags-performance","plugin_tags-rest-api","plugin_category-security-and-spam-protection","plugin_category-utilities-and-tools","plugin_contributors-codeandcore","plugin_committers-codeandcore"],"banners":{"banner":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/banner-772x250.png?rev=3732553","banner_2x":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/banner-1544x500.png?rev=3732553","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/icon-128x128.png?rev=3732553","icon_2x":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/icon-256x256.png?rev=3732553","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-1.png?rev=3732553","caption":"<strong>Dashboard: API endpoints reference.<\/strong> Every active endpoint (home, posts, pages, media, custom post types, taxonomies, users and ACF options pages) with its full URL and a one-click Copy button."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-2.png?rev=3732553","caption":"<strong>Dashboard: built-in request tester.<\/strong> Open any endpoint, fill in path and query parameters (page, per_page, search, include, exclude, order, orderby), press \"Execute Request\" and see the status, request URL and live JSON response."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-3.png?rev=3732553","caption":"<strong>Fast Mode popup.<\/strong> Shown once after activation. Fast Mode is only turned on if you click \"Enable Fast Mode\", and it can be changed later under Advanced."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-4.png?rev=3732553","caption":"<strong>Entities.<\/strong> Switch each public post type, taxonomy and the Users endpoint on or off with one click."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-5.png?rev=3732553","caption":"<strong>Schema: live response builder.<\/strong> Pick an endpoint from the dropdown, add an ID or slug, and press Send to load a live sample of the real response."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-6.png?rev=3732553","caption":"<strong>Schema: field exclusion tree.<\/strong> Switch any field off, including nested ACF repeaters, groups and flexible-content layouts. Turning off a parent turns off all of its children."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-7.png?rev=3732553","caption":"<strong>Schema: query parameters and custom fields.<\/strong> Add, reorder and reset query parameters, and expose post meta keys as string, integer, boolean or JSON values."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-8.png?rev=3732553","caption":"<strong>Integrations.<\/strong> Status cards and switches for Yoast SEO and Advanced Custom Fields, with Strict REST API Parity and Force Sync for the ACF field map."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-9.png?rev=3732553","caption":"<strong>Advanced: performance and Fast Mode.<\/strong> Disk caching, Clear Cache on Save, and Fast Mode status with an enable or disable button."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-10.png?rev=3732553","caption":"<strong>Advanced: import, export and reset.<\/strong> Download a JSON backup of the whole configuration, restore it on any site, or reset to factory defaults."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-11.png?rev=3732553","caption":"<strong>Dark and light theme.<\/strong> Switch the admin screens between dark and light with the toggle on the Dashboard."},{"src":"https:\/\/ps.w.org\/code-and-core-headless-fast-api\/assets\/screenshot-12.png?rev=3732553","caption":"<strong>JSON response.<\/strong> A sample <code>\/posts<\/code> response showing REST-style fields, the <code>acf<\/code> object, <code>yoast_head_json<\/code> and the <code>count<\/code>, <code>total<\/code> and <code>total_pages<\/code> totals."}],"raw_content":"<!--section=description-->\n<p><strong>Your headless front end is only as fast as the API behind it.<\/strong> Code and Core Headless Fast API gives your Next.js, Nuxt, Astro, Gatsby, SvelteKit, React Native or Flutter app a WordPress API built for speed. It does not run the whole of WordPress on every request.<\/p>\n\n<p>Each request to the built-in WordPress REST API starts the full WordPress stack: every active plugin, the theme, <code>init<\/code>, the REST server, its controllers and <code>WP_Query<\/code>. On a typical site with 20 to 40 plugins, most of that work has nothing to do with the JSON you asked for. This plugin cuts that work out:<\/p>\n\n<ul>\n<li>It answers <strong>before the theme, <code>init<\/code>, the REST API and <code>WP_Query<\/code> load<\/strong>.<\/li>\n<li>In <strong>Fast Mode<\/strong>, it answers <strong>before any regular plugin loads<\/strong>.<\/li>\n<li>It builds each response with <strong>a small number of batched, prepared SQL queries<\/strong>.<\/li>\n<li>It can serve repeat requests <strong>from one cached JSON file on disk<\/strong>.<\/li>\n<\/ul>\n\n<p>Your front end gets the familiar REST-style data, including ACF fields, Yoast SEO metadata and resolved relationships, with far less work on the server. The result is lower response times, less CPU and database load, and quicker static builds and server-side rendering.<\/p>\n\n<p>The built-in REST API is not changed or disabled. This plugin adds its own read-only namespace, <code>\/code-and-core-headless-fast-api\/v1\/<\/code>, next to it, so you can switch over one endpoint at a time.<\/p>\n\n<h4>Why choose Headless Fast API?<\/h4>\n\n<ul>\n<li><strong>Built for headless.<\/strong> Every design decision serves one job: getting content to a decoupled front end as quickly as possible.<\/li>\n<li><strong>Faster, especially on busy sites.<\/strong> Response time no longer grows with each plugin you install (Fast Mode).<\/li>\n<li><strong>Lighter payloads.<\/strong> Remove every field your front end does not use. Smaller JSON means faster transfers, faster parsing and faster pages.<\/li>\n<li><strong>Fewer round trips.<\/strong> Resolve ACF relationships, images, terms and users inside one response, so you don't need ten follow-up requests.<\/li>\n<li><strong>Easy to adopt.<\/strong> Items use the REST API's field names (<code>title.rendered<\/code>, <code>content.rendered<\/code>, <code>featured_media<\/code>, \u2026), so existing front-end code needs only small changes.<\/li>\n<li><strong>No setup.<\/strong> No server rules, no extra entry point, no Node.js service, no GraphQL schema to maintain. Activate, choose your content, copy the URLs.<\/li>\n<li><strong>Safe by design.<\/strong> Read-only, <code>GET<\/code> only, prepared SQL, an allowlist of entities, and capability and nonce checks on every admin action.<\/li>\n<li><strong>Clean to remove.<\/strong> Deactivating removes the Fast Mode file. Deleting removes every option and data file the plugin created.<\/li>\n<\/ul>\n\n<h4>Built-in REST API compared with Headless Fast API<\/h4>\n\n<ul>\n<li><strong>Plugins loaded per request:<\/strong> REST API: all of them. Headless Fast API: all of them, or none in Fast Mode.<\/li>\n<li><strong>Theme and <code>init<\/code>:<\/strong> REST API: loaded. Headless Fast API: skipped.<\/li>\n<li><strong>Query engine:<\/strong> REST API: <code>WP_Query<\/code> and REST controllers. Headless Fast API: direct, batched, prepared SQL.<\/li>\n<li><strong>Response cache:<\/strong> REST API: none built in. Headless Fast API: optional disk cache, with a <code>HIT<\/code>\/<code>MISS<\/code> header.<\/li>\n<li><strong>Removing fields:<\/strong> REST API: <code>_fields<\/code> on each request. Headless Fast API: saved per endpoint in the admin, including nested ACF fields and flexible-content layouts.<\/li>\n<li><strong>ACF relationships:<\/strong> REST API: IDs only, so you need extra requests. Headless Fast API: resolved into full objects in the same response.<\/li>\n<li><strong>Yoast SEO head:<\/strong> REST API: provided by Yoast. Headless Fast API: built from Yoast's own indexable data, without loading Yoast.<\/li>\n<li><strong>List totals:<\/strong> REST API: <code>X-WP-Total<\/code> headers. Headless Fast API: <code>total<\/code> and <code>total_pages<\/code> in the JSON body.<\/li>\n<li><strong>Server configuration:<\/strong> neither needs any.<\/li>\n<\/ul>\n\n<h4>Perfect for<\/h4>\n\n<ul>\n<li>Next.js, Nuxt, Remix and SvelteKit sites that use server-side rendering or incremental static regeneration.<\/li>\n<li>Static builds with Astro, Gatsby, Eleventy or Hugo, where builds that fetch thousands of pages finish sooner.<\/li>\n<li>React Native and Flutter apps that need small, predictable JSON.<\/li>\n<li>Agencies running content-heavy WordPress back ends with many plugins.<\/li>\n<li>Any site where the REST API has become the slowest part of the stack.<\/li>\n<\/ul>\n\n<h4>Quick start in 60 seconds<\/h4>\n\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>In the popup, click <strong>Enable Fast Mode<\/strong> (recommended).<\/li>\n<li>Under <strong>Entities<\/strong>, choose your post types and taxonomies, then click <strong>Save &amp; Sync Schemas<\/strong>.<\/li>\n<li>Open the <strong>Dashboard<\/strong>, copy an endpoint URL, and fetch it from your front end.<\/li>\n<\/ol>\n\n<h4>Key features<\/h4>\n\n<ul>\n<li><strong>Batched SQL.<\/strong> Meta, terms, authors, images and Yoast data for a whole page of items are loaded together, not one query per item.<\/li>\n<li><strong>Disk cache.<\/strong> A repeat request is served from one JSON file.<\/li>\n<li><strong>Field exclusion.<\/strong> Remove any field per endpoint and per context (list or single), down to ACF sub-fields and flexible-content layouts.<\/li>\n<li><strong>Resolve and append rules.<\/strong> Turn ACF post, term, media and user IDs into full objects, or add extra data such as the latest posts.<\/li>\n<li><strong>ACF and Yoast SEO.<\/strong> <code>acf<\/code> (repeaters, groups, flexible content, images, options pages), <code>yoast_head<\/code> and <code>yoast_head_json<\/code>.<\/li>\n<li><strong>Custom meta.<\/strong> Expose any post meta key as a string, integer, boolean or JSON value.<\/li>\n<li><strong>Live schema builder and API explorer.<\/strong> Test any endpoint from the admin and switch fields on or off in the live response tree.<\/li>\n<li><strong>Import, export and reset<\/strong> of the whole configuration as JSON.<\/li>\n<\/ul>\n\n<h4>Fast Mode (optional)<\/h4>\n\n<p>On sites with many plugins, most of a request's time is spent loading those plugins. Fast Mode answers API requests before any regular plugin loads.<\/p>\n\n<p>Fast Mode is off until an administrator turns it on. After activation the plugin asks once, in a popup on its Dashboard screen, and nothing is installed unless the administrator clicks \"Enable Fast Mode\". It can be turned on or off at any time under <strong>Advanced<\/strong>.<\/p>\n\n<p>Turning it on writes one small file, <code>wp-content\/mu-plugins\/0-cachfa-fast-path.php<\/code>, using the WordPress filesystem API. That file:<\/p>\n\n<ul>\n<li>acts only on requests to <code>\/code-and-core-headless-fast-api\/v1\/...<\/code> and does nothing on any other request;<\/li>\n<li>does nothing if this plugin is deactivated or deleted;<\/li>\n<li>is removed when Fast Mode is turned off or this plugin is deactivated;<\/li>\n<li>is rewritten automatically after a plugin update;<\/li>\n<li>is never written over or deleted if a file of the same name was not created by this plugin.<\/li>\n<\/ul>\n\n<p>Because other plugins do not run on API requests in Fast Mode, output they add through filters at runtime is not included in API responses. Data they save to the database is included.<\/p>\n\n<h4>Endpoints<\/h4>\n\n<p>All endpoints are <code>GET<\/code> only and start with:<\/p>\n\n<pre><code>https:\/\/example.com\/code-and-core-headless-fast-api\/v1\/\n<\/code><\/pre>\n\n<ul>\n<li><code>home<\/code>: the static front page (Settings &gt; Reading), or the latest posts if the front page shows posts.<\/li>\n<li><code>posts<\/code>, <code>posts\/{id_or_slug}<\/code>: posts.<\/li>\n<li><code>pages<\/code>, <code>pages\/{id_or_slug}<\/code>: pages.<\/li>\n<li><code>media<\/code>, <code>media\/{id_or_slug}<\/code>: attachments.<\/li>\n<li><code>{post_type}s<\/code>, <code>{post_type}s\/{id_or_slug}<\/code>: any public custom post type you enable (for example <code>products<\/code>, <code>products\/blue-shirt<\/code>).<\/li>\n<li><code>categories<\/code>, <code>categories\/{id_or_slug}<\/code>: categories.<\/li>\n<li><code>tags<\/code>, <code>tags\/{id_or_slug}<\/code>: tags.<\/li>\n<li><code>{taxonomy}s<\/code>, <code>{taxonomy}s\/{id_or_slug}<\/code>: any public custom taxonomy you enable.<\/li>\n<li><code>users<\/code>, <code>users\/{id_or_slug}<\/code>: users (can be turned off under Entities).<\/li>\n<li><code>options\/{options_page_slug}<\/code>: fields from an ACF options page (needs ACF with options pages).<\/li>\n<\/ul>\n\n<p>The Dashboard screen lists the exact URL of every active endpoint on your site.<\/p>\n\n<p>Endpoints are available only for the post types and taxonomies you enable under <strong>Entities<\/strong>. Any other type returns a <code>404<\/code> with a JSON error.<\/p>\n\n<h4>Query parameters<\/h4>\n\n<p>Lists take comma-separated values, and <code>include[]=1&amp;include[]=2<\/code> also works.<\/p>\n\n<ul>\n<li><strong>Posts, pages, media and custom post types:<\/strong> <code>page<\/code>, <code>per_page<\/code> (1\u2013100, default 10), <code>offset<\/code>, <code>search<\/code>, <code>slug<\/code>, <code>include<\/code>, <code>exclude<\/code>, <code>author<\/code>, <code>author_exclude<\/code>, <code>parent<\/code>, <code>parent_exclude<\/code>, <code>menu_order<\/code>, <code>after<\/code>, <code>before<\/code>, <code>modified_after<\/code>, <code>modified_before<\/code>, <code>sticky<\/code>, <code>categories<\/code>, <code>categories_exclude<\/code>, <code>tags<\/code>, <code>tags_exclude<\/code>, <code>{taxonomy}<\/code>, <code>{taxonomy}_exclude<\/code>, <code>tax_relation<\/code> (<code>AND<\/code>\/<code>OR<\/code>), <code>media_type<\/code>, <code>mime_type<\/code>, <code>password<\/code>, <code>orderby<\/code> (<code>date<\/code>, <code>title<\/code>, <code>id<\/code>, <code>modified<\/code>, <code>author<\/code>, <code>parent<\/code>, <code>slug<\/code>, <code>menu_order<\/code>, <code>include<\/code>, <code>include_slugs<\/code>) and <code>order<\/code> (<code>DESC<\/code>\/<code>ASC<\/code>).<\/li>\n<li><strong>Taxonomies:<\/strong> <code>page<\/code>, <code>per_page<\/code>, <code>search<\/code>, <code>slug<\/code>, <code>include<\/code>, <code>exclude<\/code>, <code>parent<\/code>, <code>hide_empty<\/code>, <code>post<\/code>, <code>orderby<\/code> (<code>name<\/code>, <code>id<\/code>, <code>count<\/code>, <code>slug<\/code>) and <code>order<\/code>.<\/li>\n<li><strong>Users:<\/strong> <code>page<\/code>, <code>per_page<\/code>, <code>offset<\/code>, <code>search<\/code>, <code>slug<\/code>, <code>include<\/code>, <code>exclude<\/code>, <code>roles<\/code>, <code>capabilities<\/code>, <code>who=authors<\/code>, <code>has_published_posts<\/code>, <code>orderby<\/code> (<code>name<\/code>, <code>id<\/code>, <code>registered_date<\/code>, <code>slug<\/code>, <code>url<\/code>, <code>include<\/code>) and <code>order<\/code>.<\/li>\n<\/ul>\n\n<h4>Response format<\/h4>\n\n<p>A <strong>single item<\/strong> (<code>\/posts\/hello-world<\/code>) returns the item object, in the WordPress REST API format. Single posts also contain <code>pagination.previous_post<\/code> and <code>pagination.next_post<\/code> (<code>id<\/code>, <code>title<\/code>, <code>slug<\/code>) to make \"previous \/ next\" links easy.<\/p>\n\n<p>A <strong>list<\/strong> (<code>\/posts?per_page=5<\/code>) returns a wrapper object instead of a bare array, so you get the totals without reading headers:<\/p>\n\n<pre><code>{ \"type\": \"post\", \"count\": 5, \"total\": 42, \"total_pages\": 9, \"data\": [ ... ] }\n<\/code><\/pre>\n\n<p>Errors are JSON with the matching HTTP status, for example <code>{ \"code\": \"rest_post_invalid_id\", \"message\": \"Invalid post ID.\", \"data\": { \"status\": 404 } }<\/code>.<\/p>\n\n<p>Every response includes:<\/p>\n\n<ul>\n<li><code>Content-Type: application\/json; charset=UTF-8<\/code><\/li>\n<li><code>Access-Control-Allow-Origin: *<\/code> and <code>Access-Control-Allow-Methods: GET, OPTIONS<\/code>, so the API can be called from a browser on any domain. <code>OPTIONS<\/code> preflight requests are answered straight away.<\/li>\n<li><code>X-HeadlessFastAPI-Cache: HIT<\/code> or <code>MISS<\/code>, to show whether the disk cache was used.<\/li>\n<\/ul>\n\n<h4>Caching<\/h4>\n\n<p>When <strong>Enable Disk Caching<\/strong> is on (Advanced screen), each response is stored as a JSON file. The key is the full request URL, so every combination of path and query string is cached separately.<\/p>\n\n<ul>\n<li>Cached responses are kept for <strong>1 hour<\/strong>, then built again on the next request.<\/li>\n<li>The cache is <strong>not<\/strong> cleared automatically when content changes. To show changes at once, turn on <strong>Clear Cache on Save<\/strong> and save the settings, or wait for the hour to pass.<\/li>\n<\/ul>\n\n<h4>Advanced Custom Fields<\/h4>\n\n<p>With the ACF integration on, each item has an <code>acf<\/code> object built from the stored field values and a field map generated from your field groups. The map is rebuilt when you save the settings, when you press <strong>Force Sync<\/strong>, and whenever an ACF field group is saved.<\/p>\n\n<ul>\n<li>Repeaters, groups and flexible content are returned as nested arrays and objects. Flexible-content rows include <code>acf_fc_layout<\/code>.<\/li>\n<li>Image fields set to return an array come back with <code>url<\/code>, <code>alt<\/code>, <code>width<\/code>, <code>height<\/code>, <code>mime_type<\/code> and every generated size.<\/li>\n<li>Options pages are available at <code>options\/{menu_slug}<\/code>.<\/li>\n<li><strong>Resolve rules<\/strong> (Schema screen) turn ID fields such as Post Object, Relationship, Taxonomy, Image\/File and User into full objects in the same response, with an optional limit per field.<\/li>\n<li>Field exclusion paths can target a single flexible-content layout, for example <code>acf.sections.[hero_banner].subtitle<\/code>.<\/li>\n<\/ul>\n\n<h4>Yoast SEO<\/h4>\n\n<p>With Yoast SEO active and the integration on, post items include <code>yoast_head<\/code> (ready-made HTML for <code>&lt;head&gt;<\/code>) and <code>yoast_head_json<\/code> (title, description, robots, canonical, Open Graph, Twitter and schema.org graph). The data is read from Yoast's <code>yoast_indexable<\/code> table and settings. Make sure Yoast's SEO data optimisation (indexing) has run, so every post has an indexable.<\/p>\n\n<h4>Files this plugin writes<\/h4>\n\n<p>The plugin keeps its data in its own folder inside the uploads directory, resolved with <code>wp_upload_dir()<\/code>:<\/p>\n\n<pre><code>wp-content\/uploads\/code-and-core-headless-fast-api\/\n<\/code><\/pre>\n\n<ul>\n<li><code>api-schema.json<\/code>: the saved configuration (entities, integrations, exclusions and rules).<\/li>\n<li><code>api-schema-preview.json<\/code>: a temporary copy used by the Schema screen's live preview.<\/li>\n<li><code>acf-map.json<\/code>, <code>acf-options.json<\/code>: the generated ACF field maps.<\/li>\n<li><code>cache\/<\/code>: cached responses, when caching is on.<\/li>\n<\/ul>\n\n<p>If Fast Mode is on, it also writes the must-use plugin file described above.<\/p>\n\n<p>Deactivating the plugin removes the Fast Mode file. Deleting the plugin also removes its options (including the usage-data choice) and its folder in the uploads directory.<\/p>\n\n<h4>Security and privacy<\/h4>\n\n<ul>\n<li>The API is <strong>read-only<\/strong>. It only answers <code>GET<\/code> (and <code>OPTIONS<\/code>) requests and never writes content.<\/li>\n<li>Only the post types, taxonomies and entities you enable are served.<\/li>\n<li>Every request value is sanitized, and every value that reaches the database goes through <code>$wpdb-&gt;prepare()<\/code>, an allowlist or an integer cast.<\/li>\n<li>All admin actions check the <code>manage_options<\/code> capability and a nonce. Imported JSON is decoded and sanitized key by key.<\/li>\n<li>The API is public, like the core REST API. Use <strong>field exclusion<\/strong> to remove anything your front end does not need, and do not use the API to publish data that must stay private.<\/li>\n<li>User email addresses are not included in responses.<\/li>\n<\/ul>\n\n<h4>External services<\/h4>\n\n<p>This plugin does not load any scripts, stylesheets, fonts or images from a third-party server. All admin assets, including the Inter font, are bundled with the plugin.<\/p>\n\n<p><strong>Optional usage data (wordpress-plugins.pro).<\/strong> The plugin asks once, in a popup on its own screens, whether you want to share anonymous usage data. Nothing is sent unless an administrator clicks <strong>Allow<\/strong>, and you can turn it off at any time under <strong>Advanced &gt; Usage Data<\/strong>, where you can also preview the exact data.<\/p>\n\n<ul>\n<li>What is sent: a random installation ID (not linked to your site address), the plugin, WordPress and PHP versions, the site language, whether the site is a multisite, and the active theme's name and version. Your site address, content, users and visitors are not sent.<\/li>\n<li>When: once when you allow it, and when the plugin is activated, deactivated, updated or deleted.<\/li>\n<li>Where: <code>https:\/\/dashboard.wordpress-plugins.pro\/receiver.php<\/code>.<\/li>\n<\/ul>\n\n<p><strong>Deactivation feedback (wordpress-plugins.pro).<\/strong> When you deactivate the plugin from the Plugins screen, a form asks why. It is optional: <strong>Skip &amp; Deactivate<\/strong> sends nothing. If you submit it, the reason and comment you entered are sent with the same data as above to <code>https:\/\/dashboard.wordpress-plugins.pro\/deactive-receiver.php<\/code>. Your name and email address are included only if you tick the box allowing us to contact you.<\/p>\n\n<p>Both services are provided by wordpress-plugins.pro: <a href=\"https:\/\/www.wordpress-plugins.pro\/privacy-policy\">Privacy policy<\/a>, <a href=\"https:\/\/www.wordpress-plugins.pro\/terms-and-conditions\">Terms and conditions<\/a>.<\/p>\n\n<p>API responses include each author's avatar URL as returned by WordPress core's <code>get_avatar_url()<\/code>, exactly as the core REST API does. The plugin does not request these URLs itself, and the site's avatar settings and filters apply.<\/p>\n\n<h3>Credits<\/h3>\n\n<ul>\n<li>Inter font family, Copyright 2020 The Inter Project Authors (https:\/\/github.com\/rsms\/inter), licensed under the SIL Open Font License 1.1. Bundled in <code>assets\/fonts\/inter\/<\/code> with its license file.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/code-and-core-headless-fast-api<\/code>, or install the plugin from the <strong>Plugins &gt; Add New<\/strong> screen.<\/li>\n<li>Activate the plugin from the <strong>Plugins<\/strong> screen. You are taken to the plugin's Dashboard.<\/li>\n<li>Choose whether to turn on Fast Mode in the popup (you can change this later under <strong>Advanced<\/strong>).<\/li>\n<li>Under <strong>Entities<\/strong>, choose the post types, taxonomies and core entities to expose, then press <strong>Save &amp; Sync Schemas<\/strong>.<\/li>\n<li>Optional: under <strong>Schema<\/strong>, remove fields you do not need and add resolve rules for ACF relationships.<\/li>\n<li>Optional: under <strong>Advanced<\/strong>, turn on disk caching.<\/li>\n<li>Copy your endpoint URLs from the <strong>Dashboard<\/strong> into your front end.<\/li>\n<\/ol>\n\n<p>Permalinks must be set to anything other than \"Plain\" (Settings &gt; Permalinks), so that the <code>\/code-and-core-headless-fast-api\/v1\/<\/code> URLs reach WordPress. No server configuration is needed on Apache, Nginx, LiteSpeed or IIS.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20change%20or%20replace%20the%20built-in%20wordpress%20rest%20api%3F\"><h3>Does this change or replace the built-in WordPress REST API?<\/h3><\/dt>\n<dd><p>No. The built-in REST API is untouched and keeps working. This plugin adds its own endpoints under <code>\/code-and-core-headless-fast-api\/v1\/<\/code>.<\/p><\/dd>\n<dt id=\"are%20the%20responses%20the%20same%20as%20the%20wordpress%20rest%20api%3F\"><h3>Are the responses the same as the WordPress REST API?<\/h3><\/dt>\n<dd><p>Individual items use the same field names and structure (<code>title.rendered<\/code>, <code>content.rendered<\/code>, <code>featured_media<\/code>, <code>_links<\/code>, \u2026), plus <code>acf<\/code> and <code>yoast_head_json<\/code> when those integrations are on. Lists are wrapped in an object with <code>count<\/code>, <code>total<\/code>, <code>total_pages<\/code> and <code>data<\/code>, instead of a bare array with <code>X-WP-Total<\/code> headers.<\/p>\n\n<p>Content is returned as stored, with paragraphs added. Shortcodes and blocks are not run through <code>the_content<\/code> filters, because the theme and most plugins have not loaded yet. Render dynamic blocks on your front end, or use the core REST API for the few requests that need them.<\/p><\/dd>\n<dt id=\"does%20it%20support%20acf%3F\"><h3>Does it support ACF?<\/h3><\/dt>\n<dd><p>Yes. Turn on the ACF integration under <strong>Integrations<\/strong>. Fields, repeaters, groups, flexible content, images and options pages are supported, and relationship fields can be expanded with resolve rules.<\/p><\/dd>\n<dt id=\"does%20it%20support%20yoast%20seo%3F\"><h3>Does it support Yoast SEO?<\/h3><\/dt>\n<dd><p>Yes. With the Yoast integration on, items include <code>yoast_head<\/code> and <code>yoast_head_json<\/code>, built from Yoast's indexable data.<\/p><\/dd>\n<dt id=\"can%20i%20add%20my%20own%20post%20meta%20to%20the%20response%3F\"><h3>Can I add my own post meta to the response?<\/h3><\/dt>\n<dd><p>Yes. On the <strong>Schema<\/strong> screen, open the <strong>Custom Fields<\/strong> tab and add the meta key, its type (string, integer, boolean or JSON) and whether it holds a single value.<\/p><\/dd>\n<dt id=\"why%20don%27t%20my%20content%20changes%20show%20up%3F\"><h3>Why don't my content changes show up?<\/h3><\/dt>\n<dd><p>If disk caching is on, responses are kept for up to an hour. Save the settings with <strong>Clear Cache on Save<\/strong> turned on to clear the cache at once. Also check any CDN or proxy cache in front of the site.<\/p><\/dd>\n<dt id=\"i%20get%20a%20404%20for%20a%20post%20type%20or%20taxonomy.\"><h3>I get a 404 for a post type or taxonomy.<\/h3><\/dt>\n<dd><p>Make sure it is public and turned on under <strong>Entities<\/strong>, then save. The endpoint name is the post type or taxonomy name with an <code>s<\/code> added (for example <code>product<\/code> becomes <code>products<\/code>). Categories, tags, pages and media use <code>categories<\/code>, <code>tags<\/code>, <code>pages<\/code> and <code>media<\/code>.<\/p><\/dd>\n<dt id=\"the%20api%20returns%20my%20theme%27s%20html%20404%20page.\"><h3>The API returns my theme's HTML 404 page.<\/h3><\/dt>\n<dd><p>Check that permalinks are not set to \"Plain\", and that the URL contains <code>\/code-and-core-headless-fast-api\/v1\/<\/code>.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20change%20my%20server%20configuration%3F\"><h3>Do I need to change my server configuration?<\/h3><\/dt>\n<dd><p>No. Requests reach the API through WordPress's normal permalink handling on every server.<\/p><\/dd>\n<dt id=\"what%20if%20the%20must-use%20plugins%20folder%20is%20not%20writable%3F\"><h3>What if the must-use plugins folder is not writable?<\/h3><\/dt>\n<dd><p>Fast Mode cannot be turned on, and the plugin tells you so. The API keeps working and returns identical responses; it is answered on <code>plugins_loaded<\/code> instead, which is slower on sites with many plugins.<\/p><\/dd>\n<dt id=\"will%20other%20plugins%27%20changes%20appear%20in%20fast%20mode%3F\"><h3>Will other plugins' changes appear in Fast Mode?<\/h3><\/dt>\n<dd><p>Data that plugins save to the database is included. Output that plugins add at runtime through filters is not, because those plugins do not load on API requests in Fast Mode. If you need that output, leave Fast Mode off.<\/p><\/dd>\n<dt id=\"can%20i%20move%20my%20configuration%20to%20another%20site%3F\"><h3>Can I move my configuration to another site?<\/h3><\/dt>\n<dd><p>Yes. Use <strong>Download Backup<\/strong> under <strong>Advanced<\/strong> on the first site, then <strong>Restore<\/strong> on the second.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Each site has its own uploads folder, so each site keeps its own configuration and cache. Fast Mode checks both site-level and network-wide activation.<\/p><\/dd>\n<dt id=\"how%20do%20i%20call%20the%20api%20from%20my%20front%20end%3F\"><h3>How do I call the API from my front end?<\/h3><\/dt>\n<dd><p>Every list is in <code>data<\/code>, with totals beside it:<\/p>\n\n<pre><code>const API = 'https:\/\/example.com\/code-and-core-headless-fast-api\/v1';\nconst json = await fetch(API + '\/posts?per_page=6&amp;categories=3').then(r =&gt; r.json());\njson.data.forEach(post =&gt; console.log(post.title.rendered));\n<\/code><\/pre>\n\n<p>In Next.js (App Router), add <code>{ next: { revalidate: 60 } }<\/code> to <code>fetch()<\/code> to refresh the data every 60 seconds.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20the%20best%20performance%3F\"><h3>How do I get the best performance?<\/h3><\/dt>\n<dd><ul>\n<li>Turn on <strong>Fast Mode<\/strong>. It has the biggest effect on sites with many plugins.<\/li>\n<li>Remove fields you don't use on the <strong>Schema<\/strong> screen, for example <code>content<\/code> on list endpoints that only show cards.<\/li>\n<li>Use <strong>resolve rules<\/strong> instead of requesting related posts, images or terms one at a time.<\/li>\n<li>Turn on <strong>disk caching<\/strong>, and put a CDN in front of the API.<\/li>\n<li>Keep <code>per_page<\/code> small and paginate with <code>page<\/code> and <code>total_pages<\/code>.<\/li>\n<\/ul><\/dd>\n<dt id=\"what%20can%20i%20configure%20in%20the%20admin%3F\"><h3>What can I configure in the admin?<\/h3><\/dt>\n<dd><p>The <strong>Code and Core Headless Fast API<\/strong> menu has five screens:<\/p>\n\n<ul>\n<li><strong>Dashboard<\/strong>: every endpoint URL, with a request tester.<\/li>\n<li><strong>Entities<\/strong>: the post types, taxonomies and users to expose.<\/li>\n<li><strong>Schema<\/strong>: the live response builder, field exclusion, custom meta, and resolve and append rules.<\/li>\n<li><strong>Integrations<\/strong>: Yoast SEO and ACF.<\/li>\n<li><strong>Advanced<\/strong>: caching, Fast Mode, and import, export and reset.<\/li>\n<\/ul>\n\n<p>Press <strong>Save &amp; Sync Schemas<\/strong> to save. Saving also scans for new post types, taxonomies and ACF fields.<\/p><\/dd>\n<dt id=\"is%20the%20api%20public%3F%20do%20i%20need%20authentication%3F\"><h3>Is the API public? Do I need authentication?<\/h3><\/dt>\n<dd><p>The API is public and read-only, like the core REST API for published content. No API key or login is needed. Only the post types, taxonomies and entities you enable are served. Use field exclusion to remove anything your front end does not need.<\/p><\/dd>\n<dt id=\"can%20i%20write%20data%20%28create%2C%20update%20or%20delete%20posts%29%20through%20this%20api%3F\"><h3>Can I write data (create, update or delete posts) through this API?<\/h3><\/dt>\n<dd><p>No. The API is read-only and answers only <code>GET<\/code> requests. Use the built-in WordPress REST API for writes.<\/p><\/dd>\n<dt id=\"can%20i%20use%20both%20this%20api%20and%20the%20built-in%20rest%20api%20at%20the%20same%20time%3F\"><h3>Can I use both this API and the built-in REST API at the same time?<\/h3><\/dt>\n<dd><p>Yes. They are completely separate. Many sites use this plugin for public, read-heavy pages and the core REST API for previews, forms and authenticated actions.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20gutenberg%20blocks%3F\"><h3>Does it work with Gutenberg blocks?<\/h3><\/dt>\n<dd><p>Block content is returned as saved in the database, with the block comment markup and HTML included. Static blocks display correctly. Dynamic blocks (latest posts, query loops, shortcodes) are not rendered on the server, because the theme and most plugins have not loaded yet. Render those on your front end.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20builders%20such%20as%20elementor%20or%20divi%3F\"><h3>Does it work with page builders such as Elementor or Divi?<\/h3><\/dt>\n<dd><p>Page builders usually render their output through filters at runtime, which do not run here. This plugin works best with content from the block editor, the classic editor and ACF fields. For pages made with a page builder, use the core REST API or build those sections from ACF fields.<\/p><\/dd>\n<dt id=\"does%20it%20support%20woocommerce%20products%3F\"><h3>Does it support WooCommerce products?<\/h3><\/dt>\n<dd><p>Products are a public post type, so <code>products<\/code> can be turned on under Entities, and the title, content, excerpt, images, terms and selected meta (for example <code>_price<\/code> or <code>_sku<\/code> through Custom Fields) are returned. Calculated WooCommerce data such as variations, tax-inclusive prices and stock status is not included. Use the WooCommerce Store API for cart and checkout.<\/p><\/dd>\n<dt id=\"does%20it%20support%20wpml%20or%20polylang%3F\"><h3>Does it support WPML or Polylang?<\/h3><\/dt>\n<dd><p>There is no dedicated multilingual integration yet. Translated posts are returned like any other posts, but filtering by language is not available.<\/p><\/dd>\n<dt id=\"does%20it%20support%20custom%20post%20types%20and%20taxonomies%20made%20with%20cpt%20ui%2C%20acf%20or%20code%3F\"><h3>Does it support custom post types and taxonomies made with CPT UI, ACF or code?<\/h3><\/dt>\n<dd><p>Yes. Any public post type or taxonomy appears under Entities, however it was registered. Save once after adding a new one.<\/p><\/dd>\n<dt id=\"does%20it%20return%20drafts%2C%20scheduled%20or%20private%20posts%3F\"><h3>Does it return drafts, scheduled or private posts?<\/h3><\/dt>\n<dd><p>By default, only published posts (and attachments) are returned. Use WordPress's own preview tools or the authenticated core REST API for draft previews.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20the%20featured%20image%20url%3F\"><h3>How do I get the featured image URL?<\/h3><\/dt>\n<dd><p>Each post includes <code>featured_media<\/code> (the attachment ID). To get the full image object in the same response, add a <code>media<\/code> resolve rule for <code>featured_media<\/code> on the Schema screen, or request <code>\/media\/{id}<\/code>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20posts%20in%20a%20category%20by%20its%20slug%3F\"><h3>How do I get posts in a category by its slug?<\/h3><\/dt>\n<dd><p>First get the term ID from <code>\/categories\/{slug}<\/code>, then request <code>\/posts?categories={id}<\/code>. You can also cache the term ID on your front end.<\/p><\/dd>\n<dt id=\"how%20do%20i%20paginate%3F\"><h3>How do I paginate?<\/h3><\/dt>\n<dd><p>Use <code>page<\/code> and <code>per_page<\/code>. Every list response includes <code>total<\/code> and <code>total_pages<\/code>, so you can build pagination without reading headers.<\/p><\/dd>\n<dt id=\"how%20do%20i%20build%20a%20%22previous%20%2F%20next%20post%22%20link%3F\"><h3>How do I build a \"previous \/ next post\" link?<\/h3><\/dt>\n<dd><p>Single post responses include <code>pagination.previous_post<\/code> and <code>pagination.next_post<\/code>, each with <code>id<\/code>, <code>title<\/code> and <code>slug<\/code>, or <code>null<\/code> at either end.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20the%20home%20page%3F\"><h3>How do I get the home page?<\/h3><\/dt>\n<dd><p>Request <code>\/home<\/code>. It returns the static front page set under Settings &gt; Reading, or the latest posts if the front page shows posts.<\/p><\/dd>\n<dt id=\"how%20do%20i%20remove%20fields%20from%20the%20response%3F\"><h3>How do I remove fields from the response?<\/h3><\/dt>\n<dd><p>Open the Schema screen, choose the endpoint, press Send, then switch off fields in the response tree and press <strong>Save &amp; Sync Schemas<\/strong>. Exclusions are saved separately for list and single responses.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20%22resolve%20rules%22%20and%20%22append%20rules%22%3F\"><h3>What is the difference between \"resolve rules\" and \"append rules\"?<\/h3><\/dt>\n<dd><p>A resolve rule replaces an ID (or a list of IDs) already in the response with the full object, such as a related post, image, term or user. An append rule adds new data that is not in the item, such as a list of the latest posts, under a field you choose.<\/p><\/dd>\n<dt id=\"how%20long%20is%20the%20disk%20cache%20kept%2C%20and%20where%3F\"><h3>How long is the disk cache kept, and where?<\/h3><\/dt>\n<dd><p>Up to one hour, as JSON files in <code>wp-content\/uploads\/code-and-core-headless-fast-api\/cache\/<\/code>. Each unique URL, including its query string, is cached separately.<\/p><\/dd>\n<dt id=\"can%20i%20use%20a%20cdn%20or%20varnish%20in%20front%20of%20the%20api%3F\"><h3>Can I use a CDN or Varnish in front of the API?<\/h3><\/dt>\n<dd><p>Yes, and it is recommended. Responses are public, cookie-free <code>GET<\/code> requests with a JSON content type, which makes them easy to cache at the edge.<\/p><\/dd>\n<dt id=\"how%20do%20i%20know%20whether%20a%20response%20came%20from%20the%20cache%3F\"><h3>How do I know whether a response came from the cache?<\/h3><\/dt>\n<dd><p>Check the <code>X-HeadlessFastAPI-Cache<\/code> response header. It is <code>HIT<\/code> when the disk cache answered and <code>MISS<\/code> when the response was built.<\/p><\/dd>\n<dt id=\"can%20my%20front%20end%20on%20another%20domain%20call%20the%20api%3F\"><h3>Can my front end on another domain call the API?<\/h3><\/dt>\n<dd><p>Yes. Every response sends <code>Access-Control-Allow-Origin: *<\/code>, so browsers on any domain can call the API without a proxy.<\/p><\/dd>\n<dt id=\"will%20fast%20mode%20break%20my%20site%3F\"><h3>Will Fast Mode break my site?<\/h3><\/dt>\n<dd><p>No. The Fast Mode file acts only on URLs that contain <code>\/code-and-core-headless-fast-api\/v1\/<\/code>. Every other request, including the admin, the front end and the core REST API, loads exactly as before.<\/p><\/dd>\n<dt id=\"can%20i%20see%20the%20fast%20mode%20file%20in%20the%20plugins%20screen%3F\"><h3>Can I see the Fast Mode file in the Plugins screen?<\/h3><\/dt>\n<dd><p>Yes. It is listed under <strong>Plugins &gt; Must-Use<\/strong> as \"Code and Core Headless Fast API - Fast Mode\". Turn it off from the plugin's Advanced screen, not by editing the file.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20security%20or%20caching%20plugins%3F\"><h3>Does it work with security or caching plugins?<\/h3><\/dt>\n<dd><p>Yes. Page-caching plugins may also cache the API URLs, which is fine for public content. If a security plugin blocks unfamiliar URLs, allow the <code>\/code-and-core-headless-fast-api\/v1\/<\/code> path.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20object%20caching%20%28redis%20or%20memcached%29%3F\"><h3>Does it work with object caching (Redis or Memcached)?<\/h3><\/dt>\n<dd><p>Yes. The plugin works with or without a persistent object cache. Its own response cache is separate and stored on disk.<\/p><\/dd>\n<dt id=\"will%20my%20settings%20be%20kept%20when%20i%20update%20the%20plugin%3F\"><h3>Will my settings be kept when I update the plugin?<\/h3><\/dt>\n<dd><p>Yes. Settings are stored in the uploads folder and are not touched by updates. The Fast Mode file is rewritten for the new version automatically.<\/p><\/dd>\n<dt id=\"what%20are%20the%20server%20requirements%3F\"><h3>What are the server requirements?<\/h3><\/dt>\n<dd><p>WordPress 6.0 or later, PHP 7.4 or later, MySQL or MariaDB, and permalinks set to anything other than \"Plain\". Write access to the uploads folder is needed for settings and caching, and to <code>wp-content\/mu-plugins<\/code> for Fast Mode.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%20or%20report%20a%20bug%3F\"><h3>Where can I get support or report a bug?<\/h3><\/dt>\n<dd><p>Use the plugin's support forum on WordPress.org, or contact Code and Core through https:\/\/codeandcore.com. Please include your WordPress, PHP and plugin versions and the endpoint URL you are calling.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20deactivate%20or%20delete%20the%20plugin%3F\"><h3>What happens when I deactivate or delete the plugin?<\/h3><\/dt>\n<dd><p>Deactivating removes the Fast Mode file and stops the API. Deleting the plugin also removes its options and its <code>wp-content\/uploads\/code-and-core-headless-fast-api\/<\/code> folder.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added anonymous usage-data telemetry with a one-time opt-in popup (consent modal).<\/li>\n<li>Added deactivation feedback form (optional; skippable).<\/li>\n<li>Added Privacy Card under Advanced &gt; Usage Data to preview and withdraw consent at any time.<\/li>\n<li>Telemetry payload includes plugin, WordPress and PHP versions, site language, multisite flag, and active theme \u2014 no site URL or user data.<\/li>\n<li>Added AJAX handlers for opt-in, opt-out, and deactivation feedback submission.<\/li>\n<li>Added lifecycle tracking: events sent on activation, deactivation, update, and deletion.<\/li>\n<li>Languages folder initialised with placeholder index file.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Read-only JSON endpoints for posts, pages, media, custom post types, taxonomies, users and ACF options pages.<\/li>\n<li>Optional Fast Mode must-use loader.<\/li>\n<li>Disk response cache.<\/li>\n<li>Per-endpoint field exclusion, ACF resolve rules and append rules.<\/li>\n<li>ACF and Yoast SEO integrations.<\/li>\n<li>Import, export and factory reset of the configuration.<\/li>\n<\/ul>","raw_excerpt":"Fast, cacheable headless API endpoints answered before the theme, the REST API and WP_Query load.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/363437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=363437"}],"author":[{"embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/codeandcore"}],"wp:attachment":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=363437"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=363437"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=363437"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=363437"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=363437"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=363437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}