name: When2Meet Scheduling description: > This skill should be used when the user asks to "create a when2meet", "set up a when2meet poll", "schedule a meeting poll", "pre-fill availability on when2meet", "create a sign-up sheet for meetings", "use when2meet API", "automate when2meet", or needs to programmatically create When2Meet events and fill in availability for participants. Provides the reverse-engineered When2Meet API and a ready-to-run Python script. version: 0.1.0
When2Meet Scheduling
Programmatically create When2Meet events and pre-fill participant availability using When2Meet's reverse-engineered HTTP API. This avoids manual data entry when organizers already know some participants' schedules.
When to Use
- Creating a When2Meet event from the command line
- Pre-filling known availability for instructors, organizers, or team leads
- Automating recurring scheduling polls
- Any scenario where a When2Meet link needs participants' times baked in
Core Workflow
1. Gather Requirements
Before writing any code, collect from the user:
| Parameter | Example |
|---|---|
| Event name | "Project Meeting Sign-Up" |
| Dates (specific) | Feb 9, 11, 12, 13 2026 |
| Time window | 10:00 AM to 6:00 PM |
| Timezone | America/Los_Angeles |
| Participants + availability | Keith: Mon 11-11:30, Wed 10-10:45... |
2. Create the Event
POST multipart form data to https://www.when2meet.com/SaveNewEvent.php.
Key fields: NewEventName, DateTypes ("SpecificDates"), PossibleDates
(pipe-delimited YYYY-MM-DD), NoEarlierThan / NoLaterThan (hours 0-23),
TimeZone (IANA name).
The response HTML contains window.location='./?SLUG' with the event slug.
Normalize the relative path (strip leading ./) to build the full URL.
3. Fetch Slot Timestamps
GET the event page at https://www.when2meet.com/?SLUG. Parse
TimeOfSlot[n]=<unix_timestamp>; from the embedded JavaScript. These
timestamps are the canonical slot IDs; never compute them manually.
4. Login Each Participant
POST to https://www.when2meet.com/ProcessLogin.php with id (numeric event
ID), name, password ("" for open events), and _ (""). The response body
is the plain-text person ID.
5. Save Availability
POST to https://www.when2meet.com/SaveTimes.php. Critical: send ALL
event slots in the slots field (each timestamp followed by %), with a
positional availability string of 0s and 1s marking which slots are
available. The server uses position-based mapping, so sending only available
slots will misalign the data.
Fields: person, event, slots, availability, _ ("").
Critical Gotchas
- Send ALL slots, not just available ones.
SaveTimes.phpmaps theavailabilitystring positionally against the full slot list. Sending a subset causes silent misalignment. - Event creation uses multipart/form-data, not URL-encoded. In Python
requests, usefiles=parameter with(None, value)tuples. - Dates are pipe-delimited YYYY-MM-DD strings, not Unix timestamps.
- The redirect path is relative (e.g.
./?34954911-FtY36). Strip the./prefix before constructing the full URL. - No cookies or sessions needed. The person ID from login is the sole auth token for saving availability.
- Timezone awareness: Always fetch
TimeOfSlotvalues from the server rather than computing timestamps manually. The server handles timezone conversion when the event specifies aTimeZonefield.
Ready-to-Run Script
A complete, tested Python script is available at:
scripts/when2meet_setup.py
To customize for a new event, edit the configuration block at the top of the
script: EVENT_NAME, DATES, NO_EARLIER_THAN, NO_LATER_THAN,
TIMEZONE, and the PARTICIPANTS dictionary.
Run with: python scripts/when2meet_setup.py (requires requests in a venv).
Additional Resources
Reference Files
references/api-reference.md: Complete When2Meet API documentation with all endpoints, field formats, response parsing, and slot timestamp details
Scripts
scripts/when2meet_setup.py: Full working script for creating events and pre-filling availability. Edit the config block and run.