{
  "generated": "2026-09-13T00:33:05.022Z",
  "product": {
    "id": "gravity-forms-zero-spam",
    "label": "Zero Spam",
    "repo": "GravityKit/gravity-forms-zero-spam",
    "version": "1.10.2",
    "actions": [
      "gf_zero_spam_email_rule_match",
      "gf_zero_spam_token_rejected"
    ],
    "filters": [
      "gf_zero_spam_add_key_field",
      "gf_zero_spam_ai_confidence_threshold",
      "gf_zero_spam_ai_enabled",
      "gf_zero_spam_ai_field_types",
      "gf_zero_spam_ai_prompt",
      "gf_zero_spam_ai_provider",
      "gf_zero_spam_ai_timeout",
      "gf_zero_spam_ai_verdict",
      "gf_zero_spam_check_key_field",
      "gf_zero_spam_check_order",
      "gf_zero_spam_client_ip",
      "gf_zero_spam_email_rules",
      "gf_zero_spam_fallback_token_ttl",
      "gf_zero_spam_rate_limit",
      "gf_zero_spam_token_fetch_timeout",
      "gf_zero_spam_token_ttl"
    ]
  },
  "hooks": [
    {
      "id": "gf_zero_spam_email_rule_match",
      "name": "gf_zero_spam_email_rule_match",
      "type": "action",
      "product": "gravity-forms-zero-spam",
      "description": "Fires when an email matches a rejection rule.",
      "parameters": [
        {
          "name": "rule",
          "type": "array",
          "description": "The matched rule."
        },
        {
          "name": "email",
          "type": "string",
          "description": "The email that matched."
        }
      ],
      "categories": [
        "notifications"
      ],
      "example": "add_action( 'gf_zero_spam_email_rule_match', function($rule, $email) {\n    // Your code here\n}, 10, 2 );",
      "since": "1.5.0",
      "source": {
        "file": "includes/class-email-rejection.php",
        "line": 274
      },
      "url": "/docs/gravity-forms-zero-spam/actions/gf_zero_spam_email_rule_match/",
      "related": []
    },
    {
      "id": "gf_zero_spam_token_rejected",
      "name": "gf_zero_spam_token_rejected",
      "type": "action",
      "product": "gravity-forms-zero-spam",
      "description": "Fires when a submission is rejected by the Zero Spam token check.",
      "parameters": [
        {
          "name": "reason_code",
          "type": "string",
          "description": "Raw rejection reason code. Accepted values: token_missing, bad_format, expired, form_mismatch, sig_invalid, legacy_missing, legacy_invalid."
        },
        {
          "name": "form",
          "type": "array",
          "description": "The form currently being processed."
        },
        {
          "name": "entry",
          "type": "array",
          "description": "The entry currently being processed. Note: pre-save entry; no ID yet."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_action( 'gf_zero_spam_token_rejected', function($reason_code, $form, $entry) {\n    // Your code here\n}, 10, 3 );",
      "since": "1.9.0",
      "source": {
        "file": "includes/class-gf-zero-spam.php",
        "line": 697
      },
      "url": "/docs/gravity-forms-zero-spam/actions/gf_zero_spam_token_rejected/",
      "related": []
    },
    {
      "id": "gf_zero_spam_add_key_field",
      "name": "gf_zero_spam_add_key_field",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Allows the zero spam key field to be disabled by returning false.",
      "parameters": [
        {
          "name": "add_key_field",
          "type": "bool",
          "description": "Whether to add the key field to the form. Default true."
        }
      ],
      "categories": [
        "fields"
      ],
      "example": "add_filter( 'gf_zero_spam_add_key_field', function($add_key_field) {\n    // Modify $add_key_field as needed\n    return $add_key_field;\n}, 10, 1 );",
      "since": "1.4",
      "source": {
        "file": "includes/class-gf-zero-spam.php",
        "line": 320
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_add_key_field/",
      "related": []
    },
    {
      "id": "gf_zero_spam_ai_confidence_threshold",
      "name": "gf_zero_spam_ai_confidence_threshold",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Modifies the AI confidence threshold for the current context.",
      "parameters": [
        {
          "name": "threshold",
          "type": "float",
          "description": "Confidence threshold."
        },
        {
          "name": "context",
          "type": "string",
          "description": "Either \"review\" or \"rescue\"."
        },
        {
          "name": "form",
          "type": "array",
          "description": "The form currently being processed."
        },
        {
          "name": "entry",
          "type": "array",
          "description": "The entry currently being processed."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_ai_confidence_threshold', function($threshold, $context, $form, $entry) {\n    // Modify $threshold as needed\n    return $threshold;\n}, 10, 4 );",
      "since": "1.9.0",
      "source": {
        "file": "includes/class-gf-zero-spam-ai-review.php",
        "line": 1279
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_ai_confidence_threshold/",
      "related": []
    },
    {
      "id": "gf_zero_spam_ai_enabled",
      "name": "gf_zero_spam_ai_enabled",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Modifies whether AI should process this submission for the current context.",
      "parameters": [
        {
          "name": "enabled",
          "type": "bool",
          "description": "Whether AI processing is enabled."
        },
        {
          "name": "context",
          "type": "string",
          "description": "Either \"review\" or \"rescue\"."
        },
        {
          "name": "form",
          "type": "array",
          "description": "The form currently being processed."
        },
        {
          "name": "entry",
          "type": "array",
          "description": "The entry currently being processed."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_ai_enabled', function($enabled, $context, $form, $entry) {\n    // Modify $enabled as needed\n    return $enabled;\n}, 10, 4 );",
      "since": "1.9.0",
      "source": {
        "file": "includes/class-gf-zero-spam-ai-review.php",
        "line": 616
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_ai_enabled/",
      "related": []
    },
    {
      "id": "gf_zero_spam_ai_field_types",
      "name": "gf_zero_spam_ai_field_types",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Modifies field types included in or excluded from AI payloads.",
      "parameters": [
        {
          "name": "field_types",
          "type": "array",
          "description": "Field type rules with included and excluded string arrays."
        },
        {
          "name": "form",
          "type": "array",
          "description": "The form currently being processed."
        },
        {
          "name": "entry",
          "type": "array",
          "description": "The entry currently being processed."
        }
      ],
      "categories": [
        "fields"
      ],
      "example": "add_filter( 'gf_zero_spam_ai_field_types', function($field_types, $form, $entry) {\n    // Modify $field_types as needed\n    return $field_types;\n}, 10, 3 );",
      "since": "1.9.0",
      "source": {
        "file": "includes/class-gf-zero-spam-ai-review.php",
        "line": 998
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_ai_field_types/",
      "related": []
    },
    {
      "id": "gf_zero_spam_ai_prompt",
      "name": "gf_zero_spam_ai_prompt",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Modifies the AI prompt used for spam review and false-positive rescue.",
      "parameters": [
        {
          "name": "prompt",
          "type": "string",
          "description": "The AI prompt."
        },
        {
          "name": "form",
          "type": "array",
          "description": "The form currently being processed."
        },
        {
          "name": "entry",
          "type": "array",
          "description": "The entry currently being processed."
        },
        {
          "name": "payload",
          "type": "string",
          "description": "The serialized payload."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_ai_prompt', function($prompt, $form, $entry, $payload) {\n    // Modify $prompt as needed\n    return $prompt;\n}, 10, 4 );",
      "since": "1.9.0",
      "source": {
        "file": "includes/class-gf-zero-spam-ai-review.php",
        "line": 1212
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_ai_prompt/",
      "related": []
    },
    {
      "id": "gf_zero_spam_ai_provider",
      "name": "gf_zero_spam_ai_provider",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Modifies the AI provider used for the current classification request.",
      "parameters": [
        {
          "name": "provider_id",
          "type": "string",
          "description": "Provider ID, or empty string for automatic selection."
        },
        {
          "name": "context",
          "type": "string",
          "description": "Either \"review\" or \"rescue\"."
        },
        {
          "name": "form",
          "type": "array",
          "description": "The form currently being processed."
        },
        {
          "name": "entry",
          "type": "array",
          "description": "The entry currently being processed."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_ai_provider', function($provider_id, $context, $form, $entry) {\n    // Modify $provider_id as needed\n    return $provider_id;\n}, 10, 4 );",
      "since": "1.9.0",
      "source": {
        "file": "includes/class-gf-zero-spam-ai-review.php",
        "line": 1335
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_ai_provider/",
      "related": []
    },
    {
      "id": "gf_zero_spam_ai_timeout",
      "name": "gf_zero_spam_ai_timeout",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Modifies the per-call AI request timeout.",
      "parameters": [
        {
          "name": "timeout",
          "type": "float",
          "description": "Timeout in seconds."
        },
        {
          "name": "form",
          "type": "array",
          "description": "The form currently being processed."
        },
        {
          "name": "entry",
          "type": "array",
          "description": "The entry currently being processed."
        },
        {
          "name": "payload",
          "type": "string",
          "description": "The serialized payload."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_ai_timeout', function($timeout, $form, $entry, $payload) {\n    // Modify $timeout as needed\n    return $timeout;\n}, 10, 4 );",
      "since": "1.9.0",
      "source": {
        "file": "includes/class-gf-zero-spam-ai-review.php",
        "line": 1571
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_ai_timeout/",
      "related": []
    },
    {
      "id": "gf_zero_spam_ai_verdict",
      "name": "gf_zero_spam_ai_verdict",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Short-circuits AI Spam Review with a deterministic verdict.",
      "parameters": [
        {
          "name": "verdict",
          "type": "array\\",
          "description": "\\WP_Error\\"
        },
        {
          "name": "payload",
          "type": "string",
          "description": "The serialized payload."
        },
        {
          "name": "form",
          "type": "array",
          "description": "The form currently being processed."
        },
        {
          "name": "entry",
          "type": "array",
          "description": "The entry currently being processed."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_ai_verdict', function($verdict, $payload, $form, $entry) {\n    // Modify $verdict as needed\n    return $verdict;\n}, 10, 4 );",
      "since": "1.9.0",
      "source": {
        "file": "includes/class-gf-zero-spam-ai-review.php",
        "line": 1451
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_ai_verdict/",
      "related": []
    },
    {
      "id": "gf_zero_spam_check_key_field",
      "name": "gf_zero_spam_check_key_field",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Modifies whether to process this entry submission for spam.",
      "parameters": [
        {
          "name": "should_check_key_field",
          "type": "bool",
          "description": "Whether the Zero Spam plugin should check for the existence and validity of the key field. Default: true."
        },
        {
          "name": "form",
          "type": "array",
          "description": "The form currently being processed."
        },
        {
          "name": "entry",
          "type": "array",
          "description": "The entry currently being processed."
        }
      ],
      "categories": [
        "fields"
      ],
      "example": "add_filter( 'gf_zero_spam_check_key_field', function($should_check_key_field, $form, $entry) {\n    // Modify $should_check_key_field as needed\n    return $should_check_key_field;\n}, 10, 3 );",
      "since": "1.2",
      "source": {
        "file": "includes/class-gf-zero-spam.php",
        "line": 476
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_check_key_field/",
      "related": []
    },
    {
      "id": "gf_zero_spam_check_order",
      "name": "gf_zero_spam_check_order",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Filters the order in which the spam checks run during form submission.",
      "parameters": [
        {
          "name": "order",
          "type": "array",
          "description": "The check slugs in run order. Must contain 'token', 'shield', and 'ai' exactly once each."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_check_order', function($order) {\n    // Modify $order as needed\n    return $order;\n}, 10, 1 );",
      "since": "1.10.0",
      "source": {
        "file": "includes/class-gf-zero-spam-addon.php",
        "line": 252
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_check_order/",
      "related": []
    },
    {
      "id": "gf_zero_spam_client_ip",
      "name": "gf_zero_spam_client_ip",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Filters the client IP address used for rate limiting.",
      "parameters": [
        {
          "name": "ip",
          "type": "string",
          "description": "The client IP address. Default: $_SERVER['REMOTE_ADDR']."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_client_ip', function($ip) {\n    // Modify $ip as needed\n    return $ip;\n}, 10, 1 );",
      "since": "1.7.0",
      "source": {
        "file": "includes/class-gf-zero-spam-token-endpoint.php",
        "line": 126
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_client_ip/",
      "related": []
    },
    {
      "id": "gf_zero_spam_email_rules",
      "name": "gf_zero_spam_email_rules",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Modifies the email rejection rules before evaluation.",
      "parameters": [
        {
          "name": "rules",
          "type": "array",
          "description": "The merged rules array."
        },
        {
          "name": "field",
          "type": "\\GF_Field_Email\\",
          "description": "\\GF_Field`"
        },
        {
          "name": "form",
          "type": "array",
          "description": "The form object."
        }
      ],
      "categories": [
        "notifications"
      ],
      "example": "add_filter( 'gf_zero_spam_email_rules', function($rules, $field, $form) {\n    // Modify $rules as needed\n    return $rules;\n}, 10, 3 );",
      "since": "1.5.0",
      "source": {
        "file": "includes/class-email-rejection.php",
        "line": 203
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_email_rules/",
      "related": []
    },
    {
      "id": "gf_zero_spam_fallback_token_ttl",
      "name": "gf_zero_spam_fallback_token_ttl",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Filters the fallback token TTL embedded in the page HTML.",
      "parameters": [
        {
          "name": "ttl",
          "type": "int",
          "description": "Fallback token lifetime in seconds. Default 604800 (7 days)."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_fallback_token_ttl', function($ttl) {\n    // Modify $ttl as needed\n    return $ttl;\n}, 10, 1 );",
      "since": "1.7.3",
      "source": {
        "file": "includes/class-gf-zero-spam.php",
        "line": 354
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_fallback_token_ttl/",
      "related": []
    },
    {
      "id": "gf_zero_spam_rate_limit",
      "name": "gf_zero_spam_rate_limit",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Filters the maximum number of token requests allowed per IP per minute.",
      "parameters": [
        {
          "name": "limit",
          "type": "int",
          "description": "The maximum request count per minute. Default: 30."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_rate_limit', function($limit) {\n    // Modify $limit as needed\n    return $limit;\n}, 10, 1 );",
      "since": "1.7.0",
      "source": {
        "file": "includes/class-gf-zero-spam-token-endpoint.php",
        "line": 142
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_rate_limit/",
      "related": []
    },
    {
      "id": "gf_zero_spam_token_fetch_timeout",
      "name": "gf_zero_spam_token_fetch_timeout",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Filters the timeout (in milliseconds) for AJAX token fetch attempts.",
      "parameters": [
        {
          "name": "timeout",
          "type": "int",
          "description": "Timeout in milliseconds. Default 3000."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_token_fetch_timeout', function($timeout) {\n    // Modify $timeout as needed\n    return $timeout;\n}, 10, 1 );",
      "since": "1.7.0",
      "source": {
        "file": "includes/class-gf-zero-spam.php",
        "line": 342
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_token_fetch_timeout/",
      "related": []
    },
    {
      "id": "gf_zero_spam_token_ttl",
      "name": "gf_zero_spam_token_ttl",
      "type": "filter",
      "product": "gravity-forms-zero-spam",
      "description": "Filters the token time-to-live in seconds for dynamically fetched tokens.",
      "parameters": [
        {
          "name": "ttl",
          "type": "int",
          "description": "Token lifetime in seconds. Default 604800 (7 days)."
        }
      ],
      "categories": [
        "general"
      ],
      "example": "add_filter( 'gf_zero_spam_token_ttl', function($ttl) {\n    // Modify $ttl as needed\n    return $ttl;\n}, 10, 1 );",
      "since": "1.7.3",
      "source": {
        "file": "includes/class-gf-zero-spam-token-endpoint.php",
        "line": 97
      },
      "url": "/docs/gravity-forms-zero-spam/filters/gf_zero_spam_token_ttl/",
      "related": []
    }
  ],
  "stats": {
    "total": 18,
    "actions": 2,
    "filters": 16
  }
}