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.
# 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
1. fetch_sweepstakes if the user gave you a sweepstakes name instead of a token
2. fetch_rules(sweepstakes_token) — if primary rules already exist, WARN that new rules will be SECONDARY (not published)
3. get_business — auto-populate sponsor info (legal name, address)
4. 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 — Is this an alcohol-related sweepstakes? 1 = Yes, 2 = No.
- 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=All 50+DC, 2=+PR, 3=+All Territories, 4=Select specific, 5=US&Canada, 6=US&Canada+PR, 7=US&UK, 8=US&Mexico, 9=Worldwide, 10=US,Canada,Mexico.
- 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.
- 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).
- at the end of the Official Rules document always include a copyright notice that say "All rights reserved."
## Notes
- Compliance pre-checks: ARV > $5,000 + FL/NY not excluded → WARN about bonding/registration
- ARV > $500 + sponsor in RI → WARN about RI registration
- Purchase/donation/subscription entry → VERIFY AMOE is configured
- Alcohol = yes → VERIFY min_age=21 and Age Gate active
- Age < 13 → REFUSE (COPPA violation)
- After creation: call fetch_rules to verify; use update_rule for corrections