{"id":240529,"date":"2025-07-11T18:42:23","date_gmt":"2025-07-11T18:42:23","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/api-for-ninja-forms\/"},"modified":"2026-09-15T15:22:19","modified_gmt":"2026-09-15T15:22:19","slug":"api-for-ninja-forms","status":"publish","type":"plugin","link":"https:\/\/id.wordpress.org\/plugins\/api-for-ninja-forms\/","author":13961144,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.2","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"API for Ninja Forms","header_author":"Sightfactory","header_description":"Provides custom REST API endpoints to retrieve Ninja Forms submissions and field metadata with API key authentication and multiple export formats.","assets_banners_color":"252c3e","last_updated":"2026-09-15 15:22:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":20,"downloads":690,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"sightfactory","date":"2026-03-25 21:22:39","revision":3491267},"1.1.0":{"tag":"1.1.0","author":"sightfactory","date":"2026-09-15 15:22:19","revision":3697260}},"upgrade_notice":{"1.1.0":"<p>IMPORTANT: 1) GET \/form\/{id} now defaults to 50 records per page (use ?limit=500 or pagination headers for more). 2) date_submitted now returns standard SQL datetime (YYYY-MM-DD HH:MM:SS) instead of localized text. Verify external integrations before updating.<\/p>","1.0.0":"<p>Initial public release<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3697241,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3697241,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3697197,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3697197,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3697219,"resolution":"1","location":"assets","locale":"","width":1669,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3697219,"resolution":"2","location":"assets","locale":"","width":1669,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3697219,"resolution":"3","location":"assets","locale":"","width":1669,"height":800}},"screenshots":{"1":"Granular API key management with per-form access controls, expiration dates, and rate limits.","2":"End-to-end response payload encryption (AES-256-GCM &amp; Sodium Secretbox) with secret key controls.","3":"Interactive developer documentation with ready-to-use PHP, JavaScript, and cURL examples."}},"plugin_section":[],"plugin_tags":[1556,9955,46122,23853],"plugin_category":[],"plugin_contributors":[86654],"plugin_business_model":[],"class_list":["post-240529","plugin","type-plugin","status-publish","hentry","plugin_tags-api","plugin_tags-ninja-forms","plugin_tags-ninjaforms","plugin_tags-rest-api","plugin_contributors-sightfactory","plugin_committers-sightfactory"],"banners":{"banner":"https:\/\/ps.w.org\/api-for-ninja-forms\/assets\/banner-772x250.png?rev=3697197","banner_2x":"https:\/\/ps.w.org\/api-for-ninja-forms\/assets\/banner-1544x500.png?rev=3697197","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/api-for-ninja-forms\/assets\/icon-128x128.png?rev=3697241","icon_2x":"https:\/\/ps.w.org\/api-for-ninja-forms\/assets\/icon-256x256.png?rev=3697241","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/api-for-ninja-forms\/assets\/screenshot-1.png?rev=3697219","caption":"Granular API key management with per-form access controls, expiration dates, and rate limits."},{"src":"https:\/\/ps.w.org\/api-for-ninja-forms\/assets\/screenshot-2.png?rev=3697219","caption":"End-to-end response payload encryption (AES-256-GCM &amp; Sodium Secretbox) with secret key controls."},{"src":"https:\/\/ps.w.org\/api-for-ninja-forms\/assets\/screenshot-3.png?rev=3697219","caption":"Interactive developer documentation with ready-to-use PHP, JavaScript, and cURL examples."}],"raw_content":"<!--section=description-->\n<p>API for Ninja Forms is <strong>the best, most powerful, and feature-complete REST API solution<\/strong> for Ninja Forms. Effortlessly export and integrate your form submissions with external applications, webhooks, and analytics platforms with <strong>unparalleled speed, reliability, and security<\/strong>.<\/p>\n\n<p>Whether you need automated Excel reporting, instant PDF downloads, structured JSON data feeds, or real-time data synchronization, API for Ninja Forms delivers a best-in-class integration experience built for modern developers and business workflows.<\/p>\n\n<h3>Why API for Ninja Forms is the Best Choice:<\/h3>\n\n<ul>\n<li><strong>Forms Discovery Endpoint:<\/strong> Query authorized forms, submission counts, and field definitions with strict per-key access control.<\/li>\n<li><strong>Cursor &amp; Offset Pagination:<\/strong> Seamlessly paginate large historical datasets with <code>page<\/code>\/<code>per_page<\/code> or cursor sync via <code>since_id<\/code>\/<code>before_id<\/code>.<\/li>\n<li><strong>Single Record Retrieval:<\/strong> Instant lookup of specific submissions (<code>\/form\/{id}\/submission\/{sub_id}<\/code>) with cross-form ownership validation.<\/li>\n<li><strong>Unparalleled Multi-Format Exports:<\/strong> Stream submissions on-demand in 6 versatile formats: JSON, Excel (XLSX), PDF document reports, CSV spreadsheets, XML, and NDJSON\/JSONL.<\/li>\n<li><strong>Military-Grade Payload Encryption:<\/strong> Protect sensitive customer and form data with state-of-the-art AEAD response encryption (AES-256-GCM, AES-128-GCM, and Sodium Secretbox).<\/li>\n<li><strong>Advanced Rate Limiting Protection:<\/strong> Safeguard your server against scraping, probing, and brute-force key exploitation with admin-controlled rate limits per minute, hour, or day.<\/li>\n<li><strong>Granular Form Access Control:<\/strong> Issue form-specific API keys with instant 1-click test suite tools and single-page key management.<\/li>\n<li><strong>Lightning-Fast &amp; Ultra-Optimized:<\/strong> Zero-overhead streaming designed for high throughput, low memory footprint, and maximum performance.<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<h3>1. Authentication<\/h3>\n\n<p>Pass your API key in the standard HTTP Authorization header:\n    Authorization: Bearer YOUR_API_KEY<\/p>\n\n<h3>2. Available Endpoints<\/h3>\n\n<ul>\n<li><p><strong>Discover Authorized Forms:<\/strong>\n  GET \/wp-json\/nf-submissions\/v1\/forms\nReturns all forms the authenticated key is authorized to access, with total submission counts and field counts.<\/p><\/li>\n<li><p><strong>Retrieve Submissions (with Pagination &amp; Sorting):<\/strong>\n  GET \/wp-json\/nf-submissions\/v1\/form\/{form_id}\nQuery parameters:<\/p>\n\n<ul>\n<li><code>page<\/code> (default: 1): Page number for offset pagination.<\/li>\n<li><code>per_page<\/code> \/ <code>limit<\/code> (default: 50, max: 500): Number of records per page.<\/li>\n<li><code>offset<\/code>: Explicit record offset (overrides <code>page<\/code>).<\/li>\n<li><code>since_id<\/code> \/ <code>after_id<\/code>: Retrieve only submissions with ID greater than this value (cursor pagination).<\/li>\n<li><code>before_id<\/code> \/ <code>max_id<\/code>: Retrieve only submissions with ID less than this value.<\/li>\n<li><code>order<\/code>: <code>asc<\/code> (default) or <code>desc<\/code>.<\/li>\n<li><code>orderby<\/code>: <code>date<\/code> (default), <code>id<\/code>, <code>title<\/code>, or <code>modified<\/code>.<\/li>\n<li><code>begin_date<\/code> &amp; <code>end_date<\/code>: Filter by submission date range (<code>YYYY-MM-DD<\/code>).<\/li>\n<li><code>format<\/code>: <code>json<\/code> (default), <code>csv<\/code>, <code>xlsx<\/code>, <code>pdf<\/code>, <code>xml<\/code>, or <code>jsonl<\/code>.<\/li>\n<\/ul><\/li>\n<li><p><strong>Retrieve Single Submission:<\/strong>\n  GET \/wp-json\/nf-submissions\/v1\/form\/{form_id}\/submission\/{submission_id}\nReturns the exact submission record. Validates that the submission belongs to the specified form.<\/p><\/li>\n<li><p><strong>Retrieve Form Field Metadata:<\/strong>\n  GET \/wp-json\/nf-submissions\/v1\/form\/{form_id}\/fields\nReturns the list of field labels, keys, and types for the specified form.<\/p><\/li>\n<\/ul>\n\n<h3>3. Pagination &amp; Headers<\/h3>\n\n<p>When retrieving submissions in JSON format, standard pagination headers are included in the response:\n* <code>X-WP-Total<\/code>: Total count of matching submissions.\n* <code>X-WP-TotalPages<\/code>: Total calculated pages.\n* <code>X-WP-Page<\/code>: Current page number.\n* <code>X-WP-PerPage<\/code>: Records per page limit.\n* <code>X-RateLimit-Limit<\/code>, <code>X-RateLimit-Remaining<\/code>, <code>X-RateLimit-Reset<\/code>: Rate-limiting status (if enabled).<\/p>\n\n<h3>4. Payload Encryption &amp; Decryption<\/h3>\n\n<p>When payload encryption is enabled on an API key:\n* <strong>Text Feeds (JSON, CSV, XML, JSONL):<\/strong> Encrypted as a JSON envelope containing <code>iv<\/code>, <code>tag<\/code>, and <code>ciphertext<\/code>.\n* <strong>Binary Streams (PDF, XLSX):<\/strong> Delivered as raw binary (<code>.enc<\/code> extension) with cryptographic headers (<code>X-Crypto-IV<\/code>, <code>X-Crypto-Tag<\/code>, <code>X-Crypto-Nonce<\/code>, <code>X-Crypto-Algorithm<\/code>).<\/p>\n\n<h3>5. PHP Code Examples (cURL &amp; wp_remote_get)<\/h3>\n\n<ul>\n<li><strong>Discover Authorized Forms via Native PHP cURL:<\/strong>\n`php\n$ch = curl_init( 'https:\/\/example.com\/wp-json\/nf-submissions\/v1\/forms' );\ncurl_setopt_array( $ch, [\nCURLOPT_RETURNTRANSFER =&gt; true,\nCURLOPT_HTTPHEADER     =&gt; [\n    'Authorization: Bearer YOUR_API_KEY',\n    'Accept: application\/json',\n],\n] );\n$response    = curl_exec( $ch );\n$http_status = curl_getinfo( $ch, CURLINFO_HTTP_CODE );\ncurl_close( $ch );<\/li>\n<\/ul>\n\n<p>$data = json_decode( $response, true );<\/p>\n\n<p>\/\/ Graceful error handling for invalid API key or server error\nif ( 200 !== $http_status || ! is_array( $data ) || isset( $data['code'] ) ) {\n    $error = $data['message'] ?? 'Failed to retrieve forms';\n    exit( \"API Error ({$http_status}): {$error}\\n\" );\n}<\/p>\n\n<p>foreach ( $data as $form ) {\n    echo \"Form ID: {$form['id']} | Title: {$form['title']} | Submissions: {$form['submissions_count']}\\n\";\n}\n    `<\/p>\n\n<ul>\n<li><strong>Fetch Submissions via Native PHP cURL (External Apps \/ Scripts):<\/strong>\n`php\n$ch = curl_init( 'https:\/\/example.com\/wp-json\/nf-submissions\/v1\/form\/1?page=1&amp;per_page=50' );\ncurl_setopt_array( $ch, [\nCURLOPT_RETURNTRANSFER =&gt; true,\nCURLOPT_HTTPHEADER     =&gt; [\n    'Authorization: Bearer YOUR_API_KEY',\n    'Accept: application\/json',\n],\n] );\n$response    = curl_exec( $ch );\n$http_status = curl_getinfo( $ch, CURLINFO_HTTP_CODE );\ncurl_close( $ch );<\/li>\n<\/ul>\n\n<p>$data = json_decode( $response, true );<\/p>\n\n<p>if ( 200 !== $http_status || ! is_array( $data ) || isset( $data['code'] ) ) {\n    $error = $data['message'] ?? 'Failed to retrieve submissions';\n    exit( \"API Error ({$http_status}): {$error}\\n\" );\n}<\/p>\n\n<p>$submissions = $data;\n    `<\/p>\n\n<ul>\n<li><strong>Download Binary PDF \/ Excel (.xlsx) File via Native PHP cURL:<\/strong>\n`php\n$ch = curl_init( 'https:\/\/example.com\/wp-json\/nf-submissions\/v1\/form\/1?format=pdf' );\ncurl_setopt_array( $ch, [\nCURLOPT_RETURNTRANSFER =&gt; true,\nCURLOPT_FOLLOWLOCATION =&gt; true,\nCURLOPT_HTTPHEADER     =&gt; [\n    'Authorization: Bearer YOUR_API_KEY',\n],\n] );\n$file_contents = curl_exec( $ch );\n$http_status   = curl_getinfo( $ch, CURLINFO_HTTP_CODE );\ncurl_close( $ch );<\/li>\n<\/ul>\n\n<p>if ( 200 === $http_status ) {\n    file_put_contents( 'submissions.pdf', $file_contents );\n} else {\n    $error = json_decode( $file_contents, true );\n    echo \"API Error ({$http_status}): \" . ( $error['message'] ?? 'Download failed' ) . \"\\n\";\n}\n    `<\/p>\n\n<ul>\n<li><strong>Discover Authorized Forms via WordPress HTTP API (wp_remote_get):<\/strong>\n`php\n$response = wp_remote_get( 'https:\/\/example.com\/wp-json\/nf-submissions\/v1\/forms', [\n'headers' =&gt; [ 'Authorization' =&gt; 'Bearer YOUR_API_KEY' ],\n] );<\/li>\n<\/ul>\n\n<p>if ( is_wp_error( $response ) ) {\n    exit( 'Network Error: ' . $response-&gt;get_error_message() );\n}<\/p>\n\n<p>$status = wp_remote_retrieve_response_code( $response );\n$data   = json_decode( wp_remote_retrieve_body( $response ), true );<\/p>\n\n<p>\/\/ Graceful error handling for invalid API key or server error\nif ( 200 !== $status || ! is_array( $data ) || isset( $data['code'] ) ) {\n    $error = $data['message'] ?? 'Failed to retrieve forms';\n    exit( \"API Error ({$status}): {$error}\\n\" );\n}<\/p>\n\n<p>foreach ( $data as $form ) {\n    echo \"Form ID: {$form['id']} | Title: {$form['title']} | Submissions: {$form['submissions_count']}\\n\";\n}\n    `<\/p>\n\n<ul>\n<li><strong>Fetch Submissions via WordPress HTTP API (wp_remote_get):<\/strong>\n`php\n$response = wp_remote_get( 'https:\/\/example.com\/wp-json\/nf-submissions\/v1\/form\/1', [\n'headers' =&gt; [ 'Authorization' =&gt; 'Bearer YOUR_API_KEY' ],\n] );<\/li>\n<\/ul>\n\n<p>if ( is_wp_error( $response ) ) {\n    exit( 'Network Error: ' . $response-&gt;get_error_message() );\n}<\/p>\n\n<p>$status = wp_remote_retrieve_response_code( $response );\n$data   = json_decode( wp_remote_retrieve_body( $response ), true );<\/p>\n\n<p>if ( 200 !== $status || ! is_array( $data ) || isset( $data['code'] ) ) {\n    $error = $data['message'] ?? 'Failed to retrieve submissions';\n    exit( \"API Error ({$status}): {$error}\\n\" );\n}<\/p>\n\n<p>$submissions = $data;\n    `<\/p>\n\n<h3>Third-Party Resources<\/h3>\n\n<p>This plugin bundles and utilizes the following open-source library:<\/p>\n\n<ul>\n<li><strong>Setasign\/FPDF<\/strong>\n\n<ul>\n<li><strong>Description:<\/strong> A pure PHP library for reading and writing PDF files.<\/li>\n<li><strong>Homepage:<\/strong> <a href=\"https:\/\/github.com\/Setasign\/FPDF\">https:\/\/github.com\/Setasign\/FPDF<\/a><\/li>\n<li><strong>License:<\/strong> FPDF License (compatible with MIT\/BSD-style)<\/li>\n<li><strong>License URI:<\/strong> <a href=\"https:\/\/github.com\/Setasign\/FPDF?tab=License-1-ov-file#readme\">https:\/\/github.com\/Setasign\/FPDF?tab=License-1-ov-file#readme<\/a><\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h3>Support<\/h3>\n\n<p>For support and feature requests, please visit <a href=\"https:\/\/sightfactory.com\">https:\/\/sightfactory.com<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Download the plugin ZIP file.<\/li>\n<li>Upload the extracted folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Generate a REST API key by navigating to <strong>Settings &gt; NF API Keys<\/strong>.<\/li>\n<li>Make authenticated REST requests by including the header: <code>Authorization: Bearer YOUR_API_KEY<\/code>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20api%20file%20formats%20are%20supported%3F\"><h3>What API file formats are supported?<\/h3><\/dt>\n<dd><p>JSON, CSV, XLSX (Microsoft Excel), PDF, XML, and NDJSON\/JSONL formats are supported.<\/p><\/dd>\n<dt id=\"how%20do%20i%20synchronize%20new%20submissions%20in%20real-time%3F\"><h3>How do I synchronize new submissions in real-time?<\/h3><\/dt>\n<dd><p>Use cursor pagination with <code>?since_id={last_synced_id}&amp;order=asc<\/code>. Your application only receives new submissions created since the last sync.<\/p><\/dd>\n<dt id=\"how%20do%20i%20enable%20response%20payload%20encryption%3F\"><h3>How do I enable response payload encryption?<\/h3><\/dt>\n<dd><p>Navigate to Settings &gt; NF API Keys in your WordPress dashboard, check \"Enable Response Payload Encryption\", select your cipher strategy (AES-256-GCM, AES-128-GCM, or Sodium Secretbox), and generate a key. Keep your secret decryption key safe.<\/p><\/dd>\n<dt id=\"why%20does%20an%20encrypted%20pdf%20or%20xlsx%20file%20end%20in%20.enc%3F\"><h3>Why does an encrypted PDF or XLSX file end in .enc?<\/h3><\/dt>\n<dd><p>Binary files exported with encryption enabled are saved with a <code>.enc<\/code> file extension (e.g., <code>form-1-submissions-encrypted.pdf.enc<\/code>). Because the file content consists of raw encrypted bytes, attempting to open the file directly in Adobe Reader or Microsoft Excel without decrypting it first will report a corrupted file error. The <code>.enc<\/code> extension clearly indicates that the file must be decrypted using your secret key first.<\/p><\/dd>\n<dt id=\"how%20do%20i%20decrypt%20binary%20files%20%28pdf%20%26%20xlsx%29%20using%20php%3F\"><h3>How do I decrypt binary files (PDF &amp; XLSX) using PHP?<\/h3><\/dt>\n<dd><p>Read the binary body and HTTP response headers (<code>X-Crypto-IV<\/code>, <code>X-Crypto-Tag<\/code>):\n    `php\n$response = wp_remote_get('https:\/\/example.com\/wp-json\/nf-submissions\/v1\/form\/1?format=pdf', [\n    'headers' =&gt; ['Authorization' =&gt; 'Bearer YOUR_API_KEY']\n]);<\/p>\n\n<p>if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {\n    exit( 'Download failed or unauthorized.' );\n}<\/p>\n\n<p>$headers = wp_remote_retrieve_headers($response);\n$binary_key = hex2bin('YOUR_DECRYPTION_KEY');\n$iv = base64_decode($headers['x-crypto-iv']);\n$tag = base64_decode($headers['x-crypto-tag']);<\/p>\n\n<p>$decrypted_pdf = openssl_decrypt(\n    wp_remote_retrieve_body($response),\n    'aes-256-gcm',\n    $binary_key,\n    OPENSSL_RAW_DATA,\n    $iv,\n    $tag\n);\nfile_put_contents('submissions.pdf', $decrypted_pdf);\n    `<\/p><\/dd>\n<dt id=\"how%20do%20i%20decrypt%20json%20payloads%20using%20php%3F\"><h3>How do I decrypt JSON payloads using PHP?<\/h3><\/dt>\n<dd><p>Parse the JSON response envelope and decrypt using OpenSSL:\n    <code>php\n$json = json_decode($response_body, true);\nif (!empty($json['encrypted'])) {\n    $binary_key = hex2bin('YOUR_DECRYPTION_KEY');\n    $plaintext = openssl_decrypt(\n        base64_decode($json['ciphertext']),\n        $json['algorithm'],\n        $binary_key,\n        OPENSSL_RAW_DATA,\n        base64_decode($json['iv']),\n        base64_decode($json['tag'])\n    );\n    $data = json_decode($plaintext, true);\n}<\/code><\/p><\/dd>\n<dt id=\"does%20this%20plugin%20slow%20down%20my%20website%3F\"><h3>Does this plugin slow down my website?<\/h3><\/dt>\n<dd><p>No. Text feeds use lightweight JSON structures and binary feeds use raw stream transmission to ensure high throughput and low memory usage.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added export format support for XLSX (Microsoft Excel), CSV, XML, and NDJSON\/JSONL.<\/li>\n<li>Added record limit support (?limit=N) for pagination and performance control.<\/li>\n<li>Implemented real-time browser Web Crypto decryption preview for encrypted feeds.<\/li>\n<li>Updated Setasign\/FPDF library to version 1.9.0.<\/li>\n<li>Enhanced security, superglobal unslashing, and full WP Plugin Check compliance.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<p>Bugfix<\/p>\n\n<h4>1.0.0<\/h4>\n\n<p>Initial public release<\/p>","raw_excerpt":"The best and most powerful REST API solution for Ninja Forms with unparalleled security, multi-format exports, and military-grade encryption.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/240529","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=240529"}],"author":[{"embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sightfactory"}],"wp:attachment":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=240529"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=240529"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=240529"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=240529"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=240529"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=240529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}