whentomeet

WhenToMeet group scheduling via public REST API.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "whentomeet" with this command: npx skills add felixwortmann/whentomeet

WhenToMeet

Base URL: https://whentomeet.io/api/v1/ OpenAPI Spec: https://whentomeet.io/api/openapi.json Authentication: Authorization: Bearer sk_YOUR_API_KEY_HERE

Request/Response Format

Request Format:

  • GET requests: Query parameters (e.g., ?limit=10&offset=0)
  • POST requests: Plain JSON body (e.g., {"title": "My Event"})
  • No wrapper objects - send plain JSON directly

Response Format:

  • All responses return plain JSON with ISO 8601 date strings
  • No envelope or wrapping

Date Format: ISO 8601 strings (e.g., "2026-03-14T14:00:00Z")

Data Model

Event Object

  • id: UUID
  • title: string (1-255 chars)
  • description: string (optional, max 4096 chars)
  • status: "PLANNING" | "FINALIZED"
  • publicUrl: Full URL to event page
  • organizerId: UUID
  • createdAt: ISO 8601 timestamp
  • modificationPolicy: "EVERYONE" | "ORGANIZER"
  • outputCalendarId: UUID (optional, for finalizing events to calendar)
  • slotCount: number of time slots

Time Slot Object

  • id: UUID
  • eventId: UUID
  • startTime: ISO 8601 timestamp
  • endTime: ISO 8601 timestamp
  • timezone: IANA timezone identifier (optional, e.g., "Europe/Berlin")
  • availabilities: array of participant responses

Create Event

POST /api/v1/events

curl -X POST "https://whentomeet.io/api/v1/events" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "My Event",
    "description": "Optional description",
    "slots": [
      {"startTime": "2026-03-14T14:00:00Z", "endTime": "2026-03-14T16:00:00Z"},
      {"startTime": "2026-03-15T14:00:00Z", "endTime": "2026-03-15T16:00:00Z"}
    ],
    "modificationPolicy": "EVERYONE"
  }'

Request Fields:

FieldTypeRequiredNotes
titlestringyes1-255 chars
descriptionstringnomax 4096 chars
slotsarrayyesmin 1 slot; each has startTime, endTime (ISO 8601), optional timezone
modificationPolicystringno"EVERYONE" or "ORGANIZER" (default)
outputCalendarIdstringnoUUID of calendar to create final event in

Response:

{
  "id": "uuid",
  "title": "My Event",
  "description": "Optional description",
  "status": "PLANNING",
  "publicUrl": "https://whentomeet.io/events/uuid",
  "slotCount": 2,
  "createdAt": "2026-03-14T14:00:00Z"
}

List Events

GET /api/v1/events

curl -X GET "https://whentomeet.io/api/v1/events?limit=10&offset=0&status=PLANNING" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE"

Query Parameters:

FieldTypeRequiredNotes
limitnumberno1-100, default 10
offsetnumbernodefault 0
statusstringno"PLANNING" or "FINALIZED"

Response:

[
  {
    "id": "uuid",
    "title": "My Event",
    "description": "...",
    "status": "PLANNING",
    "slotCount": 2,
    "publicUrl": "https://whentomeet.io/events/uuid",
    "createdAt": "2026-03-14T14:00:00Z"
  }
]

Get Event Details

GET /api/v1/events/{eventId}

curl -X GET "https://whentomeet.io/api/v1/events/{eventId}" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE"

Response:

{
  "id": "uuid",
  "title": "My Event",
  "description": "...",
  "status": "PLANNING",
  "organizerId": "uuid",
  "createdAt": "2026-03-14T14:00:00Z",
  "modificationPolicy": "EVERYONE",
  "outputCalendarId": null,
  "slots": [
    {
      "id": "uuid",
      "eventId": "uuid",
      "startTime": "2026-03-14T14:00:00Z",
      "endTime": "2026-03-14T16:00:00Z",
      "availabilities": [
        {
          "id": "uuid",
          "slotId": "uuid",
          "userId": null,
          "displayName": "John Doe",
          "status": "available",
          "user": null
        }
      ]
    }
  ]
}

Delete Event

DELETE /api/v1/events/{eventId}

curl -X DELETE "https://whentomeet.io/api/v1/events/{eventId}" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE"

Response:

{
  "success": true
}

Other Endpoints

List Bookings

GET /api/v1/bookings

curl -X GET "https://whentomeet.io/api/v1/bookings?limit=10&status=confirmed" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE"

Query Parameters:

  • limit: 1-100, default 10
  • offset: default 0
  • status: "confirmed" or "cancelled"

List Calendar Connections

GET /api/v1/calendar/connections

curl -X GET "https://whentomeet.io/api/v1/calendar/connections" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE"

Lists all connected calendar accounts (Google, Microsoft, CalDAV, iCal).

Get Event Statistics

GET /api/v1/analytics/events

curl -X GET "https://whentomeet.io/api/v1/analytics/events?dateFrom=2026-01-01T00:00:00Z&dateTo=2026-03-13T23:59:59Z" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE"

Query Parameters:

  • dateFrom: ISO 8601 start date (optional, defaults to 30 days ago)
  • dateTo: ISO 8601 end date (optional, defaults to now)

Response:

{
  "totalEvents": 42,
  "finalizedEvents": 28,
  "dateRange": {
    "from": "2026-01-01T00:00:00Z",
    "to": "2026-03-13T23:59:59Z"
  }
}

Error Codes

HTTP StatusCodeMeaning
400BAD_REQUESTInvalid input (check zodError in response for field details)
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENInsufficient permissions or subscription tier
404NOT_FOUNDResource not found or not owned by you
429TOO_MANY_REQUESTSRate limit exceeded
500INTERNAL_SERVER_ERRORServer error

Error Response Format:

{
  "error": {
    "code": "NOT_FOUND",
    "message": "Event not found or access denied"
  }
}

Rate Limits

TierLimit
Free32 requests (lifetime total)
Plus1,000 requests per hour
Plus Lifetime1,000 requests per hour

Check response headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset

Getting an API Key

  1. Sign up for a Plus or Plus Lifetime subscription
  2. Navigate to API Keys settings
  3. Click "Create API Key" and copy your key (shown only once)

Example: Complete Event Workflow

# 1. Create event
EVENT_RESPONSE=$(curl -X POST "https://whentomeet.io/api/v1/events" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Team Meeting",
    "description": "Weekly sync",
    "slots": [
      {"startTime": "2026-03-14T10:00:00Z", "endTime": "2026-03-14T11:00:00Z"},
      {"startTime": "2026-03-14T14:00:00Z", "endTime": "2026-03-14T15:00:00Z"}
    ],
    "modificationPolicy": "EVERYONE"
  }')

# Extract event ID
EVENT_ID=$(echo $EVENT_RESPONSE | jq -r '.id')
PUBLIC_URL=$(echo $EVENT_RESPONSE | jq -r '.publicUrl')

echo "Event created: $PUBLIC_URL"

# 2. List events
curl -X GET "https://whentomeet.io/api/v1/events" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE"

# 3. Get event details with participant responses
curl -X GET "https://whentomeet.io/api/v1/events/$EVENT_ID" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE"

# 4. Delete event (cleanup)
curl -X DELETE "https://whentomeet.io/api/v1/events/$EVENT_ID" \
  -H "Authorization: Bearer sk_YOUR_API_KEY_HERE"

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Cclaw

Open-source comedy AI + video editing + poster generation. Create standup/sketch/manzai/scripts, edit videos via FFmpeg, and generate comedy posters via canv...

Registry SourceRecently Updated
General

Bird Recognition Tool | 鸟类识别工具

Identifies bird species in images/videos of target areas. Supports recognition of no less than 500 common bird species, supports customized model training, s...

Registry SourceRecently Updated
General

Image Amazon Product Image Suite

A professional product image generation skill purpose-built for the Amazon e-commerce platform. Outputs comply with Amazon's image guidelines while optimizin...

Registry SourceRecently Updated
General

SearchOnlineAssets

Online asset search tool: queries public stock libraries (Pixabay) for high-quality photos, illustrations, vectors and videos, returning result metadata and...

Registry SourceRecently Updated