Ninja Forms

Flexible WordPress forms with add-ons and conditional logic.

Keys required. Create a site in the dashboard and copy your site key (HTML) and secret key (server). Replace sq_live_your_key in the snippets below.

How this integration works

Same three steps as every other platform — only the paste location and server hook change.

StepWhat you do for Ninja Forms
1 Load squeaker.js once site-wide (footer or plugin).
2 Ninja Forms → Build → HTML field — add the widget above the submit button.
3 Hook ninja_forms_before_submission to verify squeaker-token before the entry is saved.

Where to put the widget

Ninja Forms → Build → HTML field — add the widget above the submit button.

Server-side hook (WordPress)

Verify the token in ninja_forms_before_submission before the form plugin saves the submission.

Use ninja_forms_submission_errors to surface a user-facing error.

Recommended settings

SettingValue
Widget mode Auto (recommended) — Runs on form submit — best for most forms
Form selector form.ninja-forms-form (used in data-form for auto mode)
Server verify PHP

Copy-paste snippet

Paste into your Ninja Forms form or template. Load squeaker.js once per page.

<!-- Ninja Forms → Build → HTML field — add the widget above the submit button. -->
<squeaker-widget
  data-sitekey="sq_live_your_key"
  data-api="https://api.squeaker.cc/v1"
  data-mode="auto"
  data-theme="light"
  data-form="form.ninja-forms-form"
></squeaker-widget>

<!-- Load once site-wide (footer or plugin) -->
<script src="https://cdn.squeaker.cc/squeaker.js" async defer></script>

<!-- functions.php — Use ninja_forms_submission_errors to surface a user-facing error. -->
add_action('ninja_forms_before_submission', function () {
    $token = $_POST['squeaker-token'] ?? '';
    // POST to https://api.squeaker.cc/v1/verify with SQUEAKER_SECRET — wp_die() or return error if invalid
});

Server verification

Read squeaker-token from the request and POST to /v1/verify with your secret key. Full reference: Server verify docs.

$token = $_POST['squeaker-token'] ?? '';
if ($token === '') {
    http_response_code(400);
    exit('Missing token');
}

$apiUrl = getenv('SQUEAKER_API_URL') ?: 'https://api.squeaker.cc/v1';
$payload = json_encode([
    'secret' => getenv('SQUEAKER_SECRET'),
    'token' => $token,
    'remoteip' => $_SERVER['REMOTE_ADDR'] ?? null,
]);
$ctx = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => "Content-Type: application/json\r\n",
        'content' => $payload,
    ],
]);
$response = file_get_contents("{$apiUrl}/verify", false, $ctx);
$result = json_decode($response, true);
if (!$result['success']) {
    http_response_code(403);
    exit($result['error'] ?? 'Invalid token');
}

// Token valid — process the form

Open setup generator with Ninja Forms pre-selected · Browse all platforms