{"id":4945,"date":"2026-01-26T01:51:06","date_gmt":"2026-01-26T06:51:06","guid":{"rendered":"https:\/\/chubes.net\/?documentation=parameter-systems"},"modified":"2026-04-27T00:09:30","modified_gmt":"2026-04-27T04:09:30","slug":"parameter-systems","status":"publish","type":"documentation","link":"https:\/\/chubes.net\/docs\/data-machine\/api\/endpoints\/parameter-systems\/","title":{"rendered":"Parameter Systems"},"content":{"rendered":"<p>Unified flat parameter architecture for all Data Machine components, providing consistent interfaces across steps, handlers, and tools while maintaining extensibility and simplicity.<\/p><h2 class=\"wp-block-heading\">Architecture Overview<\/h2><p>Data Machine uses an engine data filter architecture that provides clean data separation and consistent parameter access across all components.<\/p><h3 class=\"wp-block-heading\">Core Design Principles<\/h3><ol class=\"wp-block-list\"><li><strong>Engine Data Propagation<\/strong> &#8211; Fetch handlers store engine data via centralized filters; engine bundles the data into the payload passed to every step and tool<\/li><li><strong>Clean Data Separation<\/strong> &#8211; AI receives clean data packets without URLs; handlers receive engine parameters via the payload-supplied engine data<\/li><li><strong>Unified Interface<\/strong> &#8211; All steps, handlers, and tools use consistent parameter formats with required <code>job_id<\/code> for engine data access<\/li><li><strong>Tool-Based Parameter Building<\/strong> &#8211; ToolParameters class (Universal Engine) provides standardized parameter construction<\/li><li><strong>Required Job ID<\/strong> &#8211; All tools must include <code>job_id<\/code> parameter to enable engine data access and workflow continuity<\/li><\/ol><h2 class=\"wp-block-heading\">Core Payload Structure<\/h2><h3 class=\"wp-block-heading\">Universal Payload Keys<\/h3><p>These payload keys are provided to ALL steps and components:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$payload = [\n    &#039;job_id&#039; =&gt; $job_id,                    \/\/ Unique job identifier\n    &#039;flow_step_id&#039; =&gt; $flow_step_id,        \/\/ Flow step identifier ({pipeline_step_id}_{flow_id})\n    &#039;data&#039; =&gt; $data,                        \/\/ Data packet array\n    &#039;flow_step_config&#039; =&gt; $flow_step_config,\/\/ Step configuration\n    &#039;engine_data&#039; =&gt; $engine_data           \/\/ Engine metadata stored by fetch handlers\n];<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Engine Data<\/h3><p>Engine data is stored in the database by fetch handlers using the centralized <code>datamachine_engine_data<\/code> filter. During execution the engine collects that data and injects it into the payload, so every step receives the same metadata packet:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">\/\/ 1. Fetch handlers store data for later payload injection\nif ($job_id) {\n    apply_filters(&#039;datamachine_engine_data&#039;, null, $job_id, [\n        &#039;source_url&#039; =&gt; $source_url,\n        &#039;image_url&#039; =&gt; $image_url\n    ]);\n}\n\n\/\/ 2. Steps read the injected engine data directly from the payload\npublic function execute(array $payload): array {\n    $engine_data = $payload[&#039;engine_data&#039;] ?? [];\n\n    \/\/ Optional: refresh if handler updated engine data mid-flow\n    if (!$engine_data) {\n        $engine_data = apply_filters(&#039;datamachine_engine_data&#039;, [], $payload[&#039;job_id&#039;]);\n    }\n\n    $source_url = $engine_data[&#039;source_url&#039;] ?? null;\n    $image_url = $engine_data[&#039;image_url&#039;] ?? null;\n\n    \/\/ ...\n}<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Step Implementation Pattern<\/h2><p>All steps follow the same payload extraction pattern:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">class MyStep {\n    public function execute(array $payload): array {\n        \/\/ Extract core parameters\n        $job_id = $payload[&#039;job_id&#039;];\n        $flow_step_id = $payload[&#039;flow_step_id&#039;];\n        $data = $payload[&#039;data&#039;] ?? [];\n        $flow_step_config = $payload[&#039;flow_step_config&#039;] ?? [];\n        $engine_data = $payload[&#039;engine_data&#039;] ?? [];\n\n        \/\/ Extract step-specific parameters\n        $custom_setting = $payload[&#039;custom_setting&#039;] ?? null;\n        $source_url = $engine_data[&#039;source_url&#039;] ?? null;\n\n        \/\/ Step processing logic\n        $result = $this-&gt;process_data($data, $flow_step_config);\n\n        \/\/ Mark items processed\n        do_action(&#039;datamachine_mark_item_processed&#039;, $flow_step_id, &#039;my_step&#039;, $item_id, $job_id);\n\n        \/\/ Return updated data packet array\n        return $result;\n    }\n}<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Handler Parameter Patterns<\/h2><h3 class=\"wp-block-heading\">Fetch Handlers<\/h3><p>Generate clean data packets and store engine parameters in database:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">class MyFetchHandler {\n    public function get_fetch_data(int $pipeline_id, array $handler_config, ?string $job_id = null): array {\n        $flow_step_id = $handler_config[&#039;flow_step_id&#039;] ?? null;\n\n        \/\/ Create clean data packet (no URLs)\n        $clean_data = [\n            &#039;data&#039; =&gt; [&#039;content_string&#039; =&gt; $content],\n            &#039;metadata&#039; =&gt; [&#039;source_type&#039; =&gt; &#039;my_handler&#039;, &#039;original_id&#039; =&gt; $item_id]\n        ];\n\n        \/\/ Store engine parameters in database via centralized datamachine_engine_data filter\n        if ($job_id) {\n            apply_filters(&#039;datamachine_engine_data&#039;, null, $job_id, [\n                &#039;source_url&#039; =&gt; $source_url,\n                &#039;image_url&#039; =&gt; $image_url\n            ]);\n        }\n\n        return [&#039;processed_items&#039; =&gt; [$clean_data]];\n    }\n}<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Publish Handlers (Tool-Based)<\/h3><p>Use <code>ToolParameters::buildForHandlerTool()<\/code> for parameter building with engine data access:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">class MyPublishHandler {\n    public function handle_tool_call(array $parameters, array $tool_def = []): array {\n        \/\/ Parameters built by ToolParameters::buildParameters()\n        \/\/ Already contain: content, title, job_id, flow_step_id, handler_config\n        \/\/ Engine data accessed via filter for handler tools\n\n        $content = $parameters[&#039;content&#039;] ?? &#039;&#039;;\n        $handler_config = $tool_def[&#039;handler_config&#039;] ?? [];\n\n        \/\/ Access engine data via centralized filter\n        $job_id = $parameters[&#039;job_id&#039;] ?? null;\n        $engine_data = apply_filters(&#039;datamachine_engine_data&#039;, [], $job_id);\n        $source_url = $engine_data[&#039;source_url&#039;] ?? null;\n        $image_url = $engine_data[&#039;image_url&#039;] ?? null;\n\n        return [&#039;success&#039; =&gt; true, &#039;data&#039; =&gt; [&#039;id&#039; =&gt; $id]];\n    }\n}<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Upsert Handlers (Engine Data)<\/h3><p>Require <code>source_url<\/code> from engine data stored by fetch handlers and delivered on the payload:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">class MyUpdateHandler {\n    public function handle_tool_call(array $parameters, array $tool_def = []): array {\n        \/\/ Access engine data via centralized filter\n        $job_id = $parameters[&#039;job_id&#039;] ?? null;\n        $engine_data = apply_filters(&#039;datamachine_engine_data&#039;, [], $job_id);\n        $source_url = $engine_data[&#039;source_url&#039;] ?? null;\n\n        if (empty($source_url)) {\n            return [&#039;success&#039; =&gt; false, &#039;error&#039; =&gt; &#039;Missing required source_url from engine data&#039;];\n        }\n\n        $content = $parameters[&#039;content&#039;] ?? &#039;&#039;;\n\n        \/\/ Update existing content at source_url\n        return [&#039;success&#039; =&gt; true, &#039;data&#039; =&gt; [&#039;updated_id&#039; =&gt; $id]];\n    }\n}<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">AI Tool Parameter Building<\/h2><h3 class=\"wp-block-heading\">ToolParameters Class (Universal Engine)<\/h3><p><strong>File<\/strong>: <code>\/inc\/Engine\/AI\/Tools\/ToolParameters.php<\/code>\n<strong>Since<\/strong>: 0.2.0<\/p><p>Centralized parameter building for AI tool execution:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">use DataMachineEngineAIToolsToolParameters;\n\n\/\/ Unified parameter building for all tool types\n$parameters = ToolParameters::buildParameters(\n    $ai_tool_parameters,     \/\/ Parameters from AI tool call\n    $payload,                \/\/ Step payload (job_id, flow_step_id, data, flow_step_config, engine_data)\n    $tool_definition         \/\/ Tool definition array\n);<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Parameter Building Process<\/h3><ol class=\"wp-block-list\"><li><strong>Start with Payload<\/strong> &#8211; Copy the complete payload (job_id, flow_step_id, data, flow_step_config, engine_data)<\/li><li><strong>Merge AI Parameters<\/strong> &#8211; Add AI-provided parameters on top (content, title, query, etc.)<\/li><li><strong>Preserve Structure<\/strong> &#8211; Maintain unified flat parameter structure for all tool types<\/li><\/ol><h3 class=\"wp-block-heading\">Example Built Parameters<\/h3><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">[\n    \/\/ Original payload parameters\n    &#039;job_id&#039; =&gt; &#039;uuid-job-123&#039;,\n    &#039;flow_step_id&#039; =&gt; &#039;step_uuid_flow_123&#039;,\n    &#039;data&#039; =&gt; [...], \/\/ Complete data packet array\n    &#039;flow_step_config&#039; =&gt; [...], \/\/ Step configuration\n    &#039;engine_data&#039; =&gt; [...], \/\/ Engine metadata from fetch handlers\n\n    \/\/ AI-provided parameters (merged on top)\n    &#039;content&#039; =&gt; &#039;AI-generated content&#039;,\n    &#039;title&#039; =&gt; &#039;AI-generated title&#039;,\n    &#039;hashtags&#039; =&gt; &#039;#ai #automation&#039;\n]<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Handler Configuration Defaults<\/h2><p>The system employs a priority-based default application logic via <code>HandlerService::applyDefaults()<\/code>. This ensures consistent configuration across flows while allowing granular overrides.<\/p><h3 class=\"wp-block-heading\">Priority Order (Highest to Lowest)<\/h3><ol class=\"wp-block-list\"><li><strong>Explicit Configuration<\/strong>: Values explicitly provided in the flow step configuration.<\/li><li><strong>Site-wide Defaults<\/strong>: Site-level defaults managed via Settings \u2192 Handler Defaults (stored in <code>datamachine_handler_defaults<\/code> option).<\/li><li><strong>Schema Defaults<\/strong>: Default values defined in the handler&#8217;s settings class field definitions (<code>get_fields()<\/code>).<\/li><\/ol><h3 class=\"wp-block-heading\">Configuration Merging Logic<\/h3><p>When a flow step executes, the system merges these layers:<\/p><ul class=\"wp-block-list\"><li>If a key exists in <strong>Explicit Configuration<\/strong>, that value is used.<\/li><li>Otherwise, if it exists in <strong>Site-wide Defaults<\/strong>, that value is used.<\/li><li>Otherwise, the <strong>Schema Default<\/strong> is used if defined.<\/li><li>Keys not present in the handler&#8217;s schema are preserved for forward compatibility.<\/li><\/ul><h3 class=\"wp-block-heading\">Benefits<\/h3><ul class=\"wp-block-list\"><li><strong>Efficiency<\/strong>: Standard settings (like default post author or image settings) only need to be configured once per site.<\/li><li><strong>Flexibility<\/strong>: Individual flows can still override site defaults when specific behavior is required.<\/li><li><strong>Stability<\/strong>: Schema defaults provide a safe fallback for all configuration keys.<\/li><\/ul><h2 class=\"wp-block-heading\">Handler-Specific Engine Parameters<\/h2><h3 class=\"wp-block-heading\">Database Storage by Fetch Handlers<\/h3><p>Each fetch handler stores specific engine parameters in the database using array storage:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">\/\/ Reddit Handler - stores via centralized filter (array storage)\nif ($job_id) {\n    apply_filters(&#039;datamachine_engine_data&#039;, null, $job_id, [\n        &#039;source_url&#039; =&gt; &#039;https:\/\/reddit.com&#039; . $item_data[&#039;permalink&#039;],\n        &#039;image_url&#039; =&gt; $stored_image[&#039;url&#039;] ?? &#039;&#039;\n    ]);\n}\n\n\/\/ WordPress Local Handler - stores via centralized filter (array storage)\nif ($job_id) {\n    apply_filters(&#039;datamachine_engine_data&#039;, null, $job_id, [\n        &#039;source_url&#039; =&gt; get_permalink($post_id),\n        &#039;image_url&#039; =&gt; $this-&gt;extract_image_url($post_id)\n    ]);\n}\n\n\/\/ RSS Handler - stores via centralized filter (array storage)\nif ($job_id) {\n    apply_filters(&#039;datamachine_engine_data&#039;, null, $job_id, [\n        &#039;source_url&#039; =&gt; $item_link,\n        &#039;image_url&#039; =&gt; $enclosure_url\n    ]);\n}<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Parameter Validation<\/h3><p>Steps can validate required parameters:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">public function execute(array $payload): array {\n    $required = [&#039;job_id&#039;, &#039;flow_step_id&#039;, &#039;custom_required_param&#039;];\n\n    foreach ($required as $param) {\n        if (!isset($payload[$param])) {\n            throw new InvalidArgumentException(&quot;Missing required parameter: {$param}&quot;);\n        }\n    }\n\n    return $this-&gt;process($payload);\n}<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Flow Step Configuration Access<\/h2><p>Payloads include complete flow step configuration with pipeline inheritance:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$flow_step_config = $payload[&#039;flow_step_config&#039;];\n\n\/\/ Available configuration keys:\n$step_type = $flow_step_config[&#039;step_type&#039;];           \/\/ From pipeline\n$execution_order = $flow_step_config[&#039;execution_order&#039;]; \/\/ From pipeline\n$system_prompt = $flow_step_config[&#039;system_prompt&#039;];   \/\/ From pipeline (AI steps)\n$prompt_queue = $flow_step_config[&#039;prompt_queue&#039;];     \/\/ From flow (AI steps)\n$queue_mode = $flow_step_config[&#039;queue_mode&#039;];         \/\/ drain | loop | static\n$handler_config = $flow_step_config[&#039;handler_config&#039;]; \/\/ Handler settings<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Data Packet Integration<\/h2><p>The <code>data<\/code> key contains the complete workflow history:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$data = $payload[&#039;data&#039;]; \/\/ Array of data packets\n\n\/\/ Each data packet structure:\n[\n    &#039;type&#039; =&gt; &#039;fetch|ai|publish|upsert&#039;,\n    &#039;handler&#039; =&gt; &#039;rss|twitter|etc&#039;,\n    &#039;content&#039; =&gt; [&#039;title&#039; =&gt; $title, &#039;body&#039; =&gt; $content],\n    &#039;metadata&#039; =&gt; [&#039;source_type&#039; =&gt; $type, &#039;source_url&#039; =&gt; $url],\n    &#039;timestamp&#039; =&gt; time()\n]<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Benefits of Flat Parameter Architecture<\/h2><h3 class=\"wp-block-heading\">Simplicity<\/h3><ul class=\"wp-block-list\"><li>Single payload extraction pattern across all components<\/li><li>No complex nested structure navigation<\/li><li>Clear parameter availability and access<\/li><\/ul><h3 class=\"wp-block-heading\">Extensibility<\/h3><ul class=\"wp-block-list\"><li>New parameter types automatically available to all components<\/li><li>Filter-based parameter injection<\/li><li>No signature changes required for new functionality<\/li><\/ul><h3 class=\"wp-block-heading\">Consistency<\/h3><ul class=\"wp-block-list\"><li>Unified payload interface across steps, handlers, and tools<\/li><li>Consistent parameter naming and structure<\/li><li>Predictable parameter availability<\/li><\/ul><h3 class=\"wp-block-heading\">Debugging<\/h3><ul class=\"wp-block-list\"><li>Easy parameter inspection and logging<\/li><li>Clear parameter source identification<\/li><li>Simplified debugging of parameter flow<\/li><\/ul><p>This parameter system enables flexible, extensible component development while maintaining consistency and simplicity across the entire Data Machine architecture.<\/p>","protected":false},"excerpt":{"rendered":"<p>Unified flat parameter architecture for all Data Machine components, providing consistent interfaces across steps, handlers, and tools while maintaining extensibility and simplicity. Architecture Overview Data Machine uses an engine data&#8230;<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"footnotes":""},"tags":[],"project":[505],"project_type":[484],"class_list":["post-4945","documentation","type-documentation","status-publish","hentry","project-endpoints","project_type-wordpress-plugins"],"project_info":{"id":487,"name":"Data Machine","slug":"data-machine"},"project_type_info":{"id":484,"name":"WordPress Plugins","slug":"wordpress-plugins"},"_links":{"self":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation\/4945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation"}],"about":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/types\/documentation"}],"version-history":[{"count":5,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation\/4945\/revisions"}],"predecessor-version":[{"id":11416,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation\/4945\/revisions\/11416"}],"wp:attachment":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/media?parent=4945"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/tags?post=4945"},{"taxonomy":"project","embeddable":true,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/project?post=4945"},{"taxonomy":"project_type","embeddable":true,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/project_type?post=4945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}