{"id":326764,"date":"2026-06-19T02:09:50","date_gmt":"2026-06-19T02:09:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/botcreds-agent-artifacts\/"},"modified":"2026-06-19T02:09:38","modified_gmt":"2026-06-19T02:09:38","slug":"botcreds-agent-artifacts","status":"publish","type":"plugin","link":"https:\/\/de-at.wordpress.org\/plugins\/botcreds-agent-artifacts\/","author":5977448,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.6","stable_tag":"1.3.6","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"BotCreds Agent Artifacts","header_author":"Joe Boydston","header_description":"Deploy HTML\/CSS\/JS artifacts to WordPress via REST API. Built for AI agents.","assets_banners_color":"02080e","last_updated":"2026-06-19 02:09:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/botcreds.com\/agent-artifacts","header_author_uri":"https:\/\/botcreds.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":46,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.6":{"tag":"1.3.6","author":"jboydston","date":"2026-06-19 02:09:38"},"1.3.7":{"tag":"1.3.7","author":"jboydston","date":"2026-06-19 02:12:00"}},"upgrade_notice":{"1.3.1":"<p>Bug fix for external script handling. Update recommended.<\/p>","1.3.0":"<p>New per-artifact API allowlist feature. Artifacts that call external APIs can now declare trusted origins via an HTML pragma comment rather than a server-side CSP filter.<\/p>","1.1.0":"<p>Rebrand release. If you use the <code>oc_artifacts_csp<\/code> or <code>oc_artifacts_allowed_html<\/code> filters, update them to <code>botcreds_agent_artifacts_csp<\/code> and <code>botcreds_agent_artifacts_allowed_html<\/code>. All data (post type, meta keys, REST endpoints) is unchanged.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3578746,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3578746,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3578746,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.6","1.3.7"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"An artifact deployed via the REST API, rendered at its public URL.","2":"The Artifacts list in WordPress admin."}},"plugin_section":[],"plugin_tags":[15643,2353,1556,244880,23853],"plugin_category":[],"plugin_contributors":[83862],"plugin_business_model":[],"class_list":["post-326764","plugin","type-plugin","status-publish","hentry","plugin_tags-agents","plugin_tags-ai","plugin_tags-api","plugin_tags-artifacts","plugin_tags-rest-api","plugin_contributors-jboydston","plugin_committers-jboydston"],"banners":{"banner":"https:\/\/ps.w.org\/botcreds-agent-artifacts\/assets\/banner-772x250.png?rev=3578746","banner_2x":"https:\/\/ps.w.org\/botcreds-agent-artifacts\/assets\/banner-1544x500.png?rev=3578746","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/botcreds-agent-artifacts\/assets\/icon-128x128.png?rev=3578746","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>BotCreds Agent Artifacts<\/strong> gives AI agents a permanent home for their outputs.<\/p>\n\n<p>Post a single HTML file to the REST API. The plugin parses it, extracts scripts and styles, saves them as static files, enqueues them properly via WordPress APIs, and serves the result at a clean public URL with strict security headers. No build tools. No infrastructure. One API call.<\/p>\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li>POST raw HTML to <code>\/wp-json\/wp\/v2\/artifacts<\/code><\/li>\n<li>The plugin extracts <code>&lt;script&gt;<\/code> and <code>&lt;style&gt;<\/code> blocks and saves them as static files in <code>wp-content\/uploads\/artifacts\/{id}\/<\/code><\/li>\n<li>JS and CSS are enqueued via <code>wp_enqueue_script()<\/code> \/ <code>wp_enqueue_style()<\/code> \u2014 no inline scripts in rendered output<\/li>\n<li>The HTML body is sanitized with <code>wp_kses()<\/code> and an expanded allowed-tags list (canvas, SVG, inputs, video, audio, data-* attributes)<\/li>\n<li>The artifact is served at <code>yourdomain.com\/artifacts\/{slug}\/<\/code> with a strict Content Security Policy<\/li>\n<\/ol>\n\n<p>From the caller's perspective: POST HTML, get URL. Everything else happens server-side.<\/p>\n\n<h4>Features<\/h4>\n\n<p><strong>Deployment<\/strong><\/p>\n\n<ul>\n<li>Single REST API call \u2014 no SDK, no library, any HTTP client works<\/li>\n<li>Update artifacts in place \u2014 POST to <code>\/wp-json\/wp\/v2\/artifacts\/{id}<\/code> and the public URL stays the same<\/li>\n<li>Optional <code>artifact_description<\/code> field for internal documentation<\/li>\n<li>Head content preservation \u2014 <code>&lt;meta&gt;<\/code> tags and other <code>&lt;head&gt;<\/code> elements from submitted HTML are preserved in output<\/li>\n<li>External script support \u2014 <code>&lt;script src=\"...\"&gt;<\/code> tags are registered as external dependencies and enqueued alongside local assets<\/li>\n<li>Asset cache busting \u2014 enqueued files are versioned with <code>filemtime()<\/code> so browsers fetch updates automatically<\/li>\n<li>Clean redeploys \u2014 old asset files are deleted before new ones are written<\/li>\n<\/ul>\n\n<p><strong>Security<\/strong><\/p>\n\n<ul>\n<li>Content Security Policy on every artifact page \u2014 blocks external script injection and cross-origin data exfiltration by default<\/li>\n<li>Trusted CDN list out of the box: <code>cdn.jsdelivr.net<\/code>, <code>unpkg.com<\/code>, <code>cdnjs.cloudflare.com<\/code>, <code>esm.sh<\/code>, <code>cdn.skypack.dev<\/code> \u2014 scripts and styles load from these without any configuration<\/li>\n<li>Per-artifact API allowlist \u2014 artifacts that call external APIs declare their origins via an HTML pragma comment (<code>&lt;!-- artifact:fetch https:\/\/api.example.com --&gt;<\/code>) or a deploy-time meta field; the plugin adds them to <code>connect-src<\/code> automatically<\/li>\n<li>Additional security headers: <code>X-Content-Type-Options<\/code>, <code>X-Frame-Options<\/code>, <code>Referrer-Policy<\/code><\/li>\n<li>Custom capability type \u2014 <code>artifact<\/code> capabilities are separate from standard post capabilities; only Administrators can create artifacts by default<\/li>\n<\/ul>\n\n<p><strong>Developer Hooks<\/strong><\/p>\n\n<ul>\n<li><code>botcreds_agent_artifacts_csp<\/code> \u2014 filter the full CSP header value for any artifact<\/li>\n<li><code>botcreds_agent_artifacts_allowed_html<\/code> \u2014 filter the <code>wp_kses<\/code> allowed-tags array<\/li>\n<li><code>botcreds_agent_artifacts_grant_to_role()<\/code> \u2014 helper to grant capabilities to additional roles<\/li>\n<li>Custom template \u2014 drop <code>single-artifact.php<\/code> in your active theme to replace the render template<\/li>\n<\/ul>\n\n<h4>Use Cases<\/h4>\n\n<p><strong>OpenClaw (AI personal assistant)<\/strong><\/p>\n\n<p>OpenClaw agents can deploy interactive dashboards, daily digests, data visualizations, and mini-apps in a single tool call. Generate the HTML, POST it, get the URL \u2014 no manual steps, no context switching.<\/p>\n\n<p>For artifacts that fetch live data, add a pragma comment to the HTML and the CSP is updated automatically:<\/p>\n\n<pre><code>&lt;!-- artifact:fetch https:\/\/api.openweathermap.org --&gt;\n<\/code><\/pre>\n\n<p>For recurring reports (daily digests, weekly summaries), store the artifact ID after the first deploy and update in place on subsequent runs. The URL never changes.<\/p>\n\n<p><strong>Claude Code (terminal-based coding agent)<\/strong><\/p>\n\n<p>Claude Code sessions can invoke a shell deploy script directly after generating output. Add a <code>scripts\/deploy-artifact.sh<\/code> to your project and reference it in your <code>CLAUDE.md<\/code> \u2014 Claude will use it to ship outputs without leaving the terminal. No manual copy-paste, no browser switching.<\/p>\n\n<p><strong>Codex (OpenAI coding agent)<\/strong><\/p>\n\n<p>Same pattern as Claude Code. Add deployment instructions to your <code>AGENTS.md<\/code> and Codex can write HTML, call the deploy script, and report the live URL \u2014 all in one agent run.<\/p>\n\n<p><strong>GitHub Actions (versioned project)<\/strong><\/p>\n\n<p>For projects that build a static HTML output \u2014 dashboards, reports, documentation, changelogs \u2014 a GitHub Actions workflow can deploy to an artifact on every push to <code>main<\/code>. The artifact ID is stored as a repository variable so the public URL stays stable across all future deploys. Push \u2192 build \u2192 deploy \u2192 done.<\/p>\n\n<h4>Example: Deploy via REST API<\/h4>\n\n<pre><code>curl -X POST \"https:\/\/your-site.com\/wp-json\/wp\/v2\/artifacts\" \\\n  -u \"username:application-password\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"title\": \"My App\",\n    \"status\": \"publish\",\n    \"meta\": {\n      \"artifact_html\": \"&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;body&gt;&lt;h1&gt;Hello.&lt;\/h1&gt;&lt;\/body&gt;&lt;\/html&gt;\",\n      \"artifact_description\": \"Built by my AI agent\"\n    }\n  }'\n<\/code><\/pre>\n\n<p>The response <code>link<\/code> field is the public URL of the deployed artifact.<\/p>\n\n<h4>Example: Artifact with Live Data<\/h4>\n\n<p>Include the fetch pragma in your HTML \u2014 no configuration needed:<\/p>\n\n<pre><code>&lt;!-- artifact:fetch https:\/\/api.openweathermap.org --&gt;\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;body&gt;\n  &lt;div id=\"weather\"&gt;&lt;\/div&gt;\n  &lt;script&gt;\n    fetch('https:\/\/api.openweathermap.org\/data\/2.5\/weather?q=Denver&amp;appid=YOUR_KEY')\n      .then(r =&gt; r.json())\n      .then(d =&gt; document.getElementById('weather').textContent = d.weather[0].description);\n  &lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n<h4>Example: GitHub Actions Deployment<\/h4>\n\n<pre><code>name: Deploy Artifact\non:\n  push:\n    branches: [main]\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\/checkout@v4\n      - run: npm ci &amp;&amp; npm run build\n      - name: Deploy to Artifact\n        env:\n          WP_SITE: ${{ secrets.ARTIFACT_WP_SITE }}\n          WP_USER: ${{ secrets.ARTIFACT_WP_USER }}\n          WP_PASS: ${{ secrets.ARTIFACT_WP_PASS }}\n          ARTIFACT_ID: ${{ vars.ARTIFACT_ID }}\n        run: |\n          PAYLOAD=$(jq -n --arg title \"My Dashboard\" --rawfile html dist\/index.html \\\n            '{title: $title, status: \"publish\", meta: {artifact_html: $html}}')\n          ENDPOINT=\"$WP_SITE\/wp-json\/wp\/v2\/artifacts\"\n          [ -n \"$ARTIFACT_ID\" ] &amp;&amp; ENDPOINT=\"$ENDPOINT\/$ARTIFACT_ID\"\n          curl -sf -X POST \"$ENDPOINT\" -u \"$WP_USER:$WP_PASS\" \\\n            -H \"Content-Type: application\/json\" -d \"$PAYLOAD\" | jq -r '.link'\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>botcreds-agent-artifacts<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate <strong>BotCreds Agent Artifacts<\/strong> in the WordPress admin under <strong>Plugins<\/strong><\/li>\n<li>Go to <strong>Settings \u2192 Permalinks<\/strong> and click <strong>Save Changes<\/strong> to flush rewrite rules<\/li>\n<li>Create a WordPress <strong>Application Password<\/strong> for your agent user: <strong>Users \u2192 Profile \u2192 Application Passwords<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20any%20rest%20client%20or%20ai%20agent%3F\"><h3>Does this work with any REST client or AI agent?<\/h3><\/dt>\n<dd><p>Yes. Any HTTP client that can POST JSON with Basic Auth (username + Application Password) works. No SDK or special library required. curl, Python's urllib, Node's fetch \u2014 anything goes.<\/p><\/dd>\n<dt id=\"are%20artifacts%20sandboxed%3F\"><h3>Are artifacts sandboxed?<\/h3><\/dt>\n<dd><p>Artifact pages are served with a Content Security Policy that blocks external script injection and cross-origin fetch\/XHR by default. The CSP is filterable (<code>botcreds_agent_artifacts_csp<\/code>) for custom use cases, and per-artifact API origins can be declared via the <code>artifact:fetch<\/code> pragma or the <code>artifact_connect_src<\/code> meta field.<\/p><\/dd>\n<dt id=\"what%20scripts%20and%20cdns%20are%20allowed%20without%20configuration%3F\"><h3>What scripts and CDNs are allowed without configuration?<\/h3><\/dt>\n<dd><p>The following CDNs are in the default <code>script-src<\/code> allowlist: <code>cdn.jsdelivr.net<\/code>, <code>unpkg.com<\/code>, <code>cdnjs.cloudflare.com<\/code>, <code>esm.sh<\/code>, <code>cdn.skypack.dev<\/code>. External modules loaded from these CDNs work in artifact HTML without any additional configuration.<\/p><\/dd>\n<dt id=\"how%20do%20i%20allow%20my%20artifact%20to%20call%20an%20external%20api%3F\"><h3>How do I allow my artifact to call an external API?<\/h3><\/dt>\n<dd><p>Two options:<\/p>\n\n<p><strong>Option 1 \u2014 HTML pragma (recommended):<\/strong> Add a comment to your submitted HTML:\n    <!-- artifact:fetch https:\/\/api.example.com --><\/p>\n\n<p>The plugin strips the comment from output and adds the origin to <code>connect-src<\/code>.<\/p>\n\n<p><strong>Option 2 \u2014 Deploy-time meta field:<\/strong> Pass <code>artifact_connect_src<\/code> as an array:\n    \"meta\": { \"artifact_connect_src\": [\"https:\/\/api.example.com\"] }<\/p>\n\n<p>Both options accept only <code>https:\/\/<\/code> origins. No wildcards, no <code>http:\/\/<\/code>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20update%20an%20artifact%20without%20changing%20its%20url%3F\"><h3>How do I update an artifact without changing its URL?<\/h3><\/dt>\n<dd><p>POST to <code>\/wp-json\/wp\/v2\/artifacts\/{id}<\/code> with the same fields. The existing asset files are cleared, new files are written, and the public URL (<code>\/artifacts\/{slug}\/<\/code>) does not change.<\/p><\/dd>\n<dt id=\"what%20html%20elements%20and%20attributes%20are%20allowed%3F\"><h3>What HTML elements and attributes are allowed?<\/h3><\/dt>\n<dd><p>The plugin allows a superset of <code>wp_kses_allowed_html('post')<\/code> including <code>&lt;canvas&gt;<\/code>, <code>&lt;svg&gt;<\/code>, <code>&lt;path&gt;<\/code>, <code>&lt;input&gt;<\/code>, <code>&lt;button&gt;<\/code>, <code>&lt;select&gt;<\/code>, <code>&lt;option&gt;<\/code>, <code>&lt;label&gt;<\/code>, <code>&lt;video&gt;<\/code>, and <code>&lt;audio&gt;<\/code> with their common attributes. <code>data-*<\/code> attributes are allowed on interactive elements. Additional tags and attributes can be added via the <code>botcreds_agent_artifacts_allowed_html<\/code> filter.<\/p><\/dd>\n<dt id=\"who%20can%20create%20artifacts%3F\"><h3>Who can create artifacts?<\/h3><\/dt>\n<dd><p>Only Administrators by default. To grant access to additional roles:<\/p>\n\n<pre><code>botcreds_agent_artifacts_grant_to_role( 'editor' );\n<\/code><\/pre><\/dd>\n<dt id=\"can%20i%20use%20a%20custom%20template%3F\"><h3>Can I use a custom template?<\/h3><\/dt>\n<dd><p>Yes. Place <code>single-artifact.php<\/code> in your active theme and it takes precedence over the plugin's default template. The plugin template is used as a fallback.<\/p><\/dd>\n<dt id=\"will%20my%20old%20artifacts%20still%20work%20after%20upgrading%3F\"><h3>Will my old artifacts still work after upgrading?<\/h3><\/dt>\n<dd><p>Yes. Artifacts created before v1.0 (stored as raw HTML) are still rendered via a legacy fallback path. No migration needed.<\/p><\/dd>\n<dt id=\"how%20do%20i%20update%20the%20content%20security%20policy%3F\"><h3>How do I update the Content Security Policy?<\/h3><\/dt>\n<dd><p>Use the <code>botcreds_agent_artifacts_csp<\/code> filter:<\/p>\n\n<pre><code>add_filter( 'botcreds_agent_artifacts_csp', function( $csp, $post_id ) {\n    return $csp . \"; worker-src 'self'\";\n}, 10, 2 );\n<\/code><\/pre><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>Fix: sanitize head content output in single-artifact.php using wp_kses() with a safe head-element allowlist (meta, link, title, base)<\/li>\n<li>Fix: rename BOTCREDS_ARTIFACTS_VERSION constant to BCAA_VERSION and template variables to bcaa_ prefix to satisfy PrefixAllGlobals coding standard<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Fix: align version constant and Stable tag with plugin header<\/li>\n<li>Fix: add jboydston to Contributors list<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Fix: prefix all template-scope variables in <code>single-artifact.php<\/code> with <code>botcreds_<\/code> to satisfy WordPress coding standards (PrefixAllGlobals)<\/li>\n<li>Fix: bump \"Tested up to\" to 7.0<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Bug fix: external <code>&lt;script src=\"...\"&gt;<\/code> nodes are now correctly removed from the DOM before the body is serialized, preventing duplicate rendering<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Per-artifact API allowlist: declare trusted external API origins via <code>&lt;!-- artifact:fetch https:\/\/api.example.com --&gt;<\/code> pragma in submitted HTML<\/li>\n<li>Per-artifact API allowlist: <code>artifact_connect_src<\/code> meta field for deploy-time origin declaration via REST<\/li>\n<li>Both methods are merged and deduplicated; only <code>https:\/\/<\/code> origins accepted (no wildcards, no http)<\/li>\n<li>CSP <code>connect-src<\/code> is now dynamically built from declared origins per artifact<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Trusted CDN allowlist in default CSP: <code>cdn.jsdelivr.net<\/code>, <code>unpkg.com<\/code>, <code>cdnjs.cloudflare.com<\/code>, <code>esm.sh<\/code>, <code>cdn.skypack.dev<\/code><\/li>\n<li>External <code>&lt;script src=\"...\"&gt;<\/code> tags are now extracted and enqueued as external script dependencies<\/li>\n<li>Head content (<code>&lt;head&gt;<\/code> tags) from submitted HTML is preserved and injected into the artifact's <code>&lt;head&gt;<\/code><\/li>\n<li>Asset cache busting: enqueued files are versioned with <code>filemtime()<\/code> for automatic browser cache invalidation<\/li>\n<li>Clean redeploys: old asset files are deleted before new files are written<\/li>\n<li>File operations use <code>WP_Filesystem<\/code> for proper WordPress filesystem abstraction<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Rebrand: OC Artifacts \u2192 BotCreds Agent Artifacts<\/li>\n<li>Updated plugin header (Plugin URI, Author, Text Domain)<\/li>\n<li>Renamed filter hooks: <code>botcreds_agent_artifacts_csp<\/code>, <code>botcreds_agent_artifacts_allowed_html<\/code><\/li>\n<li>Renamed helper: <code>botcreds_agent_artifacts_grant_to_role()<\/code><\/li>\n<li>Added <code>Requires at least<\/code> and <code>Requires PHP<\/code> headers<\/li>\n<li>Improved inline documentation and code style<\/li>\n<li>Post type slug, meta keys, and REST endpoints unchanged (drop-in compatible)<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Complete rewrite: HTML is now parsed server-side; scripts and styles are extracted and properly enqueued via WordPress APIs<\/li>\n<li>Strict Content Security Policy applied to all artifact pages<\/li>\n<li>Sanitization via <code>wp_kses()<\/code> with expanded allowed-tag list<\/li>\n<li>Backwards compatibility with pre-1.0 raw-HTML artifacts<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Security headers added (X-Frame-Options, Referrer-Policy)<\/li>\n<li>Custom capability type for fine-grained access control<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>REST API endpoint for artifact creation<\/li>\n<li>Custom single template<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Deploy self-contained HTML\/CSS\/JS apps to WordPress via REST API. One call from any AI agent or CI pipeline \u2014 plugin handles the rest.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/326764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=326764"}],"author":[{"embeddable":true,"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jboydston"}],"wp:attachment":[{"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=326764"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=326764"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=326764"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=326764"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=326764"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/de-at.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=326764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}