{"id":346679,"date":"2026-08-04T01:15:48","date_gmt":"2026-08-04T01:15:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/webhook-engine\/"},"modified":"2026-08-04T01:15:13","modified_gmt":"2026-08-04T01:15:13","slug":"deftmind-hookwright","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/deftmind-hookwright\/","author":23536647,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Deftmind Hookwright - Webhooks, REST API, Data Display & AI Chat","header_author":"Deftmind Labs","header_description":"Display webhook data on your site, and add webhook-powered forms and private AI chat - with the intelligence in your own workflow.","assets_banners_color":"ca9ab3","last_updated":"2026-08-04 01:15:13","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/selar.com\/showlove\/deftmindlabs","header_plugin_uri":"https:\/\/deftmindlabs.com\/hookwright\/","header_author_uri":"https:\/\/deftmindlabs.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":33,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"deftmindlabs","date":"2026-08-04 01:15:13"}},"upgrade_notice":{"1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3633579,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3633579,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3633579,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3633579,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3633579,"resolution":"1","location":"assets","locale":"","width":1519,"height":725},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3633579,"resolution":"2","location":"assets","locale":"","width":1466,"height":682},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3633579,"resolution":"3","location":"assets","locale":"","width":1739,"height":826},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3633579,"resolution":"4","location":"assets","locale":"","width":1702,"height":841},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3633579,"resolution":"5","location":"assets","locale":"","width":1533,"height":835}},"screenshots":{"1":"Ask a question on any page. Your own workflow answers, and the reply renders in place - formatted, with no page reload.","2":"Conversation mode turns the same form into a threaded chat. Each turn sends the running conversation to your workflow, so it can answer with context. Nothing is stored on your site.","3":"Three ways to get the answer back: wait for it, send one way and ignore the reply, or - for a workflow that takes minutes - let it post the answer to a one-time return URL.","4":"One screen connects your site to any automation platform. Your webhook address and any token stay on the server and never reach a visitor's browser.","5":"Payloads pushed in from your automation arrive in named channels, with a ready-to-copy shortcode and every displayable field detected for you."}},"plugin_section":[262246],"plugin_tags":[2353,569,5707,23853,15439],"plugin_category":[41],"plugin_contributors":[274390],"plugin_business_model":[],"class_list":["post-346679","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-ai","plugin_tags-automation","plugin_tags-chat","plugin_tags-rest-api","plugin_tags-webhook","plugin_category-communication","plugin_contributors-deftmindlabs","plugin_committers-deftmindlabs"],"banners":{"banner":"https:\/\/ps.w.org\/deftmind-hookwright\/assets\/banner-772x250.png?rev=3633579","banner_2x":"https:\/\/ps.w.org\/deftmind-hookwright\/assets\/banner-1544x500.png?rev=3633579","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/deftmind-hookwright\/assets\/icon-128x128.png?rev=3633579","icon_2x":"https:\/\/ps.w.org\/deftmind-hookwright\/assets\/icon-256x256.png?rev=3633579","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/deftmind-hookwright\/assets\/screenshot-1.png?rev=3633579","caption":"Ask a question on any page. Your own workflow answers, and the reply renders in place - formatted, with no page reload."},{"src":"https:\/\/ps.w.org\/deftmind-hookwright\/assets\/screenshot-2.png?rev=3633579","caption":"Conversation mode turns the same form into a threaded chat. Each turn sends the running conversation to your workflow, so it can answer with context. Nothing is stored on your site."},{"src":"https:\/\/ps.w.org\/deftmind-hookwright\/assets\/screenshot-3.png?rev=3633579","caption":"Three ways to get the answer back: wait for it, send one way and ignore the reply, or - for a workflow that takes minutes - let it post the answer to a one-time return URL."},{"src":"https:\/\/ps.w.org\/deftmind-hookwright\/assets\/screenshot-4.png?rev=3633579","caption":"One screen connects your site to any automation platform. Your webhook address and any token stay on the server and never reach a visitor's browser."},{"src":"https:\/\/ps.w.org\/deftmind-hookwright\/assets\/screenshot-5.png?rev=3633579","caption":"Payloads pushed in from your automation arrive in named channels, with a ready-to-copy shortcode and every displayable field detected for you."}],"raw_content":"<!--section=description-->\n<p>Deftmind Hookwright connects WordPress to the automation platform or service you already use, in both directions, and turns what comes back into something visitors can see.<\/p>\n\n<p><strong>Receive and display.<\/strong> Point any workflow at the plugin's secure endpoint. Payloads arrive into named channels and appear on any page through shortcodes, as formatted articles, data tables, or live-updating feeds.<\/p>\n\n<p><strong>Send and show the reply.<\/strong> Add a form to any page. Submissions are proxied through your own server to your webhook, and the reply renders in place without a page reload. Your authentication token never reaches the browser. If your platform cannot answer on the connection the form opened - or the work takes minutes - callback mode hands it a one-time return URL to post the answer back to instead.<\/p>\n\n<p><strong>Private AI chat, without vendor lock-in.<\/strong> Turn on conversation mode and a form becomes a threaded chat. Each turn sends the running conversation to your workflow, so a retrieval-augmented (RAG) pipeline can answer with context. The intelligence stays in your workflow: no API keys stored in WordPress, any model or vector database, and no third-party chat service in the middle.<\/p>\n\n<p><strong>Anonymous and ephemeral by design.<\/strong> Visitors need no account. Nothing about a conversation is written to your database; the thread lives in the visitor's browser and is gone on reload. For sites answering sensitive questions, that is a feature, not a limitation.<\/p>\n\n<p><strong>Works with the form you already have.<\/strong> If your site already uses a form plugin, add a couple of data attributes to its markup and Hookwright handles the round trip without replacing anything.<\/p>\n\n<h4>Built for safety<\/h4>\n\n<ul>\n<li>Inbound endpoint disabled until you set a shared secret, then verified with a timing-safe comparison.<\/li>\n<li>Payload content is escaped or sanitised on every path. Markdown is parsed in safe mode and then filtered again through WordPress's own post sanitiser.<\/li>\n<li>Outbound requests use WordPress's protected HTTP functions, which reject internal and reserved addresses.<\/li>\n<li>Rate limiting, honeypot spam trapping, size caps and request timeouts on public endpoints.<\/li>\n<\/ul>\n\n<h4>Where data goes<\/h4>\n\n<p>This plugin only contacts the URLs you configure. It sends nothing to the plugin author, contains no tracking, and makes no external requests of its own. It is not an AI product and calls no AI service of its own: any intelligence comes from the workflow you point it at.<\/p>\n\n<h4>Third-party code<\/h4>\n\n<p>This plugin bundles Parsedown 1.7.4 by Emanuil Rusev (https:\/\/parsedown.org), used in safe mode to render Markdown. Parsedown is MIT licensed and the full licence text is reproduced in <code>includes\/class-hookwright-markdown.php<\/code>. The class is renamed so it cannot collide with another plugin bundling its own copy; it is otherwise unmodified.<\/p>\n\n<h4>Deftmind Hookwright Pro<\/h4>\n\n<p>An optional add-on that extends this plugin with content publishing: incoming payloads become real WordPress posts or pages - titles, Markdown bodies, categories, tags and featured images mapped to native fields - and the reply your workflow sends back to a form can be saved the same way.<\/p>\n\n<p>Details and download: https:\/\/deftmindlabs.com\/hookwright\/<\/p>\n\n<p>Documentation: https:\/\/deftmindlabs.com\/docs-reference\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin through Plugins &gt; Add New &gt; Upload, or install from the plugin directory.<\/li>\n<li>Activate it.<\/li>\n<li>Open Deftmind Hookwright in the admin menu and configure a webhook URL, an inbound secret, or both.<\/li>\n<li>Place <code>[hookwright_display]<\/code> or <code>[hookwright_form]<\/code> on a page using a Shortcode block.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20specific%20automation%20platform%3F\"><h3>Do I need a specific automation platform?<\/h3><\/dt>\n<dd><p>No. Anything that can send or receive an HTTP request with JSON works, whether that is a hosted automation service, a self-hosted workflow tool, or your own script.<\/p><\/dd>\n<dt id=\"does%20this%20include%20an%20ai%3F\"><h3>Does this include an AI?<\/h3><\/dt>\n<dd><p>No, and deliberately so. Hookwright is the interface; your workflow supplies the intelligence. That means no API keys stored in WordPress and no lock-in to one AI vendor.<\/p><\/dd>\n<dt id=\"are%20chat%20conversations%20stored%3F\"><h3>Are chat conversations stored?<\/h3><\/dt>\n<dd><p>No. The conversation exists only in the visitor's browser for the life of the page. Nothing is written to your database and nothing is sent to the plugin author.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20help%3F\"><h3>Where do I get help?<\/h3><\/dt>\n<dd><p>Use this plugin's support forum on WordPress.org. It helps to say what you expected, what happened instead, which response handling mode the form uses, and anything listed under Recent send problems on the Settings screen.<\/p><\/dd>\n<dt id=\"how%20do%20i%20report%20a%20security%20issue%20or%20a%20bug%3F\"><h3>How do I report a security issue or a bug?<\/h3><\/dt>\n<dd><p>Email support@deftmindlabs.com. Please report security problems privately rather than in the public forum, and allow time for a fix to ship before disclosing them. This address is for security reports and bug reports only - for help using the plugin, the support forum above is the faster route.<\/p><\/dd>\n<dt id=\"my%20workflow%20takes%20longer%20than%20the%20request%20timeout\"><h3>My workflow takes longer than the request timeout<\/h3><\/dt>\n<dd><p>Use Callback response handling. The plugin hands your workflow a one-time return URL in the payload; the workflow accepts the request, does its work, and posts the answer back whenever it is ready. The visitor keeps waiting on the page, and no PHP worker is held open in the meantime.<\/p><\/dd>\n<dt id=\"i%20updated%20the%20plugin%20and%20something%20looks%20wrong\"><h3>I updated the plugin and something looks wrong<\/h3><\/dt>\n<dd><p>Clear your caching plugin and any CDN cache, then reload with a hard refresh (Ctrl+Shift+R or Cmd+Shift+R). Page caches often keep serving old HTML and old JavaScript after an update.<\/p><\/dd>\n<dt id=\"my%20payload%20shows%20as%20a%20table%20instead%20of%20formatted%20text\"><h3>My payload shows as a table instead of formatted text<\/h3><\/dt>\n<dd><p>Set the default under Deftmind Hookwright &gt; Settings, choose a mode on the form, or add the attribute directly, for example <code>[hookwright_display render=\"markdown\"]<\/code>. The shortcode attribute always wins. In auto mode the plugin renders an article when it recognises a text field in the payload and a table otherwise.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20my%20automation%20platform%3F\"><h3>Does it work with my automation platform?<\/h3><\/dt>\n<dd><p>Yes. Payload shapes are normalised rather than assumed: wrapper objects such as <code>{\"data\":{...}}<\/code> are unwrapped, key names are matched loosely so <code>postTitle<\/code> and <code>post_title<\/code> both work, and category or tag lists are accepted as arrays, JSON-encoded strings, arrays of objects, or plain delimited text.<\/p><\/dd>\n<dt id=\"my%20shortcode%20shows%20%22no%20data%20yet%22\"><h3>My shortcode shows \"No data yet\"<\/h3><\/dt>\n<dd><p>The channel name in the shortcode must match the channel your webhook sends exactly. Check Deftmind Hookwright &gt; Channels for the names actually received, then clear your page cache.<\/p><\/dd>\n<dt id=\"payload%20html%20shows%20as%20plain%20text\"><h3>Payload HTML shows as plain text<\/h3><\/dt>\n<dd><p>That is intentional. Raw HTML in a payload is escaped rather than rendered, because payload content is treated as untrusted. Send Markdown instead.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<li>Two-way connection to any automation platform: a form sends a visitor's question to your workflow and renders the reply in place, and an authenticated endpoint receives payloads for display.<\/li>\n<li>Three ways to receive a reply - wait for it, send one way, or Callback, where a workflow that cannot answer on the open connection posts its answer to a one-time return URL instead. Suits platforms that cannot respond to an incoming webhook, and workflows that run for minutes.<\/li>\n<li>Conversation mode turns a form into a threaded chat, sending the running conversation to your workflow each turn. Nothing is stored on the site.<\/li>\n<li>Incoming payloads arrive in named channels and display through shortcodes as articles, tables or live-updating feeds.<\/li>\n<li>Bridge mode adds the same round trip to a form you already have, using data attributes on your own markup.<\/li>\n<li>Secure by default: the inbound endpoint stays closed until a secret of at least 16 characters is set, outbound URLs are checked against private and reserved ranges, all rendered content is escaped or sanitised, and the plugin contacts nothing but the addresses you configure.<\/li>\n<\/ul>","raw_excerpt":"Display webhook data on your site, and add webhook-powered forms and private AI chat. Bring your own workflow.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/346679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=346679"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/deftmindlabs"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=346679"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=346679"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=346679"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=346679"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=346679"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=346679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}