Set submission rules
set_form_rulesSet the rules that mark a page's form submissions invalid instead of delivering them, such as repeat email addresses, countries, email domains, throwaway mailboxes, domains that cannot receive mail (every rule type is listed below). The visitor always sees success; an invalid submission is kept 30 days in the Submissions inbox, not delivered and not counted as a conversion, and the owner can release it. This REPLACES the whole list: call get_page_information first and send back every rule to keep, with its id. Load get_skill_form_management before using this. Rule types (at most 20 rules per page):
country — Marks a submission invalid by the visitor's country, from IP geolocation. "allow" accepts only the countries listed; "block" refuses the ones listed. A visitor whose country is unknown passes. VPNs and private relays move people, so a strict allow list will catch some real visitors: the owner can release them. config: {"mode":{"type":"string","enum":["allow","block"]},"countries":{"type":"array","items":{"type":"string"},"description":"ISO 3166-1 alpha-2 codes, e.g. ["US", "CA", "GB"]."}}
email_domain — Marks a submission invalid by the email address's domain. "allow" accepts only the domains listed; "block" refuses the ones listed. An entry covers the domain and its subdomains, so "acme.com" also matches mail.acme.com, and "edu" (or ".edu") matches every address under .edu. config: {"field":{"type":"string","description":"The form field with type="email"."},"mode":{"type":"string","enum":["allow","block"]},"domains":{"type":"array","items":{"type":"string"},"description":"Domains, e.g. ["acme.com", ".edu"]."}}
disposable_email — Marks a submission invalid when the email address is a throwaway mailbox (mailinator.com and about ten thousand others, from a public list). config: {"field":{"type":"string","description":"The form field with type="email"."}}
mail_server — Marks a submission invalid when the email address's domain cannot receive mail (it does not exist or has no mail server), which catches made-up domains and typos like gmial.con. It does not check that the mailbox itself exists. config: {"field":{"type":"string","description":"The form field with type="email"."}}
email_verification — Checks the email address with the owner's own verification provider (ZeroBounce, Kickbox, Emailable, Bouncer) and marks the submission invalid when the provider says the mailbox does not exist; with riskyIsInvalid, also catch-all domains, role and disposable addresses. Each check spends the owner’s credits with that provider. The owner adds the provider’s API key in the console, never in chat. List more than one provider to fall back when the first cannot answer; when none can, the submission is delivered and the owner is emailed. config: {"field":{"type":"string","description":"The form field with type="email"."},"providers":{"type":"array","items":{"type":"string","enum":["zerobounce","kickbox","emailable","bouncer"]},"description":"In order of preference, at most 3, e.g. ["zerobounce"]."},"riskyIsInvalid":{"type":"boolean","description":"Also mark catch-all, role and disposable addresses invalid. Default false."}}
phone_verification — Checks the phone number with the owner's own provider (Twilio or Veriphone) and marks the submission invalid when it is not a real number, or when its line type is one the owner blocks (for example "voip"). A number without a country code is read as the visitor’s country’s. Each check spends the owner’s credits with that provider (Twilio charges for line types). The owner adds the provider’s credentials in the console, never in chat. config: {"field":{"type":"string","description":"The form field with type="tel"."},"provider":{"type":"string","enum":["twilio","veriphone"]},"blockedLineTypes":{"type":"array","items":{"type":"string","enum":["mobile","landline","voip","toll_free","premium","other"]},"description":"Line types to mark invalid. Default []."}}
duplicate_email — Marks a submission invalid when the same email address was already accepted in the last 90 days, on this form ("form") or on any form in the account whose duplicate rule is also account-wide ("account"). Only a keyed fingerprint of the address is kept, for 90 days; the page's privacy policy must say so (see get_skill_privacy_and_consent). config: {"field":{"type":"string","description":"The form field with type="email"."},"scope":{"type":"string","enum":["form","account"],"description":"Default "form"."},"ignorePlusTags":{"type":"boolean","description":"Treat jane+news@example.com and jane@example.com as one address. Default false."}}
content_check — Marks a submission invalid when its message is spam (sales pitches, scams, gibberish), contains profanity, or is not in an accepted language: the checks listed in "checks". An AI model reads every on the form, with email addresses, phone numbers and links removed; a form without one is skipped until it has one. It holds back very few ordinary enquiries, but can hold back as spam a genuine offer or a customer giving bank details for a refund, and as profanity a real customer who swears; the owner can release them. Messages under three words pass the language check, and close neighbours count as each other (Danish and Norwegian, Croatian and Serbian). The page's privacy policy must name the model's provider (see get_skill_privacy_and_consent). config: {"checks":{"type":"array","items":{"type":"string","enum":["spam","profanity","language"]},"description":"Any of "spam", "profanity", "language"."},"languages":{"type":"array","items":{"type":"string"},"description":"With the "language" check: the ISO 639-1 codes accepted, e.g. ["en", "es"]."}}
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"pageId": "<pageId>",
"rules": "<rules>"
},
"name": "set_form_rules"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| rules | Yes | The complete list of rules for the page. [] removes every rule. | |
| pageId | Yes | The pageId returned when the page was published. |