/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_type—individual(1:1),group(one host, many invitees), orcollective(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.nullif no host username is set. -
minimum_notice_hoursis 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, orusername/event-slug(URL-decoded by the router; passusername%2Fevent-slugin 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[].typeis one ofgoogle_meet,microsoft_teams,custom_url,phone,physical,ask_invitee. -
questions[].keyandidare the same value today —idis reused as the stable key for booking-form responses. -
requires_confirmationis alwaysfalse— 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 norusername/event-slug. -
404 event_type_not_found— no such event type in this account.
Last updated May 19, 2026.