Help API

    /v1/event-types

    Read access to the account's event types. There are no public write endpoints yet — create, update, and delete are scoped (event_types:create, event_types:update, event_types:delete) but not yet implemented; manage event types from the Event Types page in the meantime.

    Even though there's no write API, you can still track changes in real time: editing, toggling on/off, or deleting an event type in the dashboard emits the event_type.updated / event_type.deleted webhooks. The event_type.updated payload is byte-identical to GET /v1/event-types/:idOrSlug below (locations, questions[], limits and all), so an integration can keep its own mirror of your catalog in sync without polling.


    GET /v1/event-types

    List event types in the authenticated account.

    Method GET
    URL https://api.42min.us/v1/event-types
    Scope event_types:read
    Auth Required

    Query parameters

    Param Type Notes
    limit integer Page size. Default 20, max 100.
    cursor string Opaque cursor from a prior response's meta.next_cursor.
    sort string created_at_desc (default), created_at_asc, or title_asc.
    user_id UUID Filter to event types owned by one user.
    slug string Filter by exact slug.
    active boolean true → status=on; false → status=off. Omit to include both.

    Response

    {
      "data": [
        {
          "id": "01HXXX…",
          "slug": "intro-call",
          "title": "Intro call",
          "description": "30-minute introduction.",
          "duration_minutes": 30,
          "active": true,
          "scheduling_type": "individual",
          "hosts": [
            { "user_id": "01H…", "username": "ada", "name": "Ada Lovelace" }
          ],
          "url": "https://42min.us/ada/intro-call",
          "color": "#7c3aed",
          "buffer_before_minutes": 0,
          "buffer_after_minutes": 0,
          "minimum_notice_hours": 4,
          "future_limit_days": 60,
          "timezone": "Europe/London",
          "created_at": "2026-04-01T10:12:34.000Z",
          "updated_at": "2026-05-02T08:00:00.000Z"
        }
      ],
      "meta": {
        "request_id": "req_…",
        "next_cursor": "eyJpZCI6Ii4uLiJ9",
        "has_more": true
      }
    }
    

    Field notes:

    • scheduling_typeindividual (1:1), group (one host, many invitees), or collective (round-robin distribution among a team).
    • hosts — one entry for a 1:1 type; for round-robin types, the team members that can be assigned.
    • url — the live booking page on the marketing host. null if no host username is set.
    • minimum_notice_hours is rounded from minutes; the underlying field is per-minute.

    curl

    curl -H "Authorization: Bearer $TOKEN" \
      "https://api.42min.us/v1/event-types?active=true&limit=50"
    

    GET /v1/event-types/:idOrSlug

    Return one event type with the full detail shape — locations, questions, and limits.

    Method GET
    URL https://api.42min.us/v1/event-types/{id-or-slug}
    Scope event_types:read
    Auth Required

    Path parameter

    • {id-or-slug} — either a UUID, or username/event-slug (URL-decoded by the router; pass username%2Fevent-slug in URLs).

    Response

    {
      "data": {
        "id": "01HXXX…",
        "slug": "intro-call",
        "title": "Intro call",
        "description": "30-minute introduction.",
        "duration_minutes": 30,
        "active": true,
        "scheduling_type": "individual",
        "hosts": [{ "user_id": "01H…", "username": "ada", "name": "Ada Lovelace" }],
        "url": "https://42min.us/ada/intro-call",
        "color": "#7c3aed",
        "buffer_before_minutes": 5,
        "buffer_after_minutes": 5,
        "minimum_notice_hours": 4,
        "future_limit_days": 60,
        "timezone": "Europe/London",
        "locations": [
          { "type": "google_meet", "label": "Google Meet", "value": null }
        ],
        "questions": [
          { "id": "01Q…", "key": "01Q…", "label": "Phone number", "type": "short_text", "required": false }
        ],
        "max_bookings_per_day": 8,
        "max_bookings_per_week": null,
        "max_bookings_per_month": null,
        "requires_confirmation": false,
        "allow_reschedule": true,
        "allow_cancel": true,
        "created_at": "2026-04-01T10:12:34.000Z",
        "updated_at": "2026-05-02T08:00:00.000Z"
      },
      "meta": { "request_id": "req_…" }
    }
    

    Field notes:

    • locations[].type is one of google_meet, microsoft_teams, custom_url, phone, physical, ask_invitee.
    • questions[].key and id are the same value today — id is reused as the stable key for booking-form responses.
    • requires_confirmation is always false — the feature isn't modelled yet.

    curl

    # By UUID
    curl -H "Authorization: Bearer $TOKEN" \
      https://api.42min.us/v1/event-types/01HXXX…
    
    # By username/slug
    curl -H "Authorization: Bearer $TOKEN" \
      https://api.42min.us/v1/event-types/ada%2Fintro-call
    

    Common errors

    • 400 invalid_query_param — path segment is neither a UUID nor username/event-slug.
    • 404 event_type_not_found — no such event type in this account.

    Last updated May 19, 2026.