<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>WP Webhooks — Engineering Notes</title>
    <link>https://wpwebhooks.org/blog/</link>
    <description>Engineering notes on WordPress webhooks: architecture, reliability, delivery, retries, and integrations. New post every week.</description>
    <language>en-us</language>
    <atom:link href="https://wpwebhooks.org/blog/feed.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>Fri, 17 Jul 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>Gemini JSON Mode Can Drop the Final Closing Brace</title>
      <link>https://wpwebhooks.org/blog/gemini-json-mode-truncated-response/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/gemini-json-mode-truncated-response/</guid>
      <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>AI integration</category>
      <description>A real bug post-mortem: Gemini’s JSON mode returned our agent’s envelope without its closing brace — twice, deterministically — and the conservative repair that recovers it without ever inventing content.</description>
    </item>
    <item>
      <title>AI Agent Capability Drift: When the Prompt Lies About Tools</title>
      <link>https://wpwebhooks.org/blog/ai-agent-capability-drift/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/ai-agent-capability-drift/</guid>
      <pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>AI integration</category>
      <description>A real bug post-mortem: a class_exists check made our agent’s prompt advertise tools the executor silently dropped — and the three fixes that shipped in 2.2.0.</description>
    </item>
    <item>
      <title>as_schedule_single_action: Signature &amp; Parameters</title>
      <link>https://wpwebhooks.org/blog/as-schedule-single-action-reference/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/as-schedule-single-action-reference/</guid>
      <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>WordPress internals</category>
      <description>as_schedule_single_action documentation: full PHP signature, the timestamp and $unique parameters, return value, and code examples for delayed jobs.</description>
    </item>
    <item>
      <title>WordPress to Zapier Webhook: Trigger Zaps from Any Hook</title>
      <link>https://wpwebhooks.org/blog/wordpress-zapier-webhook/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-zapier-webhook/</guid>
      <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>WordPress integrations</category>
      <description>Connect WordPress to Zapier: send any post, form, or WooCommerce event to a Zap via webhook — Catch Hook setup, payload format, and a self-hosted alternative.</description>
    </item>
    <item>
      <title>as_schedule_recurring_action: Signature &amp; Interval</title>
      <link>https://wpwebhooks.org/blog/as-schedule-recurring-action-reference/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/as-schedule-recurring-action-reference/</guid>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>WordPress internals</category>
      <description>as_schedule_recurring_action documentation: PHP signature, first-run timestamp, interval seconds, group and $unique parameters, with recurring code examples.</description>
    </item>
    <item>
      <title>WordPress Abilities API: Expose Plugin Features to AI</title>
      <link>https://wpwebhooks.org/blog/wordpress-abilities-api-ai-agents/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-abilities-api-ai-agents/</guid>
      <pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>AI integration</category>
      <description>What the WordPress Abilities API is, how wp_register_ability() works, and how to expose plugin features to AI agents and MCP clients safely.</description>
    </item>
    <item>
      <title>WordPress AI Client: wp_ai_client_prompt() Explained</title>
      <link>https://wpwebhooks.org/blog/wordpress-ai-client-wp-ai-client-prompt/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-ai-client-wp-ai-client-prompt/</guid>
      <pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>AI integration</category>
      <description>How the WordPress 7.0 AI Client works: provider Connectors, wp_ai_client_prompt(), model fallback chains, and when you still need your own API key.</description>
    </item>
    <item>
      <title>Build an AI Agent in a WordPress Plugin: Architecture</title>
      <link>https://wpwebhooks.org/blog/wordpress-ai-agent-plugin-architecture/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-ai-agent-plugin-architecture/</guid>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>AI integration</category>
      <description>Inside an in-admin AI agent for WordPress: plan-first JSON envelopes, typed ability steps, confirmation gates, undo stacks, and trace logging.</description>
    </item>
    <item>
      <title>ActionScheduler_DBStore Deadlock: The Fix &amp; Resolution</title>
      <link>https://wpwebhooks.org/blog/woocommerce-action-scheduler-mysql-deadlocks/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/woocommerce-action-scheduler-mysql-deadlocks/</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>ActionScheduler_DBStore::claim_actions throws MySQL deadlocks under concurrent WooCommerce queue runners — why it happens and the exact fix.</description>
    </item>
    <item>
      <title>Action Scheduler: Prevent Duplicate Scheduled Actions</title>
      <link>https://wpwebhooks.org/blog/action-scheduler-prevent-duplicate-actions/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/action-scheduler-prevent-duplicate-actions/</guid>
      <pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>WordPress internals</category>
      <description>Stop Action Scheduler queuing duplicate jobs with the $unique parameter and as_has_scheduled_action() — exact signatures, behaviour, and gotchas.</description>
    </item>
    <item>
      <title>Webhook Retry Policy: Exponential Backoff &amp; Schema</title>
      <link>https://wpwebhooks.org/blog/webhook-retry-policy-exponential-backoff/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/webhook-retry-policy-exponential-backoff/</guid>
      <pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>Design a webhook retry policy: exponential backoff timing, what to retry, max attempts, dead-lettering, and the database schema to track deliveries.</description>
    </item>
    <item>
      <title>Gravity Forms Hooks: Developer Reference &amp; Examples</title>
      <link>https://wpwebhooks.org/blog/gravity-forms-hooks-reference/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/gravity-forms-hooks-reference/</guid>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Gravity Forms</category>
      <description>A developer reference to the most useful Gravity Forms hooks: submission, validation, field, entry, and notification filters — with examples.</description>
    </item>
    <item>
      <title>WP Webhooks Pro Alternative: Webhook Actions Compared</title>
      <link>https://wpwebhooks.org/blog/wp-webhooks-alternative/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wp-webhooks-alternative/</guid>
      <pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Comparisons</category>
      <description>Looking for a WP Webhooks Pro alternative? A fair comparison of Webhook Actions vs WP Webhooks — delivery reliability, features, free tiers, and pricing.</description>
    </item>
    <item>
      <title>WordPress to HubSpot: Plugin vs Zapier vs Webhooks</title>
      <link>https://wpwebhooks.org/blog/wordpress-hubspot-integration-methods/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-hubspot-integration-methods/</guid>
      <pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Comparisons</category>
      <description>Three ways to connect WordPress to HubSpot compared: the official HubSpot plugin, Zapier middleware, and direct webhooks — cost, control, and reliability.</description>
    </item>
    <item>
      <title>WordPress External Cron: Services, Setup, and Free Options</title>
      <link>https://wpwebhooks.org/blog/wordpress-external-cron-services/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-external-cron-services/</guid>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>WordPress internals</category>
      <description>Fix unreliable WP-Cron with a free external cron service. Covers cron-job.org, EasyCron, UptimeRobot setup, DISABLE_WP_CRON config, and the zero-config Webhook Actions option.</description>
    </item>
    <item>
      <title>gform_after_update_entry Hook: Gravity Forms Webhook</title>
      <link>https://wpwebhooks.org/blog/gravity-forms-gform-after-update-entry-webhook/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/gravity-forms-gform-after-update-entry-webhook/</guid>
      <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Gravity Forms</category>
      <description>How the gform_after_update_entry hook fires on Gravity Forms entry edits — its parameters, original vs updated values, and sending a webhook on update.</description>
    </item>
    <item>
      <title>wpcf7_mail_sent Hook: Contact Form 7 to Webhook Guide</title>
      <link>https://wpwebhooks.org/blog/wordpress-wpcf7-mail-sent-hook/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-wpcf7-mail-sent-hook/</guid>
      <pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>WordPress integrations</category>
      <description>How wpcf7_mail_sent fires, what get_posted_data() returns, and the reliable way to send Contact Form 7 submissions to any webhook endpoint.</description>
    </item>
    <item>
      <title>as_enqueue_async_action: PHP Signature &amp; Parameters</title>
      <link>https://wpwebhooks.org/blog/action-scheduler-api-functions/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/action-scheduler-api-functions/</guid>
      <pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>WordPress internals</category>
      <description>as_enqueue_async_action documentation: PHP signature, the $unique parameter, plus as_schedule_single_action and cancel functions with code examples.</description>
    </item>
    <item>
      <title>WooCommerce Webhooks via Action Scheduler: Retry &amp; Replay</title>
      <link>https://wpwebhooks.org/blog/woocommerce-webhooks-action-scheduler/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/woocommerce-webhooks-action-scheduler/</guid>
      <pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>Send WooCommerce order events as reliable webhooks with Action Scheduler — async queue, retries with backoff, conditional dispatch, and one-click replay.</description>
    </item>
    <item>
      <title>WordPress Background Jobs: Async Queue Without Blocking</title>
      <link>https://wpwebhooks.org/blog/wordpress-async-background-processing/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-async-background-processing/</guid>
      <pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>Process WordPress background jobs asynchronously — non-blocking dispatch, an Action Scheduler queue, retries with backoff, and reliable webhook delivery.</description>
    </item>
    <item>
      <title>action_scheduler_queue_runner_concurrent_batches Docs</title>
      <link>https://wpwebhooks.org/blog/action-scheduler-concurrent-batches-filter/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/action-scheduler-concurrent-batches-filter/</guid>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>action_scheduler_queue_runner_concurrent_batches filter docs: official parameters, batch-size tuning, and code examples for Action Scheduler.</description>
    </item>
    <item>
      <title>Send Gravity Forms Submissions to n8n via Webhook</title>
      <link>https://wpwebhooks.org/blog/gravity-forms-to-n8n-webhook/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/gravity-forms-to-n8n-webhook/</guid>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>Forward Gravity Forms entries to n8n with a reliable, retry-capable webhook — payload mapping, HMAC signing, error handling, and end-to-end test recipe.</description>
    </item>
    <item>
      <title>WP-Cron Documentation: Every Function, Constant &amp; CLI</title>
      <link>https://wpwebhooks.org/blog/wp-cron-developer-reference/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wp-cron-developer-reference/</guid>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>The WP-Cron documentation WordPress never wrote: wp_schedule_event, wp_doing_cron, spawn_cron, DISABLE_WP_CRON, and every WP-CLI cron command.</description>
    </item>
    <item>
      <title>Action Scheduler WordPress: Full Docs &amp; Reference</title>
      <link>https://wpwebhooks.org/blog/action-scheduler-wordpress/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/action-scheduler-wordpress/</guid>
      <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>Action Scheduler WordPress documentation: queue runner, retry logic, concurrency tuning, and webhook delivery — official function reference.</description>
    </item>
    <item>
      <title>Contact Form 7 to Webhook: Send CF7 to Any Endpoint</title>
      <link>https://wpwebhooks.org/blog/contact-form-7-webhook/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/contact-form-7-webhook/</guid>
      <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>Send Contact Form 7 submissions to n8n, Zapier, or any webhook URL. wpcf7_before_send_mail hook, field mapping, retry on failure — with Webhook Actions.</description>
    </item>
    <item>
      <title>gform_after_submission Hook Reference: Gravity Forms Webhook</title>
      <link>https://wpwebhooks.org/blog/gravity-forms-gform-after-submission-webhook/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/gravity-forms-gform-after-submission-webhook/</guid>
      <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>Complete gform_after_submission reference — hook parameters, accessing entry fields, async dispatch patterns, and Webhook Actions plugin setup.</description>
    </item>
    <item>
      <title>From do_action to HTTP: WordPress Webhook Delivery</title>
      <link>https://wpwebhooks.org/blog/wordpress-webhook-delivery-engineering/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-webhook-delivery-engineering/</guid>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>How WordPress webhook plugins discover hooks, register listeners, and build delivery payloads. Engineering internals with real code.</description>
    </item>
    <item>
      <title>WordPress Cron Job: Why WP-Cron Fails (And How to Fix)</title>
      <link>https://wpwebhooks.org/blog/cron-job-for-wordpress/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/cron-job-for-wordpress/</guid>
      <pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>WordPress cron job not running? WP-Cron only fires on page load. Replace it with a real system cron in two lines — full setup with WP-CLI and Action Scheduler.</description>
    </item>
    <item>
      <title>Create and Manage WordPress Webhooks via REST API</title>
      <link>https://wpwebhooks.org/blog/create-manage-wordpress-webhooks-rest-api/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/create-manage-wordpress-webhooks-rest-api/</guid>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>Learn how to create and manage WordPress webhooks via REST API. Control endpoints, enable/disable integrations, and automate setups without code deployments.</description>
    </item>
    <item>
      <title>WordPress Webhooks REST API: Retry, Replay &amp; Delivery Logs</title>
      <link>https://wpwebhooks.org/blog/wordpress-webhooks-rest-api/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-webhooks-rest-api/</guid>
      <pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>Retry failed webhooks, replay any event, and monitor queue health from a REST API — no wp-admin. Full endpoint reference for the WP Webhooks plugin.</description>
    </item>
    <item>
      <title>WordPress Webhook Retry, Replay &amp; Dead-Letter Queue</title>
      <link>https://wpwebhooks.org/blog/wordpress-webhook-retry-replay-system/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/wordpress-webhook-retry-replay-system/</guid>
      <pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>Learn how to build reliable WordPress webhooks using payload storage, automatic retries for failures, and replay for successful events that need reprocessing.</description>
    </item>
    <item>
      <title>WP-Cron Isn&apos;t Enough: Build Reliable WordPress Webhooks</title>
      <link>https://wpwebhooks.org/blog/async-webhooks-wordpress-wp-cron-not-enough/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/async-webhooks-wordpress-wp-cron-not-enough/</guid>
      <pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>WP-Cron fires on page loads, not on a schedule. Webhooks drop silently under load. Build an async dispatch queue with retry logic — full architecture and code.</description>
    </item>
    <item>
      <title>Why WordPress Webhooks Fail in Production (And the Fix)</title>
      <link>https://wpwebhooks.org/blog/why-wordpress-webhooks-silently-fail-in-production/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/why-wordpress-webhooks-silently-fail-in-production/</guid>
      <pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>WordPress webhooks work locally but drop events in production. Four root causes — WP-Cron, queues, retry logic, observability — and the production fix.</description>
    </item>
    <item>
      <title>Non-Blocking Webhook Architecture in WordPress</title>
      <link>https://wpwebhooks.org/blog/async-webhooks-wordpress/</link>
      <guid isPermaLink="true">https://wpwebhooks.org/blog/async-webhooks-wordpress/</guid>
      <pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate>
      <dc:creator>Mateusz Skorupa</dc:creator>
      <category>Architecture</category>
      <description>How to implement async webhooks in WordPress and WooCommerce. Queue-based dispatch, exponential backoff, failure handling, logging, and production alternatives.</description>
    </item>
  </channel>
</rss>