Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
September 26, 2021 20:15
February 28, 2017 16:58
February 28, 2017 16:58
October 23, 2020 23:00
June 25, 2020 17:06
June 10, 2023 17:34
March 6, 2022 16:20


Exposes Advanced Custom Fields Endpoints in the WordPress REST API


  1. Copy the acf-to-rest-api folder into your wp-content/plugins folder
  2. Activate the ACF to REST API plugin via the plugin admin page


/wp-json/acf/v3/posts πŸ†• βœ… ❌
/wp-json/acf/v3/posts/{id} βœ… βœ…
/wp-json/acf/v3/posts/{id}/{field-name} βœ… βœ…
/wp-json/acf/v3/pages πŸ†• βœ… ❌
/wp-json/acf/v3/pages/{id} βœ… βœ…
/wp-json/acf/v3/pages/{id}/{field-name} βœ… βœ…
/wp-json/acf/v3/users πŸ†• βœ… ❌
/wp-json/acf/v3/users/{id} βœ… βœ…
/wp-json/acf/v3/users/{id}/{field-name} βœ… βœ…
/wp-json/acf/v3/{taxonomy} πŸ†• βœ… ❌
/wp-json/acf/v3/{taxonomy}/{id} πŸ†• βœ… βœ…
/wp-json/acf/v3/{taxonomy}/{id}/{field-name} πŸ†• βœ… βœ…
/wp-json/acf/v3/comments πŸ†• βœ… ❌
/wp-json/acf/v3/comments/{id} βœ… βœ…
/wp-json/acf/v3/comments/{id}/{field-name} βœ… βœ…
/wp-json/acf/v3/media πŸ†• βœ… ❌
/wp-json/acf/v3/media/{id} βœ… βœ…
/wp-json/acf/v3/media/{id}/{field-name} βœ… βœ…
/wp-json/acf/v3/{post-type} πŸ†• βœ… ❌
/wp-json/acf/v3/{post-type}/{id} πŸ†• βœ… βœ…
/wp-json/acf/v3/{post-type}/{id}/{field-name} πŸ†• βœ… βœ…
/wp-json/acf/v3/options/{id} πŸ†• βœ… βœ…
/wp-json/acf/v3/options/{id}/{field-name} πŸ†• βœ… βœ…


Filter Argument(s)
acf/rest_api/id mixed ( string, integer, boolean ) $id
string $type πŸ†•
string $controller πŸ†•
acf/rest_api/key string $key
WP_REST_Request $request
string $type
acf/rest_api/item_permissions/get boolean $permission
WP_REST_Request $request
string $type
acf/rest_api/item_permissions/update boolean $permission
WP_REST_Request $request
string $type
acf/rest_api/{type}/prepare_item mixed ( array, boolean ) $item
WP_REST_Request $request
acf/rest_api/{type}/get_fields mixed ( array, WP_REST_Request ) $data
mixed ( WP_REST_Request, NULL ) $request
acf/rest_api/field_settings/show_in_rest πŸ†• boolean $show
acf/rest_api/field_settings/edit_in_rest πŸ†• boolean $edit

Basic example of how to use the filters, in this case I will set a new permission to get the fields

add_filter( 'acf/rest_api/item_permissions/get', function( $permission ) {
  return current_user_can( 'edit_posts' );
} );

Deprecated filters

Filter Argument(s)
acf/rest_api/type string $type
acf/rest_api/types array $types
acf/rest_api/default_rest_base boolean $default
string $type

Request API version

See below how to select the Request API Version.

  1. Open the plugins page;
  2. Click the settings link under the pluing name ( ACF to REST API );
  3. Select your version in the ACF to REST API session;
  4. Click in the button Save changes.

The other alternative is to define the constant ACF_TO_REST_API_REQUEST_VERSION in your wp-config.php


Field Settings

In this version is possible to configure the field options via admin.

The options are enabled using the filters below, by default theses options are disabled.

// Enable the option show in rest
add_filter( 'acf/rest_api/field_settings/show_in_rest', '__return_true' );

// Enable the option edit in rest
add_filter( 'acf/rest_api/field_settings/edit_in_rest', '__return_true' );

Editing the fields

The fields should be sent into the key fields.

Action: http://localhost/wp-json/acf/v3/posts/1

<form action="http://localhost/wp-json/acf/v3/posts/1" method="POST">
    wp_nonce_field( 'wp_rest' ); 
  <label>Site: <input type="text" name="fields[site]"></label>
  <button type="submit">Save</button>

Action: http://localhost/wp-json/wp/v2/posts/1

<form action="http://localhost/wp-json/wp/v2/posts/1" method="POST">
    wp_nonce_field( 'wp_rest' ); 
  <label>Title: <input type="text" name="title"></label>
  <label>Site: <input type="text" name="fields[site]"></label>
  <button type="submit">Save</button>

Use the filter acf/rest_api/key to change the key fields.

add_filter( 'acf/rest_api/key', function( $key, $request, $type ) {
  return 'acf_fields';
}, 10, 3 );

Now, the fields should be sent into the key acf_fields

<form action="http://localhost/wp-json/acf/v3/posts/1" method="POST">
    wp_nonce_field( 'wp_rest' ); 
  <label>Site: <input type="text" name="acf_fields[site]"></label>
  <button type="submit">Save</button>


Sample theme to edit the ACF Fields.

To-do list πŸ†•

Get ACF Fields RecursivelyπŸ†•

More details:


Enable caching for WordPress REST API and increase speed of your application.