Create a new platform user with automatic availability and meeting type setup, making them immediately ready for bookings.
Endpoint
| Header | Required | Description |
|---|
Authorization | Yes | Bearer <your-api-key> |
Content-Type | Yes | application/json |
Request Body
Basic Fields
| Field | Type | Required | Description |
|---|
email | string | Yes | User’s email address |
givenName | string | Yes | User’s first name |
familyName | string | Yes | User’s last name |
timezone | string | Yes | IANA timezone identifier (e.g., Europe/London) |
Optional: Custom Availability
| Field | Type | Description |
|---|
availability.name | string | Display name for the availability schedule |
availability.timezone | string | Timezone for the schedule |
availability.schedule | object | Weekly schedule with a property per day (format) |
Optional: Custom Meeting Type
| Field | Type | Description |
|---|
meetingType.name | string | Display name for the meeting type |
meetingType.duration | number | Meeting duration in minutes |
meetingType.slug | string | URL-friendly identifier for the booking page |
meetingType.channel | string | Meeting venue type. Defaults to phone. See channel values |
Examples
Basic Request
curl -X POST "https://api.meetergo.com/v4/user" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "john.smith@example.com",
"givenName": "John",
"familyName": "Smith",
"timezone": "Europe/London"
}'
With Custom Availability & Meeting Type
{
"email": "john.smith@example.com",
"givenName": "John",
"familyName": "Smith",
"timezone": "Europe/London",
"availability": {
"name": "John's Business Hours",
"timezone": "Europe/London",
"schedule": {
"monday": { "enabled": true, "hours": [{ "start": "09:00", "end": "17:00" }] },
"tuesday": { "enabled": true, "hours": [{ "start": "09:00", "end": "17:00" }] },
"wednesday": { "enabled": true, "hours": [{ "start": "09:00", "end": "17:00" }] },
"thursday": { "enabled": true, "hours": [{ "start": "09:00", "end": "17:00" }] },
"friday": { "enabled": true, "hours": [{ "start": "09:00", "end": "17:00" }] },
"saturday": { "enabled": false, "hours": [] },
"sunday": { "enabled": false, "hours": [] }
}
},
"meetingType": {
"name": "45 Minute Discovery Call",
"duration": 45,
"slug": "john-smith-45min",
"channel": "connect"
}
}
With Split Availability (Lunch Break)
{
"email": "john.smith@example.com",
"givenName": "John",
"familyName": "Smith",
"timezone": "Europe/London",
"availability": {
"name": "Business Hours with Lunch",
"timezone": "Europe/London",
"schedule": {
"monday": { "enabled": true, "hours": [{ "start": "09:00", "end": "12:00" }, { "start": "13:00", "end": "17:00" }] },
"tuesday": { "enabled": true, "hours": [{ "start": "09:00", "end": "12:00" }, { "start": "13:00", "end": "17:00" }] },
"wednesday": { "enabled": false, "hours": [] },
"thursday": { "enabled": false, "hours": [] },
"friday": { "enabled": false, "hours": [] },
"saturday": { "enabled": false, "hours": [] },
"sunday": { "enabled": false, "hours": [] }
}
}
}
Response
Success (201 Created)
{
"userId": "550e8400-e29b-41d4-a716-446655440000",
"availabilityId": "660e8400-e29b-41d4-a716-446655440001",
"meetingTypeId": "770e8400-e29b-41d4-a716-446655440002",
"bookingUrl": "https://cal.meetergo.com/john-smith/45min-discovery-call",
"companyId": "880e8400-e29b-41d4-a716-446655440003"
}
| Field | Description |
|---|
userId | UUID of the created user |
availabilityId | UUID of the created availability schedule |
meetingTypeId | UUID of the created meeting type |
bookingUrl | Public URL where customers can book meetings |
companyId | UUID of the company the user belongs to |
User Ready! The user is immediately ready for bookings. The bookingUrl can be shared with customers right away.
What was created automatically:
- Platform user with the provided details
- Default availability schedule (Mon-Fri 8-17 if not specified)
- Default meeting type (30min Meeting if not specified)
- Public booking URL for immediate use
Error Responses
400 Bad Request - Validation Error
{
"statusCode": 400,
"message": "Validation failed",
"errors": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
400 Bad Request - Invalid Timezone
{
"statusCode": 400,
"message": "Invalid timezone",
"error": "Bad Request"
}
409 Conflict - Email Already Exists
{
"statusCode": 409,
"message": "User with this email already exists",
"error": "Conflict"
}
The schedule is an object with a property for each day of the week. See the full schedule format reference.
Day Schedule Structure
Each day has two properties:
| Field | Type | Description |
|---|
enabled | boolean | Whether the day is available for booking |
hours | array | Time ranges when available |
Times are in 24-hour format (HH:MM):
{
"monday": {
"enabled": true,
"hours": [
{ "start": "09:00", "end": "12:00" },
{ "start": "13:00", "end": "17:00" }
]
}
}
Set enabled: false on days that should be unavailable (e.g., weekends). Days with enabled: true must include at least one time range in hours.
Meeting Type Channel Values
The channel field controls where the meeting takes place:
| Value | Description |
|---|
phone | Outgoing phone call (default) |
phone-incoming | Incoming phone call |
connect | meetergo Connect (browser-based video) |
google | Google Meet |
zoom | Zoom |
teamsForBusiness2 | Microsoft Teams |
webex | Webex |
whereby | Whereby |
kmeet | kMeet |
jitsi | Jitsi |
local | In-person at host’s location |
local-attendee | In-person at attendee’s location |
custom | Custom location |
Common Timezones
| Region | Timezone |
|---|
| UK | Europe/London |
| Germany | Europe/Berlin |
| France | Europe/Paris |
| US East | America/New_York |
| US West | America/Los_Angeles |
| Japan | Asia/Tokyo |
| Australia | Australia/Sydney |
See the full list of IANA timezone identifiers.