Description
EndPointy Menus adds custom REST API routes to expose your WordPress navigation menus as JSON.
Base namespace: endpointy-menus/v1
Endpoints:
-
GET /wp-json/endpointy-menus/v1/menus
Returns all registered menus with locations and items. -
GET /wp-json/endpointy-menus/v1/menus/<id>
Returns a single menu and its items by menu ID. -
GET /wp-json/endpointy-menus/v1/menus/slug/<slug>
Returns a single menu and its items by menu slug. -
GET /wp-json/endpointy-menus/v1/locations
Returns all registered menu locations with assigned menus. -
GET /wp-json/endpointy-menus/v1/locations/<location>
Returns a menu assigned to a specific location (e.g., ‘primary’, ‘footer’).
Query Parameters:
-
nested=true– Returns menu items in a hierarchical tree structure with parent-child relationships.
Example:/wp-json/endpointy-menus/v1/menus/2?nested=true -
meta=true– Adds extra item data: description, attr_title, current flag, featured image URL and post excerpt.
Example:/wp-json/endpointy-menus/v1/menus/2?meta=true -
fields=id,title,url– Returns only the listed fields per item (children are always kept in nested mode).
Example:/wp-json/endpointy-menus/v1/menus/2?fields=id,title,url
Parameters can be combined, e.g. ?nested=true&meta=true&fields=id,title,url,children.
Settings (Settings EndPointy Menus):
- Response caching with a configurable lifetime (transients, auto-flushed when a menu is edited).
- Optional API-key protection via
X-API-Keyheader orapi_keyquery parameter. - CORS allow-list for browser-based consumers.
- Per-IP rate limiting (requests/minute) with X-RateLimit headers and 429 responses.
- ETag / Last-Modified conditional requests returning 304 Not Modified.
Developer hooks:
endpointy_menus_itemfilter – modify each formatted menu item before output.
This is useful for headless WordPress setups or any external app that needs to read your menu structure.
Usage
Example requests:
Get all menus:
https://your-site.com/wp-json/endpointy-menus/v1/menus
Get single menu by ID:
https://your-site.com/wp-json/endpointy-menus/v1/menus/2
Get all menu locations:
https://your-site.com/wp-json/endpointy-menus/v1/locations
Get menu by location (e.g., ‘primary’):
https://your-site.com/wp-json/endpointy-menus/v1/locations/primary
Get nested menu structure:
https://your-site.com/wp-json/endpointy-menus/v1/menus/2?nested=true
https://your-site.com/wp-json/endpointy-menus/v1/locations/primary?nested=true
Use these URLs directly from your front-end application or API client.
Support the Developer
If you find this plugin useful, you can support the developer:
- Website: https://gunjanjaswal.me
- GitHub: https://github.com/gunjanjaswal/Endpointy-Menus
- Ko-fi: https://ko-fi.com/gunjanjaswal
Contributing
Contributions, issues, and feature requests are welcome!
GitHub: https://github.com/gunjanjaswal/Endpointy-Menus
Issues: https://github.com/gunjanjaswal/Endpointy-Menus/issues
Installation
- Upload the
endpointy-menusfolder to yourwp-content/pluginsdirectory. - Activate EndPointy Menus from the Plugins screen in WordPress.
- Ensure you have at least one menu configured under Appearance Menus.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“EndPointy Menus” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “EndPointy Menus” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.2.0
- Added admin settings page under Settings EndPointy Menus.
- Added response caching (transients) with configurable lifetime and automatic flush on menu edits.
- Added optional API-key authentication (X-API-Key header or api_key query param).
- Added configurable CORS allow-list.
- Added per-IP rate limiting with X-RateLimit headers and 429 responses.
- Added ETag / Last-Modified conditional requests (304 Not Modified).
- Added
/menus/slug/<slug>endpoint to fetch a menu by slug. - Added
meta=truequery parameter for description, featured image, excerpt and current flag. - Added
fields=query parameter to limit returned item fields. - Added
endpointy_menus_itemfilter for developers. - Added menu item
countto menu payloads andmenu_slugto locations.
1.1.1
- Updated “Tested up to” to WordPress 7.0.
- Updated donation link to Ko-fi (https://ko-fi.com/gunjanjaswal).
1.1.0
- Added support for filtering menus by location.
- Added nested menu hierarchy with
nested=truequery parameter. - Added
/locationsendpoint to list all menu locations. - Added
/locations/<location>endpoint to get menu by location.
1.0.0
- Initial release.
