Create official rules for a sweepstakes using the 14-step wizard flow. This endpoint takes structured wizard answers as input, generates the complete official rules HTML document server-side, and saves the result. The first rule created for a sweepstakes will be marked as primary.
POST /rules/createWizard
This endpoint replicates the Official Rules Wizard from the Sweeppea frontend application. It follows a 14-step process (Steps A through N) that collects sweepstakes details and generates a complete legal document (HTML) for official rules.
Unlike the /rules/create endpoint which requires you to provide pre-built HTML content, this endpoint generates the document automatically from structured data. This is ideal for API integrations, MCP tools, and automated workflows.
Wizard Steps: A = Welcome, B = ARV Check, C = Alcohol, D = Promo Name, E = Start/End Dates, F = Prize Details, G = Prize Value, H = Winners/Entry Periods, I = Sponsor Info, J = Entry Method, K = Minimum Age, L = States Eligibility, M = Privacy Policy, N = Entry Page
This endpoint requires Bearer token authentication via the Authorization header.
| Parameter | Type | Step | Description |
|---|---|---|---|
SweepstakesToken |
String (UUID v4) | - | The unique identifier of the target sweepstakes |
Arv |
Number (1|2) | B | 1 = Total ARV >= $5,000, 2 = Total ARV < $5,000 |
AlcoholSweeps |
Number (1|2) | C | 1 = Alcohol-related sweepstakes, 2 = Not alcohol-related |
SweepstakesName |
String (6-60 chars) | D | Official promotional name of the sweepstakes |
StartDate |
String (YYYY-MM-DD) | E | Sweepstakes start date |
StartTime |
String | E | Start time (e.g., "09:00 AM" or "14:00") |
StartTimezone |
String | E | Timezone (e.g., "US/Eastern", "EST", "CST") |
EndDate |
String (YYYY-MM-DD) | E | Sweepstakes end date |
EndTime |
String | E | End time (e.g., "11:59 PM" or "23:59") |
EndTimezone |
String | E | Timezone for end date |
PrizeDescription |
String (max 5000) | F | Full description of all prize(s) being offered |
PrizeIncludeTravel |
Boolean | F | true = Prize includes travel, false = No travel |
PrizeIsVehicle |
Boolean | F | true = Prize is a vehicle, false = Not a vehicle |
PrizeValue |
Number (> 0) | G | Approximate Retail Value of all prizes combined (USD) |
EntryPeriodSelector |
Number (1|2) | H | 1 = Single drawing, 2 = Multiple entry periods |
SponsorName |
String | I | Legal name of the sweepstakes sponsor |
SponsorAddress |
String | I | Street address of the sponsor |
SponsorCity |
String | I | City where the sponsor is located |
SponsorState |
String | I | US state name or abbreviation |
SponsorZipCode |
String (5 digits) | I | 5-digit ZIP code (e.g., "33131") |
MethodOfEntry |
Number (1-8) | J | 1=Website, 2=SMS, 3=Social Media, 4=Other, 5=Purchase($1=1entry), 6=Purchase(1order=1entry), 7=Donation, 8=Subscription |
MinAgeOfParticipation |
Number (1|2|3) | K | 1 = 18+, 2 = 21+, 3 = 13+ (with parental consent) |
StatesAbleToParticipate |
Number (1-10) | L | Geographic eligibility (see Eligibility Options below) |
PrivacyPolicyURL |
String (min 11 chars) | M | Full URL to privacy policy (must include http/https) |
SweeppeaEntryPage |
Number (1|2|3) | N | 1=Sweeppea entry page, 2=Custom entry page, 3=No entry page |
These fields are required only when certain conditions are met.
| Parameter | Type | Required When | Description |
|---|---|---|---|
WinnersToDraw |
Number (>= 1) | EntryPeriodSelector = 1 | Number of winners to draw |
WinnerDrawingDate |
String (YYYY-MM-DD) | EntryPeriodSelector = 1 | Date when winners will be drawn |
WinnerDrawingTime |
String | EntryPeriodSelector = 1 | Time of drawing |
WinnerDrawingTimezone |
String | EntryPeriodSelector = 1 | Timezone for drawing |
WinnerNotificationDate |
String (YYYY-MM-DD) | EntryPeriodSelector = 1 | Date when winners will be notified |
WinnerNotificationTime |
String | EntryPeriodSelector = 1 | Time of notification |
WinnerNotificationTimezone |
String | EntryPeriodSelector = 1 | Timezone for notification |
EntryPeriodItems |
Array | EntryPeriodSelector = 2 | Array of entry period objects (see structure below) |
SocialMediaEntryDescription |
String | MethodOfEntry = 3 | Description of social media entry steps |
OtherDescription |
String | MethodOfEntry = 4 | Description of alternative entry method |
SponsorEcommerceStoreURLA |
String | MethodOfEntry = 5 | eCommerce store URL for purchase entry ($1 = 1 entry) |
SponsorEcommerceStoreURLB |
String | MethodOfEntry = 6 | eCommerce store URL for purchase entry (1 order = 1 entry) |
SponsorDonationsAcceptancePageURL |
String | MethodOfEntry = 7 | Donations acceptance page URL |
SponsorEcommerceStoreURLC |
String | MethodOfEntry = 8 | eCommerce store URL for subscription entry |
TotalNumberOfEntriesAwardedAMOE |
Number (>= 1) | MethodOfEntry = 5, 6, 7, or 8 | Entries awarded per AMOE submission |
LimitOrMaxNumberOfEntriesAMOE |
Number (>= 1) | MethodOfEntry = 5, 6, 7, or 8 | Maximum AMOE entries per person |
ListOfStates |
Array of Strings | StatesAbleToParticipate = 4 | Array of US state names (e.g., ["Florida", "California"]) |
CustomEntryPage |
String (min 11 chars) | SweeppeaEntryPage = 2 | URL of the custom entry page |
| Parameter | Type | Default | Description |
|---|---|---|---|
SponsorTelephone |
String | "" | Sponsor phone number |
SponsorEmail |
String | "" | Sponsor email address |
SponsorOfferingMultiplier |
Number (1|2) | 2 | 1=Yes, 2=No. Is sponsor offering entry multipliers? |
SponsorAwardingBonusEmailSocial |
Number (1|2) | 2 | 1=Yes, 2=No. Bonus entries for email/social shares? |
SponsorAskingToSubmitVideo |
Number (1|2) | 2 | 1=Yes, 2=No. Participants submit user-generated video? |
RulesLanguage |
String | "en" | Language code for the rules document |
| Value | Description |
|---|---|
| 1 | All 50 US States + DC |
| 2 | All 50 US States + DC + Puerto Rico |
| 3 | All 50 US States + DC + All US Territories |
| 4 | Select specific states (requires ListOfStates array) |
| 5 | US and Canada (excluding Quebec) |
| 6 | US, Canada (excluding Quebec) + Puerto Rico |
| 7 | US and UK |
| 8 | US and Mexico |
| 9 | Worldwide |
| 10 | US, Canada (excluding Quebec), Mexico |
When EntryPeriodSelector = 2, provide an array of entry period objects:
{
"EntryPeriodItems": [
{
"data": {
"StartDate": "2026-03-01",
"StartTime": "09:00 AM",
"EndDate": "2026-03-07",
"EndTime": "11:59 PM",
"DrawingDate": "2026-03-08",
"WinnersDrawn": 1,
"NotificationDate": "2026-03-09",
"PrizeDescription": "One (1) $100 Gift Card",
"PrizeValue": 100
}
},
{
"data": {
"StartDate": "2026-03-08",
"StartTime": "12:00 AM",
"EndDate": "2026-03-14",
"EndTime": "11:59 PM",
"DrawingDate": "2026-03-15",
"WinnersDrawn": 2,
"NotificationDate": "2026-03-16",
"PrizeDescription": "Two (2) $50 Gift Cards",
"PrizeValue": 100
}
}
]
}curl -X POST "https://api-v3.sweeppea.com/rules/createWizard" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"SweepstakesToken": "YOUR_SWEEPSTAKES_TOKEN",
"Arv": 2,
"AlcoholSweeps": 2,
"SweepstakesName": "Summer Giveaway 2026 Sweepstakes",
"StartDate": "2026-03-01",
"StartTime": "09:00 AM",
"StartTimezone": "US/Eastern",
"EndDate": "2026-04-01",
"EndTime": "11:59 PM",
"EndTimezone": "US/Eastern",
"PrizeDescription": "One (1) $500 Visa eGift Card.",
"PrizeIncludeTravel": false,
"PrizeIsVehicle": false,
"PrizeValue": 500,
"EntryPeriodSelector": 1,
"WinnersToDraw": 1,
"WinnerDrawingDate": "2026-04-05",
"WinnerDrawingTime": "10:00 AM",
"WinnerDrawingTimezone": "US/Eastern",
"WinnerNotificationDate": "2026-04-07",
"WinnerNotificationTime": "10:00 AM",
"WinnerNotificationTimezone": "US/Eastern",
"SponsorName": "Acme Corporation",
"SponsorAddress": "123 Main Street",
"SponsorCity": "Miami",
"SponsorState": "Florida",
"SponsorZipCode": "33131",
"SponsorTelephone": "3051234567",
"SponsorEmail": "info@acme.com",
"MethodOfEntry": 1,
"MinAgeOfParticipation": 1,
"StatesAbleToParticipate": 1,
"PrivacyPolicyURL": "https://acme.com/privacy",
"SweeppeaEntryPage": 1
}'const response = await fetch('https://api-v3.sweeppea.com/rules/createWizard', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
SweepstakesToken: 'YOUR_SWEEPSTAKES_TOKEN',
Arv: 2,
AlcoholSweeps: 2,
SweepstakesName: 'Summer Giveaway 2026 Sweepstakes',
StartDate: '2026-03-01',
StartTime: '09:00 AM',
StartTimezone: 'US/Eastern',
EndDate: '2026-04-01',
EndTime: '11:59 PM',
EndTimezone: 'US/Eastern',
PrizeDescription: 'One (1) $500 Visa eGift Card.',
PrizeIncludeTravel: false,
PrizeIsVehicle: false,
PrizeValue: 500,
EntryPeriodSelector: 1,
WinnersToDraw: 1,
WinnerDrawingDate: '2026-04-05',
WinnerDrawingTime: '10:00 AM',
WinnerDrawingTimezone: 'US/Eastern',
WinnerNotificationDate: '2026-04-07',
WinnerNotificationTime: '10:00 AM',
WinnerNotificationTimezone: 'US/Eastern',
SponsorName: 'Acme Corporation',
SponsorAddress: '123 Main Street',
SponsorCity: 'Miami',
SponsorState: 'Florida',
SponsorZipCode: '33131',
SponsorTelephone: '3051234567',
SponsorEmail: 'info@acme.com',
MethodOfEntry: 1,
MinAgeOfParticipation: 1,
StatesAbleToParticipate: 1,
PrivacyPolicyURL: 'https://acme.com/privacy',
SweeppeaEntryPage: 1
})
});
const data = await response.json();
console.log(data);import requests
import json
url = "https://api-v3.sweeppea.com/rules/createWizard"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"SweepstakesToken": "YOUR_SWEEPSTAKES_TOKEN",
"Arv": 2,
"AlcoholSweeps": 2,
"SweepstakesName": "Summer Giveaway 2026 Sweepstakes",
"StartDate": "2026-03-01",
"StartTime": "09:00 AM",
"StartTimezone": "US/Eastern",
"EndDate": "2026-04-01",
"EndTime": "11:59 PM",
"EndTimezone": "US/Eastern",
"PrizeDescription": "One (1) $500 Visa eGift Card.",
"PrizeIncludeTravel": False,
"PrizeIsVehicle": False,
"PrizeValue": 500,
"EntryPeriodSelector": 1,
"WinnersToDraw": 1,
"WinnerDrawingDate": "2026-04-05",
"WinnerDrawingTime": "10:00 AM",
"WinnerDrawingTimezone": "US/Eastern",
"WinnerNotificationDate": "2026-04-07",
"WinnerNotificationTime": "10:00 AM",
"WinnerNotificationTimezone": "US/Eastern",
"SponsorName": "Acme Corporation",
"SponsorAddress": "123 Main Street",
"SponsorCity": "Miami",
"SponsorState": "Florida",
"SponsorZipCode": "33131",
"SponsorTelephone": "3051234567",
"SponsorEmail": "info@acme.com",
"MethodOfEntry": 1,
"MinAgeOfParticipation": 1,
"StatesAbleToParticipate": 1,
"PrivacyPolicyURL": "https://acme.com/privacy",
"SweeppeaEntryPage": 1
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
print(response.json())200 OK
{
"Response": true,
"Data": {
"RulesToken": "bc225a85-c16f-4339-a1d6-d0c6d62fa18d",
"SweepstakesToken": "1770a839-abeb-42b4-b003-888073ba1e9b",
"Title": "SummerGiveaway-Official-Rules-02/17/2026-54321",
"Primary": true,
"CreationDate": "2026-02-17T12:00:00.000Z"
},
"Message": "Official rules created successfully via wizard."
}400 Bad Request
Validation errors include Field, WizardStep, and Hint for easy debugging:
{
"Response": false,
"Message": "SweepstakesName is required. The official promotional name of the sweepstakes.",
"Code": 400,
"Field": "SweepstakesName",
"WizardStep": "D",
"Hint": "Must be between 6 and 60 characters"
}{
"Response": false,
"Message": "WinnersToDraw is required when EntryPeriodSelector is 1. Number of winners to draw.",
"Code": 400,
"Field": "WinnersToDraw",
"WizardStep": "H",
"Hint": "Must be a number >= 1"
}{
"Response": false,
"Message": "MethodOfEntry must be a number between 1 and 8.",
"Code": 400,
"Field": "MethodOfEntry",
"WizardStep": "J",
"Hint": "1 = Online Entry Form, 2 = Text-to-Win (SMS), 3 = Social Media, 4 = Other, 5 = Purchase + AMOE (eCommerce A), 6 = Purchase + AMOE (eCommerce B), 7 = Donation + AMOE, 8 = Purchase + AMOE (eCommerce C)"
}401 Unauthorized
{
"Response": false,
"Message": "Invalid or Missing Bearer Token",
"Code": 401
}403 Forbidden
{
"Response": false,
"Message": "Invalid API Token",
"Code": 403
}404 Not Found
{
"Response": false,
"Message": "Sweepstakes not found. Ensure the SweepstakesToken belongs to the authenticated user.",
"Code": 404,
"Field": "SweepstakesToken"
}500 Internal Server Error
{
"Response": false,
"Message": "Internal Server Error",
"Code": 500
}