whentomeet
// Create, list, fetch, and delete WhenToMeet planning events via the authenticated tRPC v1 API.
$ git log --oneline --stat
stars:1,933
forks:367
updated:March 4, 2026
SKILL.mdreadonly
SKILL.md Frontmatter
namewhentomeet
descriptionCreate, list, fetch, and delete WhenToMeet planning events via the authenticated tRPC v1 API.
compatibilityRequires Python 3, internet access, and WHENTOMEET_API_KEY in environment.
metadata[object Object]
WhenToMeet Skill
Use this skill for authenticated management of planning events. More info about whentomeet.io: https://whentomeet.io/llms.txt
Activation criteria
Use when user asks to:
- Create an event with candidate time slots
- List their events
- Fetch details for one event
- Delete an event
Do not use if the request requires undocumented endpoints/fields.
Required context
- Env var:
WHENTOMEET_API_KEY - Base URL:
https://whentomeet.io/api/trpc - Auth:
Authorization: Bearer $WHENTOMEET_API_KEY - tRPC payload envelope:
{"json": {...}} - For GET, pass URL-encoded
input=<encoded {"json": ...}>
Available scripts
scripts/w2m_events.py— non-interactive CLI forcreate,list,get,delete, andencode-input.
Supported procedures (v1)
v1.event.create(POST)v1.event.list(GET)v1.event.get(GET)v1.event.delete(POST)
Core data model
Event fields:
id(UUID)title(string)description(optional string)status(PLANNINGorFINALIZED)publicUrl(URL)
Slot fields:
startTime(ISO-8601)endTime(ISO-8601)
Preconditions
Before calling API:
- Ensure API key exists.
- Ensure each slot has valid ISO timestamps and
endTime > startTime. - For delete, require explicit user confirmation with exact
eventId.
Preferred workflow (script-first)
Run commands from the skill root.
List events:
python3 scripts/w2m_events.py list
Create event:
python3 scripts/w2m_events.py create \
--title "Team Sync" \
--description "Optional description" \
--slots-json '[{"startTime":"2026-03-02T12:00:00.000Z","endTime":"2026-03-02T13:00:00.000Z"}]' \
--modification-policy EVERYONE
Get event:
python3 scripts/w2m_events.py get --event-id "uuid"
Delete event (requires explicit confirmation flag):
python3 scripts/w2m_events.py delete --event-id "uuid" --confirm
Encode GET input payload:
python3 scripts/w2m_events.py encode-input --json '{"eventId":"uuid"}'
HTTP fallback examples
Use only when script execution is unavailable.
Create event (v1.event.create):
curl -sS -X POST "https://whentomeet.io/api/trpc/v1.event.create" \
-H "Authorization: Bearer $WHENTOMEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"json": {
"title": "My Event",
"description": "Optional description",
"slots": [
{"startTime": "2026-03-02T12:00:00.000Z", "endTime": "2026-03-02T14:00:00.000Z"},
{"startTime": "2026-03-03T12:00:00.000Z", "endTime": "2026-03-03T14:00:00.000Z"}
],
"modificationPolicy": "EVERYONE"
}}'
List events (v1.event.list):
curl -sS -X GET "https://whentomeet.io/api/trpc/v1.event.list?input=%7B%22json%22%3A%7B%7D%7D" \
-H "Authorization: Bearer $WHENTOMEET_API_KEY"
Get event (v1.event.get):
curl -sS -X GET "https://whentomeet.io/api/trpc/v1.event.get?input=%7B%22json%22%3A%7B%22eventId%22%3A%22uuid%22%7D%7D" \
-H "Authorization: Bearer $WHENTOMEET_API_KEY"
Delete event (v1.event.delete):
curl -sS -X POST "https://whentomeet.io/api/trpc/v1.event.delete" \
-H "Authorization: Bearer $WHENTOMEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"json": {"eventId": "uuid"}}'
GET input encoding helper:
INPUT=$(python3 - <<'PY'
import json, urllib.parse
payload = {"json": {"eventId": "uuid"}}
print(urllib.parse.quote(json.dumps(payload, separators=(",", ":"))))
PY
)
curl -sS "https://whentomeet.io/api/trpc/v1.event.get?input=${INPUT}" \
-H "Authorization: Bearer $WHENTOMEET_API_KEY"
Agent execution contract
- Use
scripts/w2m_events.pyfirst. - Use the smallest matching procedure.
- Send exact input shape (no invented fields).
- Parse
result.data.jsononly. - Return concise results:
- create:
id,status,publicUrl - list: count + compact per-event summary
- get: core fields + slots
- delete: explicit success/failure
- Include rate-limit context on failures.
Errors and retries
- 400: invalid wrapper/shape/timestamps
- 401/403: invalid key or access restriction
- 404: event not found
- 429: throttle; wait until
X-RateLimit-Resetbefore one retry
Never retry non-idempotent create/delete blindly more than once.
Rate limits
- Free: 32 requests (lifetime)
- Plus: 1,000 requests/hour
- Headers:
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset
Safety rules
- Never log or echo raw API keys.
- Never fabricate event IDs, URLs, or statuses.
- Do not claim write success unless response confirms it.
- If response shape differs, report mismatch and return observed keys.
References
references/quickstart.md— copy/paste request flows for create/list/get/delete.references/troubleshooting.md— error diagnosis, retry behavior, and safety checks.