> ## Documentation Index
> Fetch the complete documentation index at: https://developer.meetergo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create User

> Create a fully schedulable platform user in a single API call

Create a new platform user with automatic availability and meeting type setup, making them immediately ready for bookings.

<Info>
  Creating platform users requires an active **API Platform subscription** and a **company admin** acting user. Personal Access Tokens cannot create users — authenticate with a Platform API Key.
</Info>

## Endpoint

```
POST /v4/user
```

## Request Headers

| 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](/developer-docs/core-concepts/availability#schedule-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](#meeting-type-channel-values) |

## Examples

### Basic Request

<CodeGroup>
  ```bash cURL theme={null}
  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"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.meetergo.com/v4/user', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      email: 'john.smith@example.com',
      givenName: 'John',
      familyName: 'Smith',
      timezone: 'Europe/London'
    })
  });

  const user = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      'https://api.meetergo.com/v4/user',
      headers={
          'Authorization': 'Bearer YOUR_API_KEY',
          'Content-Type': 'application/json'
      },
      json={
          'email': 'john.smith@example.com',
          'givenName': 'John',
          'familyName': 'Smith',
          'timezone': 'Europe/London'
      }
  )

  user = response.json()
  ```
</CodeGroup>

### With Custom Availability & Meeting Type

```json theme={null}
{
  "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)

```json theme={null}
{
  "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)

```json theme={null}
{
  "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 |

<Check>
  **User Ready!** The user is immediately ready for bookings. The `bookingUrl` can be shared with customers right away.
</Check>

<Info>
  **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
</Info>

### Error Responses

#### 400 Bad Request - Validation Error

```json theme={null}
{
  "statusCode": 400,
  "message": "Validation failed",
  "errors": [
    {
      "field": "email",
      "message": "Invalid email format"
    }
  ]
}
```

#### 400 Bad Request - Invalid Timezone

```json theme={null}
{
  "statusCode": 400,
  "message": "Invalid timezone",
  "error": "Bad Request"
}
```

#### 403 Forbidden - No API Platform Subscription

```json theme={null}
{
  "statusCode": 403,
  "message": "Company does not have access to 'apiPlatform' feature.",
  "error": "Forbidden"
}
```

#### 409 Conflict - Email Already Exists

```json theme={null}
{
  "statusCode": 409,
  "message": "User with this email already exists",
  "error": "Conflict"
}
```

## Availability Schedule Format

The schedule is an object with a property for each day of the week. See the [full schedule format reference](/developer-docs/core-concepts/availability#schedule-format).

### 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 |

### Time Format

Times are in 24-hour format (`HH:MM`):

```json theme={null}
{
  "monday": {
    "enabled": true,
    "hours": [
      { "start": "09:00", "end": "12:00" },
      { "start": "13:00", "end": "17:00" }
    ]
  }
}
```

<Tip>
  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`.
</Tip>

## 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](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.