create_rules_wizard
Generate official sweepstakes rules via the 14-step wizard. BEFORE CALLING: 1) fetch_sweepstakes to get token, dates, name. 2) get_business + get_profile to pre-fill sponsor fields. 3) fetch_rules to check for existing primary rules — if primary exists, warn user new rules will be SECONDARY. Ask wizard questions in order (steps A-N), one at a time or in small groups. Only ask for data you cannot get from API calls. PRIMARY RULES LINK: If result is_primary=true, give user the URL: https://swpp.me/r/[handler] (handler in lowercase from fetch_sweepstakes). RULES LANGUAGE: Always set rules_language="en". The wizard generates ALL legal text server-side — NEVER compose rules language yourself. AMOE URL: The AMOE URL is NOT the entry page URL — the wizard handles AMOE language automatically based on method_of_entry. AGE GATE: Only activate Age Gate when min_age=2 (21+). NEVER for min_age=1 (18+) or min_age=3 (13+). AGE-RESTRICTED PRODUCTS: two independent 21+ triggers. Alcohol (alcohol_sweeps=1) applies only when the SPONSOR produces or manufactures alcohol — a retailer that merely sells it is 2. Tobacco, nicotine and vaping (nicotine_tobacco_sweeps=1) has NO such distinction: federal Tobacco 21 sets 21 for every tobacco and nicotine product, whoever sponsors it. Do not apply the producer/retailer reasoning to a vape or tobacco promotion — it is 21+ either way. Either trigger requires min_age=2. A nicotine promotion additionally needs states=4 with Massachusetts, Michigan and Virginia left out (those three prohibit tobacco sweepstakes), and the prize may never be the product itself — a discount or a coupon redeemed at a paid age-verified purchase is the permitted shape. SPONSOR DATA: every sponsor field is published verbatim in a public legal document. Take it from the user or from get_business for THIS promotion — never from an earlier conversation, another sweepstakes, or your own memory — show the complete block to the user, get their approval, and only then set sponsor_data_confirmed: true. If a value is missing, ask; never fill it with a plausible guess, and never use a placeholder domain (example.com, .example, .test) in any URL. REGISTRATION AND BONDING: prizes with an ARV over USD 5,000 require registration and a surety bond in Florida and New York (Rhode Island adds a registration requirement of its own for retail promotions). Always name the USD 5,000 threshold AND all three states when the prize value is near or above it, and offer the states values that exclude them: 5 (excl. FL, NY), 6 (excl. FL, NY, RI), 8 and 9 for the Canada variants. GEOLOCATION: Use the states parameter for geographic eligibility. NEVER use GeoLocation entry settings for state restrictions — GeoLocation is for GPS/IP boundaries only.
create_rules_wizard
When to use
Generate official sweepstakes rules via the 14-step wizard. BEFORE CALLING: 1) fetch_sweepstakes to get token, dates, name. 2) get_business + get_profile to pre-fill sponsor fields. 3) fetch_rules to check for existing primary rules — if primary exists, warn user new rules will be SECONDARY. Ask wizard questions in order (steps A-N), one at a time or in small groups. Only ask for data you cannot get from API calls. PRIMARY RULES LINK: If result is_primary=true, give user the URL: https://swpp.me/r/[handler] (handler in lowercase from fetch_sweepstakes). RULES LANGUAGE: Always set rules_language="en". The wizard generates ALL legal text server-side — NEVER compose rules language yourself. AMOE URL: The AMOE URL is NOT the entry page URL — the wizard handles AMOE language automatically based on method_of_entry. AGE GATE: Only activate Age Gate when min_age=2 (21+). NEVER for min_age=1 (18+) or min_age=3 (13+). GEOLOCATION: Use the states parameter for geographic eligibility. NEVER use GeoLocation entry settings for state restrictions — GeoLocation is for GPS/IP boundaries only.
Pre-calls required
fetch_sweepstakesif the user gave you a sweepstakes name instead of a tokenfetch_rules(sweepstakes_token)— if primary rules already exist, WARN that new rules will be SECONDARY (not published)get_business— auto-populate sponsor info (legal name, address)get_entry_settings— confirm AMOE state matches the entry method
Parameters to validate before calling
sweepstakes_token(string, required) — Sweepstakes token (UUID). Get via fetch_sweepstakes.arv(number, required) — one of:1,2— Approximate Retail Value threshold. 1 = ARV >= $5,000. 2 = ARV < $5,000.alcohol_sweeps(number, required) — one of:1,2— Does the SPONSOR produce or manufacture alcoholic products? 1 = Yes, 2 = No. Only producers/manufacturers count: a retailer, store, supermarket, bar or restaurant that merely sells alcohol is NOT an alcohol sponsor and should be 2. The trigger is who the sponsor is, not what the prize is — a brewery giving away concert tickets is 1. When 1, min_age must be 2 (21+).sweepstakes_name(string, required) — Official promotional name (6-60 characters).start_date(string, required) — Start date (YYYY-MM-DD).start_time(string, required) — Start time (e.g. "09:00 AM" or "14:00").start_timezone(string, required) — Start timezone (e.g. "US/Eastern", "EST", "CST").end_date(string, required) — End date (YYYY-MM-DD).end_time(string, required) — End time (e.g. "11:59 PM" or "23:59").end_timezone(string, required) — End timezone.prize_description(string, required) — Detailed prize description (max 5000 chars).prize_include_travel(boolean, required) — Does the prize include travel?prize_is_vehicle(boolean, required) — Is the prize a vehicle?prize_value(number, required) — Total prize value in USD. Must be > 0.entry_period_selector(number, required) — one of:1,2— 1 = single drawing period, 2 = multiple entry periods.sponsor_name(string, required) — Legal sponsor name. Pre-fill from get_business.sponsor_address(string, required) — Sponsor street address. Pre-fill from get_business.sponsor_city(string, required) — Sponsor city. Pre-fill from get_business.sponsor_state(string, required) — Sponsor state or abbreviation. Pre-fill from get_business.sponsor_zip_code(string, required) — Sponsor zip code (5 digits). Pre-fill from get_business.method_of_entry(number, required) — one of:1,2,3,4,5,6,7,8— Entry method: 1=Website, 2=SMS, 3=Social Media, 4=Other, 5=Purchase ($1=1 entry), 6=Purchase (1 order=1 entry), 7=Donation, 8=Subscription.min_age(number, required) — one of:1,2,3— Minimum age: 1=18+, 2=21+, 3=13+ with parental consent.states(number, required) — one of:1,2,3,4,5,6,7,8,9,10— Geographic eligibility. 1 = 48 contiguous US + DC. 2 = 50 US + DC. 3 = 50 US + DC + US Virgin Islands + Puerto Rico. 4 = specific states (requires list_of_states). 5 = 50 US + DC excluding FL and NY. 6 = 50 US + DC excluding FL, NY and RI. 7 = 50 US + DC + Canada. 8 = 50 US + DC + Canada excluding FL and NY. 9 = 50 US + DC + Canada excluding FL, NY and RI. 10 = Canada only. Values 5, 6, 8 and 9 exist to avoid the registration/bonding requirements of FL, NY and RI. Values 7-10 include Canada: the rules must state that Canadian winners answer a mathematical skill-testing question to receive the prize.privacy_policy_url(string, required) — Privacy policy URL (min 11 chars, must include http/https).sweeppea_entry_page(number, required) — one of:1,2,3— 1 = Sweeppea hosted page, 2 = custom URL, 3 = none.winners_to_draw(number, optional) — Number of winners to draw (>= 1). Required when entry_period_selector = 1.winner_drawing_date(string, optional) — Drawing date (YYYY-MM-DD). Required when entry_period_selector = 1.winner_drawing_time(string, optional) — Drawing time. Required when entry_period_selector = 1.winner_drawing_timezone(string, optional) — Drawing timezone. Required when entry_period_selector = 1.winner_notification_date(string, optional) — Winner notification date (YYYY-MM-DD). Required when entry_period_selector = 1.winner_notification_time(string, optional) — Winner notification time. Required when entry_period_selector = 1.winner_notification_timezone(string, optional) — Winner notification timezone. Required when entry_period_selector = 1.entry_period_items(array, optional) — Array of period objects. Required when entry_period_selector = 2. Each object: { start_date, start_time, end_date, end_time, drawing_date, winners_drawn, notification_date, prize_description, prize_value }.sponsor_telephone(string, optional) — Sponsor phone number (optional). Pre-fill from get_profile.sponsor_email(string, optional) — Sponsor email (optional). Pre-fill from get_profile.social_media_entry_description(string, optional) — Social media entry details. Required when method_of_entry = 3.other_description(string, optional) — Other entry method description. Required when method_of_entry = 4.sponsor_ecommerce_store_url_a(string, optional) — Ecommerce store URL. Required when method_of_entry = 5.sponsor_ecommerce_store_url_b(string, optional) — Ecommerce store URL. Required when method_of_entry = 6.sponsor_donations_acceptance_page_url(string, optional) — Donations acceptance page URL. Required when method_of_entry = 7.sponsor_ecommerce_store_url_c(string, optional) — Ecommerce/subscription store URL. Required when method_of_entry = 8.total_number_of_entries_awarded_amoe(number, optional) — Total entries awarded via AMOE (>= 1). Required when method_of_entry is 5, 6, 7, or 8.limit_or_max_number_of_entries_amoe(number, optional) — Max entries via AMOE (>= 1). Required when method_of_entry is 5, 6, 7, or 8.list_of_states(array, optional) — Array of state names. Required when states = 4.custom_entry_page(string, optional) — Custom entry page URL (min 11 chars). Required when sweeppea_entry_page = 2.sponsor_offering_multiplier(number, optional) — one of:1,2— Is sponsor offering entry multiplier? 1=Yes, 2=No. Default: 2.sponsor_awarding_bonus_email_social(number, optional) — one of:1,2— Awarding bonus for email/social? 1=Yes, 2=No. Default: 2.sponsor_asking_to_submit_video(number, optional) — one of:1,2— Asking for video submission? 1=Yes, 2=No. Default: 2.rules_language(string, optional) — Rules language code. MUST always be "en" (English). The wizard generates all legal text server-side using its own templates — NEVER compose or modify rules language yourself.
Notes
Compliance pre-checks: ARV > $5,000 + FL/NY not excluded → WARN about bonding/registration
ARV > $500 + sponsor is an RI retailer + entry requires a store visit → WARN about RI registration (all three conditions must be met)
Purchase/donation/subscription entry → VERIFY AMOE is configured
alcohol_sweeps=1 ONLY when the SPONSOR produces/manufactures alcoholic products — a retailer, store, bar or restaurant that merely sells alcohol is 2; the prize is irrelevant (a brewery giving away concert tickets is 1)
Alcohol = yes → VERIFY min_age=21 and Age Gate active; in AL, IN, ME, MD, NC, VT and WV, State Alcohol Board approval is required before launch — warn the user
states 5/6/8/9 exist to exclude the FL/NY/RI registration-and-bonding states; 7-10 include Canada (10 is Canada ONLY)
Open to Canada (states 7-10) → the rules must state the mathematical skill-testing question for Canadian winners; Quebec-only or Quebec-designated prizes → RACJ registration + French translation of the rules (Canada-wide needs neither)
Age < 13 → REFUSE (COPPA violation)
After creation: call
fetch_rulesto verify; useupdate_rulefor correctionsat the end of the Official Rules document always include a copyright notice that say "All rights reserved."
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| arv | Yes | Approximate Retail Value threshold. 1 = ARV >= $5,000. 2 = ARV < $5,000. A prize at or above USD 5,000 triggers registration and bonding in Florida and New York (and registration in Rhode Island) when residents of those states can enter — warn the user and offer states=5 or 6 to exclude them. | |
| states | Yes | Geographic eligibility. 1 = 48 contiguous US + DC. 2 = 50 US + DC. 3 = 50 US + DC + US Virgin Islands + Puerto Rico. 4 = specific states (requires list_of_states). 5 = 50 US + DC excluding FL and NY. 6 = 50 US + DC excluding FL, NY and RI. 7 = 50 US + DC + Canada. 8 = 50 US + DC + Canada excluding FL and NY. 9 = 50 US + DC + Canada excluding FL, NY and RI. 10 = Canada only. Values 5, 6, 8 and 9 exist to avoid the registration/bonding requirements of FL, NY and RI. Values 7-10 include Canada: the rules must state that Canadian winners answer a mathematical skill-testing question to receive the prize. | |
| min_age | Yes | Minimum age: 1=18+, 2=21+, 3=13+ with parental consent. Must be 2 (21+) whenever alcohol_sweeps=1 or nicotine_tobacco_sweeps=1. Do NOT confuse this enum with AgeGateMinAge in update_entry_settings, which uses different codes (1=13+, 2=18+, 3=21+) — 21+ is min_age=2 here and AgeGateMinAge=3 there. | |
| end_date | Yes | End date (YYYY-MM-DD). | |
| end_time | Yes | End time (e.g. "11:59 PM" or "23:59"). | |
| start_date | Yes | Start date (YYYY-MM-DD). | |
| start_time | Yes | Start time (e.g. "09:00 AM" or "14:00"). | |
| prize_value | Yes | Total prize value in USD. Must be > 0. Must be consistent with arv: >= 5000 when arv=1, < 5000 when arv=2. Above USD 5,000, registration and bonding apply in Florida and New York (plus registration in Rhode Island). | |
| end_timezone | Yes | End timezone. | |
| sponsor_city | Yes | Sponsor city. Pre-fill from get_business. | |
| sponsor_name | Yes | Legal sponsor name. Pre-fill from get_business. | |
| sponsor_email | No | Contact email of the SPONSOR organization, as given by the user. It is printed in the public Official Rules and legally identifies who is responsible for the promotion. NEVER substitute the account owner email from get_profile: the account owner is not necessarily the sponsor. If the user has not given you a sponsor email, ask for it or omit the field. | |
| sponsor_state | Yes | Sponsor state or abbreviation. Pre-fill from get_business. | |
| alcohol_sweeps | Yes | Does the SPONSOR produce or manufacture alcoholic products? 1 = Yes, 2 = No. Only producers/manufacturers count: a retailer, store, supermarket, bar or restaurant that merely sells alcohol is NOT an alcohol sponsor and should be 2. The trigger is who the sponsor is, not what the prize is — a brewery giving away concert tickets is 1. When 1, min_age must be 2 (21+). | |
| list_of_states | No | Array of state names. Required when states = 4. | |
| rules_language | No | Rules language code. MUST always be "en" (English). The wizard generates all legal text server-side using its own templates — NEVER compose or modify rules language yourself. | en |
| start_timezone | Yes | Start timezone (e.g. "US/Eastern", "EST", "CST"). | |
| method_of_entry | Yes | Entry method: 1=Website, 2=SMS, 3=Social Media, 4=Other, 5=Purchase ($1=1 entry), 6=Purchase (1 order=1 entry), 7=Donation, 8=Subscription. | |
| sponsor_address | Yes | Sponsor street address. Pre-fill from get_business. | |
| winners_to_draw | No | Number of winners to draw (>= 1). Required when entry_period_selector = 1. | |
| prize_is_vehicle | Yes | Is the prize a vehicle? | |
| sponsor_zip_code | Yes | Sponsor zip code (5 digits). Pre-fill from get_business. | |
| sweepstakes_name | Yes | Official promotional name (6-60 characters). | |
| custom_entry_page | No | Custom entry page URL (min 11 chars). Required when sweeppea_entry_page = 2. | |
| other_description | No | Other entry method description. Required when method_of_entry = 4. | |
| prize_description | Yes | Detailed prize description (max 5000 chars). It is printed verbatim in the public Official Rules, so it must describe what the winner actually receives. A tobacco, nicotine or vaping product cannot be a prize (free sample ban, 21 CFR 1140.16(d)(1)); a discount or a coupon redeemed at the time of a paid age-verified purchase can. | |
| sponsor_telephone | No | Sponsor phone number (optional). Pre-fill from get_profile. | |
| sweepstakes_token | Yes | Sweepstakes token (UUID). Get via fetch_sweepstakes. | |
| entry_period_items | No | Array of period objects. Required when entry_period_selector = 2. Each object: { start_date, start_time, end_date, end_time, drawing_date, winners_drawn, notification_date, prize_description, prize_value }. | |
| privacy_policy_url | Yes | Privacy policy URL (min 11 chars, must include http/https). | |
| sweeppea_entry_page | Yes | 1 = Sweeppea hosted page, 2 = custom URL, 3 = none. | |
| winner_drawing_date | No | Drawing date (YYYY-MM-DD). Required when entry_period_selector = 1. | |
| winner_drawing_time | No | Drawing time. Required when entry_period_selector = 1. | |
| prize_include_travel | Yes | Does the prize include travel? | |
| entry_period_selector | Yes | 1 = single drawing period, 2 = multiple entry periods. | |
| sponsor_data_confirmed | Yes | Must be true. Confirms you showed the user the EXACT sponsor block that will be printed in the public Official Rules (name, address, city, state, zip, email, phone) and they approved it in this conversation. Sponsor data comes from the user or from get_business — NEVER from an earlier conversation, another sweepstakes, or memory. If you are unsure where a sponsor value came from, ask the user again instead of setting this flag. | |
| nicotine_tobacco_sweeps | Yes | Does the promotion involve tobacco, nicotine or vaping products — as the prize, as the sponsor product, or as the subject of the promotion? 1 = Yes, 2 = No. UNLIKE ALCOHOL there is no producer/retailer distinction: federal Tobacco 21 sets 21 as the minimum age for every tobacco and nicotine product, so a store that merely sells vapes is 1, not 2. Covers cigarettes, cigars, chewing and smokeless tobacco, hookah, e-cigarettes, vapes, vape juice and nicotine pouches. When 1: min_age must be 2 (21+), and states must be 4 with a list_of_states that excludes Massachusetts, Michigan and Virginia, which prohibit tobacco-related sweepstakes. Separately, the PRIZE may never be the product itself (free sample ban, 21 CFR 1140.16(d)(1)) — a discount or a coupon redeemed at the time of a paid age-verified purchase is permitted. Used by the MCP legal guardrail; it is not sent to the Sweeppea API. | |
| winner_drawing_timezone | No | Drawing timezone. Required when entry_period_selector = 1. | |
| winner_notification_date | No | Winner notification date (YYYY-MM-DD). Required when entry_period_selector = 1. | |
| winner_notification_time | No | Winner notification time. Required when entry_period_selector = 1. | |
| sponsor_offering_multiplier | No | Is sponsor offering entry multiplier? 1=Yes, 2=No. Default: 2. | |
| winner_notification_timezone | No | Winner notification timezone. Required when entry_period_selector = 1. | |
| sponsor_ecommerce_store_url_a | No | Ecommerce store URL. Required when method_of_entry = 5. | |
| sponsor_ecommerce_store_url_b | No | Ecommerce store URL. Required when method_of_entry = 6. | |
| sponsor_ecommerce_store_url_c | No | Ecommerce/subscription store URL. Required when method_of_entry = 8. | |
| social_media_entry_description | No | Social media entry details. Required when method_of_entry = 3. | |
| sponsor_asking_to_submit_video | No | Asking for video submission? 1=Yes, 2=No. Default: 2. | |
| sponsor_email_is_account_owner | No | Set true ONLY when the user explicitly confirmed that the account owner own email is the sponsor contact to be published in the Official Rules. The server blocks a sponsor_email equal to the account profile email until you do. | |
| limit_or_max_number_of_entries_amoe | No | Max entries via AMOE (>= 1). Required when method_of_entry is 5, 6, 7, or 8. | |
| sponsor_awarding_bonus_email_social | No | Awarding bonus for email/social? 1=Yes, 2=No. Default: 2. | |
| total_number_of_entries_awarded_amoe | No | Total entries awarded via AMOE (>= 1). Required when method_of_entry is 5, 6, 7, or 8. | |
| sponsor_donations_acceptance_page_url | No | Donations acceptance page URL. Required when method_of_entry = 7. |