WP Webhooks / Examples / Gravity Forms Webhooks
Example · Gravity Forms

Gravity Forms Webhooks Without the Elite Add-On — Built by AI in the Plugin

Gravity Forms keeps webhooks behind the paid Webhooks Add-On. The free alternative: describe the integration to Build with AI and the agent wires gform_after_submission to your endpoint — with field mapping, retries, and a full event log. Manual setup takes five steps if you prefer clicking.

~6 min read Updated Jul 17, 2026
gravityformswebhookn8n

TL;DR

  • No Webhooks Add-On or Elite license needed — Build with AI wires gform_after_submission to any endpoint from one sentence
  • The agent maps numeric field IDs (args.0.1, args.0.2…) to readable keys like name and email from the real captured payload
  • Delivery is queued with automatic retries (1 min, 2 min, 4 min, 8 min — 5 attempts), full event log, and one-click replay
/ Build with AI

Describe It Once — The Agent Builds It

This example uses Webhook Actions by Flow Systems — a free WordPress plugin whose admin opens on the Build with AI screen: describe the integration or automation you want, and the agent proposes a plan you can edit, then builds and tests it for you.

Open Webhook Actions in the WordPress admin and type:

prompt — paste into Build with AI

When a Gravity Forms form is submitted, send the entry as JSON to my webhook: https://your-n8n-url/webhook/test
Build with AI — describe the Gravity Forms integration in plain language and press Build

The agent first gathers context — you'll see read-only ability chips like list_triggers and get_trigger_schema as it scans the action hooks available on your site and finds gform_after_submission, which fires once per successful entry after validation passes and the entry is stored.

It then proposes an ordered plan: create the webhook, point it at your endpoint, and — once a captured payload exists — map the numeric Gravity Forms field IDs to readable keys. With "Review plan before running" enabled you can edit any step before it executes.

The proposed plan — trigger, endpoint, and field mapping as editable steps before anything is created

When the run finishes you get "Build complete." with a one-click enable toggle. New webhooks are always created disabled — nothing fires until you confirm. Endpoint auth goes through the encrypted Credentials Vault (auth_credential_id), never plaintext headers, and the agent will never ask you to paste a secret into the chat.

Build complete — review the result, flip the enable toggle, and submit a test entry
FIG 01 — Gravity Forms → Webhook Actions → n8n
/ Manual Setup

Prefer to Set It Up by Hand?

The same result takes five steps in the admin UI — no AI provider needed:

  1. Install the plugin

    Search for FlowSystems in Plugins → Add Plugin — it narrows the WordPress.org search to exactly one result.

  2. Create a new webhook

    Go to Webhooks → Add Webhook, name it (e.g., "Gravity Forms → n8n").

  3. Select the trigger

    Set the WordPress action hook to gform_after_submission — it fires once per successful Gravity Forms entry.

    action hook — paste into the trigger field

    gform_after_submission
  4. Set the endpoint URL

    For n8n: add a Webhook node, set HTTP Method to POST, and copy its Production URL into the plugin's webhook URL field. The full n8n path — bearer auth, payload mapping, end-to-end test — is in Send Gravity Forms Submissions to n8n via Webhook.

  5. Save and test

    Submit your Gravity Forms form. Check the Event Log in the plugin admin to see the delivery status and the raw payload that was sent.

    Gravity Forms webhooks in action — form submission, Event Log delivery status, and raw payload in log details

Writing the integration yourself with gform_after_submission and wp_remote_post()? The hook parameters, rgar() field access, and why bare HTTP calls silently drop entries in production are covered in the gform_after_submission hook reference.

/ Payload

Example Payload

Here's what a typical Gravity Forms submission looks like when it arrives at your endpoint. The args property is an array — args[0] is the entry, args[1] is the full form definition (fields, confirmations, notifications) and is omitted here for brevity.

Field values are stored under their numeric field ID as string keys: "1" is Full Name, "2" is Email, and so on.

POST body — application/json (args[1] form definition omitted)

{
  "event": {
    "id": "efab972c-09bc-460b-9ec3-ad63484b3b14",
    "timestamp": "2026-04-01T15:30:47Z",
    "version": "1.0"
  },
  "hook": "gform_after_submission",
  "args": [
    {
      "id": "3",
      "status": "active",
      "form_id": "1",
      "ip": "172.22.0.1",
      "source_url": "https://your-wordpress-site.com/gravity-forms-example/",
      "currency": "USD",
      "date_created": "2026-04-01 15:30:47",
      "created_by": "1",
      "1": "Mateusz",
      "2": "[email protected]",
      "3": "(150) 010-0900",
      "4": "general",
      "5": "Hey, this is example test form message!"
    }
  ],
  "timestamp": 1775057447,
  "site": {
    "url": "https://your-wordpress-site.com"
  }
}

Numeric keys are unwieldy in workflows — which is why the field mapping matters. Build with AI applies it for you via the captured payload (dot-notation paths like args.0.1name), so every future delivery arrives with name, email, phone instead of "1", "2", "3". You can do the same in the admin UI without code:

Gravity Forms webhooks payload mapping — selecting and renaming fields via the plugin UI

Mapping is also scriptable over HTTP — see the REST API reference for the PUT /schemas route.

/ Reliability

What You Get Beyond the Setup

Every delivery is dispatched from a background queue, so form submissions are never blocked by a slow or unavailable endpoint. Failures retry automatically with exponential backoff — 1 min, 2 min, 4 min, 8 min, 5 attempts — and every attempt is logged with status code and response body. Anything that exhausts its retries stays in the event log, replayable from the admin UI or via the REST API (POST /wp-json/fswa/v1/logs/{id}/retry) — without asking the user to resubmit.

Why this matters in production — and why bare wp_remote_post() integrations lose leads silently — is covered in Why WordPress webhooks silently fail in production and How the retry and replay system works.

/Notes
WordPress Webhooks: Setup, Examples, and Why They Fail — complete guide to how WordPress webhooks work and why they break
Webhook Actions by Flow Systems — plugin overview
Send Gravity Forms Submissions to n8n via Webhook — full tutorial with bearer auth, payload mapping, and end-to-end test recipe
Gravity Forms hooks reference — every submission, entry, and validation hook
WordPress Webhook REST API — retry, replay, and field mapping
FAQ

Common questions always ask.

Don't see yours? Open an issue on GitHub or check the full reference in the API docs.

Can AI set up my Gravity Forms webhook? +
Yes. The free Webhook Actions by Flow Systems plugin includes Build with AI — describe the integration in plain language ("When a Gravity Forms form is submitted, send the entry as JSON to my endpoint"), and the agent discovers the gform_after_submission hook on your site, proposes a plan you can edit, then creates the webhook with trigger, endpoint, and field mapping configured. New webhooks are created disabled until you confirm.
Does Gravity Forms support webhooks natively? +
Gravity Forms has a Webhooks Add-On (paid, requires Elite license) but no built-in webhook support in the base plugin. A free alternative is a queue-based webhook plugin like Webhook Actions by Flow Systems, which triggers on the gform_after_submission action and adds automatic retries and delivery logging on top.
What are Gravity Forms field IDs? +
Every field in a Gravity Forms form has a numeric ID assigned in the form builder. In the gform_after_submission hook, field values are stored in the $entry array under their field ID as a string key: $entry['1'] for field 1, $entry['2'] for field 2, and so on. Use the rgar() helper to safely read these values: rgar($entry, '1'). Checkbox sub-fields use dot notation: rgar($entry, '6.1').
What happens if my endpoint is down when a Gravity Forms submission fires? +
With a bare wp_remote_post() call, the data is lost silently — there's no retry and no log entry. With a queue-based system, the failed delivery is stored and retried automatically with exponential backoff (1 min, 2 min, 4 min, 8 min — 5 attempts). You can also replay any failed submission manually from the WordPress admin.
Can I retry failed Gravity Forms webhook submissions? +
Yes, if you use a plugin with retry support. Webhook Actions by Flow Systems retries failed deliveries automatically and also exposes a REST API endpoint (POST /wp-json/fswa/v1/logs/{id}/retry) that lets you replay any past submission — including successful ones.
Ready

Your next automation is
one sentence away.

$ wp plugin install flowsystems-webhook-actions --activate