# Structurely Direct v2

## Overview

The Structurely API allows integrators to provide automation for their accounts. It offers various functionalities to streamline lead management, messaging, lead qualification conversations, and retrieval of metadata.

The Structurely API simplifies the integration process and removes the necessity to track additional fields in your system. It is specifically designed to utilize **your system's IDs** as internal keys, enabling you to seamlessly use IDs from your CRM or database as parameters, such as externalLeadId, and externalMessageId.

By utilizing this API, integrators can streamline their workflows, activate enhanced AI qualification conversations, and gain valuable insights into their accounts, leads, and conversations.

### Security

The Structurely API provides secure authentication and authorization mechanisms to ensure controlled access to its endpoints. The authentication system utilizes API tokens to secure interactions with the API.

Types of tokens and keys:

  
- bearer-access-token: Bearer JWT; **valid until deactivated**

**Note:** It is essential to keep your bearer-access-tokens secure and avoid sharing them with unauthorized parties to maintain the integrity and security of your Structurely API integration.

Version: `v3.35.20`

## User Management

- [GET /api/direct/v2/users](/api/direct/v2/users/get.md)
- [POST /api/direct/v2/users](/api/direct/v2/users/post.md)
- [GET /api/direct/v2/users/{userId}](/api/direct/v2/users/{userId}/get.md)
- [PATCH /api/direct/v2/users/{userId}](/api/direct/v2/users/{userId}/patch.md)
- [DELETE /api/direct/v2/users/{userId}](/api/direct/v2/users/{userId}/delete.md)
- [POST /api/direct/v2/users/{userId}/cross-launch](/api/direct/v2/users/{userId}/cross-launch/post.md)

### GET /api/direct/v2/users

[GET /api/direct/v2/users](/api/direct/v2/users/get.md)

**Summary:** List users

**Description:**

List users with optional filtering

#### Parameters

- `limit` (query, required: no)
  - Maximum number of results to return
  - Schema:
    ```json
    {
      "type": "integer"
    }
    ```
- `offset` (query, required: no)
  - Number of results to skip
  - Schema:
    ```json
    {
      "type": "integer"
    }
    ```
- `archived` (query, required: no)
  - Filter by archived status
  - Schema:
    ```json
    {
      "type": "boolean"
    }
    ```
- `email` (query, required: no)
  - Filter by email
  - Schema:
    ```json
    {
      "type": "string"
    }
    ```
- `name` (query, required: no)
  - Filter by name
  - Schema:
    ```json
    {
      "type": "string"
    }
    ```
- `teamId` (query, required: no)
  - Filter by team ID
  - Schema:
    ```json
    {
      "type": "string"
    }
    ```

#### Responses

- `200`: List of users
  - Schema: `UserList`
  ```json
  {
    "type": "object",
    "properties": {
      "data": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/User"
        }
      },
      "total": {
        "type": "integer"
      },
      "limit": {
        "type": "integer"
      },
      "offset": {
        "type": "integer"
      }
    }
  }
  ```
- `400`: Invalid request, check response message
  - Schema: `InvalidRequest`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "The parameter leadId must be provided"
      },
      "statusCode": {
        "type": "number",
        "example": 400
      }
    }
  }
  ```
- `401`: Request is not authorized
  - Schema: `NotAuthorized`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Access Token is not authorized"
      },
      "statusCode": {
        "type": "number",
        "example": 401
      }
    }
  }
  ```
- `500`: Internal server error, check response message
  - Schema: `InternalServerError`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Internal server error"
      },
      "statusCode": {
        "type": "number",
        "example": 500
      }
    }
  }
  ```

#### Security

- `bearer-access-token`

#### Example request

```bash
curl -sS -X GET 'https://client.structurely.com/api/direct/v2/users' \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $STRUCTURELY_API_TOKEN"
```

### POST /api/direct/v2/users

[POST /api/direct/v2/users](/api/direct/v2/users/post.md)

**Summary:** Create a new user

**Description:**

Create a new user in the system

#### Request body

User creation parameters

Schema: `CreateUser`

```json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "phone": {
      "type": "string"
    },
    "isFauxUser": {
      "type": "boolean",
      "default": false
    },
    "teamId": {
      "type": "string",
      "format": "ObjectId",
      "nullable": true
    }
  },
  "required": [
    "email",
    "name",
    "phone"
  ]
}
```

#### Responses

- `201`: Created user
  - Schema: `User`
  ```json
  {
    "type": "object",
    "properties": {
      "id": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId"
      },
      "name": {
        "type": "string",
        "readOnly": true
      },
      "email": {
        "type": "string",
        "format": "email",
        "readOnly": true
      },
      "phone": {
        "type": "string",
        "readOnly": true
      },
      "isFauxUser": {
        "type": "boolean",
        "readOnly": true
      },
      "archivedAt": {
        "type": "string",
        "format": "date-time",
        "readOnly": true,
        "nullable": true
      },
      "teamId": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId",
        "nullable": true
      },
      "accountId": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId",
        "nullable": true
      },
      "createdAt": {
        "type": "string",
        "format": "date-time",
        "readOnly": true
      },
      "updatedAt": {
        "type": "string",
        "format": "date-time",
        "readOnly": true
      }
    }
  }
  ```
- `400`: Invalid request, check response message
  - Schema: `InvalidRequest`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "The parameter leadId must be provided"
      },
      "statusCode": {
        "type": "number",
        "example": 400
      }
    }
  }
  ```
- `401`: Request is not authorized
  - Schema: `NotAuthorized`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Access Token is not authorized"
      },
      "statusCode": {
        "type": "number",
        "example": 401
      }
    }
  }
  ```
- `500`: Internal server error, check response message
  - Schema: `InternalServerError`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Internal server error"
      },
      "statusCode": {
        "type": "number",
        "example": 500
      }
    }
  }
  ```

#### Security

- `bearer-access-token`

#### Example request

```bash
curl -sS -X POST 'https://client.structurely.com/api/direct/v2/users' \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $STRUCTURELY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "string",
  "name": "string",
  "phone": "string"
}'
```

### GET /api/direct/v2/users/{userId}

[GET /api/direct/v2/users/{userId}](/api/direct/v2/users/{userId}/get.md)

**Summary:** Retrieve a user detail resource

**Description:**

Retrieve one active user belonging to the authenticated brokerage. Requires read:users or write:users scope.

#### Parameters

- `userId` (path, required: yes)
  - The active brokerage user ID.
  - Schema:
    ```json
    {
      "oneOf": [
        {
          "format": "ObjectId",
          "type": "string"
        }
      ]
    }
    ```

#### Responses

- `200`: User detail
  - Schema: `UserDetail`
  ```json
  {
    "type": "object",
    "properties": {
      "id": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId"
      },
      "name": {
        "type": "string",
        "readOnly": true
      },
      "phone": {
        "type": "string",
        "readOnly": true,
        "nullable": true
      },
      "isFauxUser": {
        "type": "boolean",
        "readOnly": true
      },
      "teamId": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId",
        "nullable": true
      },
      "accountId": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId"
      },
      "settings": {
        "readOnly": true,
        "allOf": [
          {
            "$ref": "#/components/schemas/UserSettings"
          }
        ]
      }
    },
    "required": [
      "accountId",
      "id",
      "isFauxUser",
      "name",
      "phone",
      "settings",
      "teamId"
    ]
  }
  ```
- `400`: Invalid request, check response message
  - Schema: `InvalidRequest`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "The parameter leadId must be provided"
      },
      "statusCode": {
        "type": "number",
        "example": 400
      }
    }
  }
  ```
- `401`: Request is not authorized
  - Schema: `NotAuthorized`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Access Token is not authorized"
      },
      "statusCode": {
        "type": "number",
        "example": 401
      }
    }
  }
  ```
- `403`: Access is restricted to brokerage accounts.
  - Schema: `NotAuthorized`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Access Token is not authorized"
      },
      "statusCode": {
        "type": "number",
        "example": 401
      }
    }
  }
  ```
- `404`: Resource was not found, check response message
  - Schema: `NotFound`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Lead not found"
      },
      "statusCode": {
        "type": "number",
        "example": 404
      }
    }
  }
  ```
- `500`: Internal server error, check response message
  - Schema: `InternalServerError`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Internal server error"
      },
      "statusCode": {
        "type": "number",
        "example": 500
      }
    }
  }
  ```

#### Security

- `bearer-access-token`

#### Example request

```bash
curl -sS -X GET 'https://client.structurely.com/api/direct/v2/users/{userId}' \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $STRUCTURELY_API_TOKEN"
```

### PATCH /api/direct/v2/users/{userId}

[PATCH /api/direct/v2/users/{userId}](/api/direct/v2/users/{userId}/patch.md)

**Summary:** Update a user detail resource

**Description:**

Update approved user profile and local settings fields. Omitted fields preserve their existing values. Requires write:users scope.

#### Parameters

- `userId` (path, required: yes)
  - The active brokerage user ID.
  - Schema:
    ```json
    {
      "oneOf": [
        {
          "format": "ObjectId",
          "type": "string"
        }
      ]
    }
    ```

#### Request body

User fields to update.

Schema: `PatchUser`

```json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "phone": {
      "type": "string",
      "nullable": true
    },
    "settings": {
      "$ref": "#/components/schemas/PatchUserSettings"
    }
  }
}
```

#### Responses

- `200`: Updated user detail
  - Schema: `UserDetail`
  ```json
  {
    "type": "object",
    "properties": {
      "id": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId"
      },
      "name": {
        "type": "string",
        "readOnly": true
      },
      "phone": {
        "type": "string",
        "readOnly": true,
        "nullable": true
      },
      "isFauxUser": {
        "type": "boolean",
        "readOnly": true
      },
      "teamId": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId",
        "nullable": true
      },
      "accountId": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId"
      },
      "settings": {
        "readOnly": true,
        "allOf": [
          {
            "$ref": "#/components/schemas/UserSettings"
          }
        ]
      }
    },
    "required": [
      "accountId",
      "id",
      "isFauxUser",
      "name",
      "phone",
      "settings",
      "teamId"
    ]
  }
  ```
- `400`: Invalid request, check response message
  - Schema: `InvalidRequest`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "The parameter leadId must be provided"
      },
      "statusCode": {
        "type": "number",
        "example": 400
      }
    }
  }
  ```
- `401`: Request is not authorized
  - Schema: `NotAuthorized`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Access Token is not authorized"
      },
      "statusCode": {
        "type": "number",
        "example": 401
      }
    }
  }
  ```
- `403`: Access is restricted to brokerage accounts.
  - Schema: `NotAuthorized`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Access Token is not authorized"
      },
      "statusCode": {
        "type": "number",
        "example": 401
      }
    }
  }
  ```
- `404`: Resource was not found, check response message
  - Schema: `NotFound`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Lead not found"
      },
      "statusCode": {
        "type": "number",
        "example": 404
      }
    }
  }
  ```
- `500`: Internal server error, check response message
  - Schema: `InternalServerError`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Internal server error"
      },
      "statusCode": {
        "type": "number",
        "example": 500
      }
    }
  }
  ```

#### Security

- `bearer-access-token`

#### Example request

```bash
curl -sS -X PATCH 'https://client.structurely.com/api/direct/v2/users/{userId}' \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $STRUCTURELY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
```

### DELETE /api/direct/v2/users/{userId}

[DELETE /api/direct/v2/users/{userId}](/api/direct/v2/users/{userId}/delete.md)

**Summary:** Archive a user

**Description:**

Archive an existing user. Requires write:users scope.

#### Parameters

- `userId` (path, required: yes)
  - The User's ID to archive, this action is not reversible
  - Schema:
    ```json
    {
      "oneOf": [
        {
          "format": "ObjectId",
          "type": "string"
        }
      ]
    }
    ```

#### Responses

- `204`: User archived successfully
  - Schema: `User`
  ```json
  {
    "type": "object",
    "properties": {
      "id": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId"
      },
      "name": {
        "type": "string",
        "readOnly": true
      },
      "email": {
        "type": "string",
        "format": "email",
        "readOnly": true
      },
      "phone": {
        "type": "string",
        "readOnly": true
      },
      "isFauxUser": {
        "type": "boolean",
        "readOnly": true
      },
      "archivedAt": {
        "type": "string",
        "format": "date-time",
        "readOnly": true,
        "nullable": true
      },
      "teamId": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId",
        "nullable": true
      },
      "accountId": {
        "readOnly": true,
        "type": "string",
        "format": "ObjectId",
        "nullable": true
      },
      "createdAt": {
        "type": "string",
        "format": "date-time",
        "readOnly": true
      },
      "updatedAt": {
        "type": "string",
        "format": "date-time",
        "readOnly": true
      }
    }
  }
  ```
- `400`: Invalid request, check response message
  - Schema: `InvalidRequest`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "The parameter leadId must be provided"
      },
      "statusCode": {
        "type": "number",
        "example": 400
      }
    }
  }
  ```
- `401`: Request is not authorized
  - Schema: `NotAuthorized`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Access Token is not authorized"
      },
      "statusCode": {
        "type": "number",
        "example": 401
      }
    }
  }
  ```
- `403`: Access is restricted to brokerage accounts.
  - Schema: `NotAuthorized`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Access Token is not authorized"
      },
      "statusCode": {
        "type": "number",
        "example": 401
      }
    }
  }
  ```
- `404`: Resource was not found, check response message
  - Schema: `NotFound`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Lead not found"
      },
      "statusCode": {
        "type": "number",
        "example": 404
      }
    }
  }
  ```
- `500`: Internal server error, check response message
  - Schema: `InternalServerError`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Internal server error"
      },
      "statusCode": {
        "type": "number",
        "example": 500
      }
    }
  }
  ```

#### Security

- `bearer-access-token`

#### Example request

```bash
curl -sS -X DELETE 'https://client.structurely.com/api/direct/v2/users/{userId}' \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $STRUCTURELY_API_TOKEN"
```

### POST /api/direct/v2/users/{userId}/cross-launch

[POST /api/direct/v2/users/{userId}/cross-launch](/api/direct/v2/users/{userId}/cross-launch/post.md)

**Summary:** Create a Portal cross-launch URL for a user

**Description:**

Create a fully formed Portal cross-launch URL for an active brokerage user. Requires write:users scope.

#### Parameters

- `userId` (path, required: yes)
  - The active brokerage user ID.
  - Schema:
    ```json
    {
      "oneOf": [
        {
          "format": "ObjectId",
          "type": "string"
        }
      ]
    }
    ```

#### Request body

Optional Portal destination for the cross-launch.

Schema: `CrossLaunchRequest`

```json
{
  "type": "object",
  "properties": {
    "targetUri": {
      "type": "string",
      "nullable": true
    }
  }
}
```

#### Responses

- `200`: Portal cross-launch URL
  - Schema: `CrossLaunchResponse`
  ```json
  {
    "type": "object",
    "properties": {
      "url": {
        "type": "string",
        "readOnly": true
      }
    },
    "required": [
      "url"
    ]
  }
  ```
- `400`: Invalid request, check response message
  - Schema: `InvalidRequest`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "The parameter leadId must be provided"
      },
      "statusCode": {
        "type": "number",
        "example": 400
      }
    }
  }
  ```
- `401`: Request is not authorized
  - Schema: `NotAuthorized`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Access Token is not authorized"
      },
      "statusCode": {
        "type": "number",
        "example": 401
      }
    }
  }
  ```
- `403`: Access is restricted to brokerage accounts or the session is not authorized to cross-launch.
  - Schema: `NotAuthorized`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Access Token is not authorized"
      },
      "statusCode": {
        "type": "number",
        "example": 401
      }
    }
  }
  ```
- `404`: Resource was not found, check response message
  - Schema: `NotFound`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Lead not found"
      },
      "statusCode": {
        "type": "number",
        "example": 404
      }
    }
  }
  ```
- `500`: Internal server error, check response message
  - Schema: `InternalServerError`
  ```json
  {
    "type": "object",
    "properties": {
      "message": {
        "type": "string",
        "description": "A message describing the error",
        "example": "Internal server error"
      },
      "statusCode": {
        "type": "number",
        "example": 500
      }
    }
  }
  ```

#### Security

- `bearer-access-token`

#### Example request

```bash
curl -sS -X POST 'https://client.structurely.com/api/direct/v2/users/{userId}/cross-launch' \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $STRUCTURELY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
```

## Schemas

### `AccountHoursOfOperation`

```json
{
  "type": "object",
  "properties": {
    "monday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/AccountHoursOfOperationMode"
      }
    },
    "tuesday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/AccountHoursOfOperationMode"
      }
    },
    "wednesday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/AccountHoursOfOperationMode"
      }
    },
    "thursday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/AccountHoursOfOperationMode"
      }
    },
    "friday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/AccountHoursOfOperationMode"
      }
    },
    "saturday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/AccountHoursOfOperationMode"
      }
    },
    "sunday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/AccountHoursOfOperationMode"
      }
    }
  },
  "required": [
    "friday",
    "monday",
    "saturday",
    "sunday",
    "thursday",
    "tuesday",
    "wednesday"
  ]
}
```

### `AccountHoursOfOperationMode`

```json
{
  "type": "object",
  "properties": {
    "time": {
      "type": "string",
      "enum": [
        "12a",
        "1a",
        "2a",
        "3a",
        "4a",
        "5a",
        "6a",
        "7a",
        "8a",
        "9a",
        "10a",
        "11a",
        "12p",
        "1p",
        "2p",
        "3p",
        "4p",
        "5p",
        "6p",
        "7p",
        "8p",
        "9p",
        "10p",
        "11p"
      ]
    },
    "mode": {
      "type": "string",
      "enum": [
        "active",
        "sleep"
      ]
    }
  },
  "required": [
    "mode",
    "time"
  ]
}
```

### `CreateUser`

```json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "phone": {
      "type": "string"
    },
    "isFauxUser": {
      "type": "boolean",
      "default": false
    },
    "teamId": {
      "type": "string",
      "format": "ObjectId",
      "nullable": true
    }
  },
  "required": [
    "email",
    "name",
    "phone"
  ]
}
```

### `CrossLaunchRequest`

```json
{
  "type": "object",
  "properties": {
    "targetUri": {
      "type": "string",
      "nullable": true
    }
  }
}
```

### `CrossLaunchResponse`

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "readOnly": true
    }
  },
  "required": [
    "url"
  ]
}
```

### `InternalServerError`

```json
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "A message describing the error",
      "example": "Internal server error"
    },
    "statusCode": {
      "type": "number",
      "example": 500
    }
  }
}
```

### `InvalidRequest`

```json
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "A message describing the error",
      "example": "The parameter leadId must be provided"
    },
    "statusCode": {
      "type": "number",
      "example": 400
    }
  }
}
```

### `NotAuthorized`

```json
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "A message describing the error",
      "example": "Access Token is not authorized"
    },
    "statusCode": {
      "type": "number",
      "example": 401
    }
  }
}
```

### `NotFound`

```json
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "A message describing the error",
      "example": "Lead not found"
    },
    "statusCode": {
      "type": "number",
      "example": 404
    }
  }
}
```

### `PatchUser`

```json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "phone": {
      "type": "string",
      "nullable": true
    },
    "settings": {
      "$ref": "#/components/schemas/PatchUserSettings"
    }
  }
}
```

### `PatchUserAppointmentScheduling`

```json
{
  "type": "object",
  "properties": {
    "isActive": {
      "type": "boolean",
      "description": "Whether FAUX appointment scheduling is active."
    },
    "appointmentDuration": {
      "type": "integer",
      "minimum": 10,
      "maximum": 180,
      "description": "FAUX appointment duration in whole minutes, honored exactly."
    },
    "weeklyAvailability": {
      "description": "One or more weekday replacements. Omitted weekdays are preserved.",
      "minProperties": 1,
      "allOf": [
        {
          "$ref": "#/components/schemas/PatchUserAppointmentSchedulingWeeklyAvailability"
        }
      ]
    }
  }
}
```

### `PatchUserAppointmentSchedulingWeeklyAvailability`

```json
{
  "type": "object",
  "properties": {
    "monday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "tuesday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "wednesday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "thursday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "friday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "saturday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "sunday": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    }
  }
}
```

### `PatchUserSettings`

```json
{
  "type": "object",
  "properties": {
    "defaultChatbotName": {
      "type": "string",
      "nullable": true
    },
    "chatbotHoursOfOperation": {
      "$ref": "#/components/schemas/AccountHoursOfOperation"
    },
    "callingHoursOfOperation": {
      "$ref": "#/components/schemas/AccountHoursOfOperation"
    },
    "timeZone": {
      "type": "string",
      "enum": [
        "Africa/Abidjan",
        "Africa/Accra",
        "Africa/Addis_Ababa",
        "Africa/Algiers",
        "Africa/Asmara",
        "Africa/Bamako",
        "Africa/Bangui",
        "Africa/Banjul",
        "Africa/Bissau",
        "Africa/Blantyre",
        "Africa/Brazzaville",
        "Africa/Bujumbura",
        "Africa/Cairo",
        "Africa/Casablanca",
        "Africa/Ceuta",
        "Africa/Conakry",
        "Africa/Dakar",
        "Africa/Dar_es_Salaam",
        "Africa/Djibouti",
        "Africa/Douala",
        "Africa/El_Aaiun",
        "Africa/Freetown",
        "Africa/Gaborone",
        "Africa/Harare",
        "Africa/Johannesburg",
        "Africa/Juba",
        "Africa/Kampala",
        "Africa/Khartoum",
        "Africa/Kigali",
        "Africa/Kinshasa",
        "Africa/Lagos",
        "Africa/Libreville",
        "Africa/Lome",
        "Africa/Luanda",
        "Africa/Lubumbashi",
        "Africa/Lusaka",
        "Africa/Malabo",
        "Africa/Maputo",
        "Africa/Maseru",
        "Africa/Mbabane",
        "Africa/Mogadishu",
        "Africa/Monrovia",
        "Africa/Nairobi",
        "Africa/Ndjamena",
        "Africa/Niamey",
        "Africa/Nouakchott",
        "Africa/Ouagadougou",
        "Africa/Porto-Novo",
        "Africa/Sao_Tome",
        "Africa/Tripoli",
        "Africa/Tunis",
        "Africa/Windhoek",
        "America/Adak",
        "America/Anchorage",
        "America/Anguilla",
        "America/Antigua",
        "America/Araguaina",
        "America/Argentina/Buenos_Aires",
        "America/Argentina/Catamarca",
        "America/Argentina/Cordoba",
        "America/Argentina/Jujuy",
        "America/Argentina/La_Rioja",
        "America/Argentina/Mendoza",
        "America/Argentina/Rio_Gallegos",
        "America/Argentina/Salta",
        "America/Argentina/San_Juan",
        "America/Argentina/San_Luis",
        "America/Argentina/Tucuman",
        "America/Argentina/Ushuaia",
        "America/Aruba",
        "America/Asuncion",
        "America/Atikokan",
        "America/Bahia",
        "America/Bahia_Banderas",
        "America/Barbados",
        "America/Belem",
        "America/Belize",
        "America/Blanc-Sablon",
        "America/Boa_Vista",
        "America/Bogota",
        "America/Boise",
        "America/Cambridge_Bay",
        "America/Campo_Grande",
        "America/Cancun",
        "America/Caracas",
        "America/Cayenne",
        "America/Cayman",
        "America/Chicago",
        "America/Chihuahua",
        "America/Ciudad_Juarez",
        "America/Costa_Rica",
        "America/Creston",
        "America/Cuiaba",
        "America/Curacao",
        "America/Danmarkshavn",
        "America/Dawson",
        "America/Dawson_Creek",
        "America/Denver",
        "America/Detroit",
        "America/Dominica",
        "America/Edmonton",
        "America/Eirunepe",
        "America/El_Salvador",
        "America/Fort_Nelson",
        "America/Fortaleza",
        "America/Glace_Bay",
        "America/Goose_Bay",
        "America/Grand_Turk",
        "America/Grenada",
        "America/Guadeloupe",
        "America/Guatemala",
        "America/Guayaquil",
        "America/Guyana",
        "America/Halifax",
        "America/Havana",
        "America/Hermosillo",
        "America/Indiana/Indianapolis",
        "America/Indiana/Knox",
        "America/Indiana/Marengo",
        "America/Indiana/Petersburg",
        "America/Indiana/Tell_City",
        "America/Indiana/Vevay",
        "America/Indiana/Vincennes",
        "America/Indiana/Winamac",
        "America/Inuvik",
        "America/Iqaluit",
        "America/Jamaica",
        "America/Juneau",
        "America/Kentucky/Louisville",
        "America/Kentucky/Monticello",
        "America/Kralendijk",
        "America/La_Paz",
        "America/Lima",
        "America/Los_Angeles",
        "America/Lower_Princes",
        "America/Maceio",
        "America/Managua",
        "America/Manaus",
        "America/Marigot",
        "America/Martinique",
        "America/Matamoros",
        "America/Mazatlan",
        "America/Menominee",
        "America/Merida",
        "America/Metlakatla",
        "America/Mexico_City",
        "America/Miquelon",
        "America/Moncton",
        "America/Monterrey",
        "America/Montevideo",
        "America/Montserrat",
        "America/Nassau",
        "America/New_York",
        "America/Nome",
        "America/Noronha",
        "America/North_Dakota/Beulah",
        "America/North_Dakota/Center",
        "America/North_Dakota/New_Salem",
        "America/Nuuk",
        "America/Ojinaga",
        "America/Panama",
        "America/Paramaribo",
        "America/Phoenix",
        "America/Port-au-Prince",
        "America/Port_of_Spain",
        "America/Porto_Velho",
        "America/Puerto_Rico",
        "America/Punta_Arenas",
        "America/Rankin_Inlet",
        "America/Recife",
        "America/Regina",
        "America/Resolute",
        "America/Rio_Branco",
        "America/Santarem",
        "America/Santiago",
        "America/Santo_Domingo",
        "America/Sao_Paulo",
        "America/Scoresbysund",
        "America/Sitka",
        "America/St_Barthelemy",
        "America/St_Johns",
        "America/St_Kitts",
        "America/St_Lucia",
        "America/St_Thomas",
        "America/St_Vincent",
        "America/Swift_Current",
        "America/Tegucigalpa",
        "America/Thule",
        "America/Tijuana",
        "America/Toronto",
        "America/Tortola",
        "America/Vancouver",
        "America/Whitehorse",
        "America/Winnipeg",
        "America/Yakutat",
        "Antarctica/Casey",
        "Antarctica/Davis",
        "Antarctica/DumontDUrville",
        "Antarctica/Macquarie",
        "Antarctica/Mawson",
        "Antarctica/McMurdo",
        "Antarctica/Palmer",
        "Antarctica/Rothera",
        "Antarctica/Syowa",
        "Antarctica/Troll",
        "Antarctica/Vostok",
        "Arctic/Longyearbyen",
        "Asia/Aden",
        "Asia/Almaty",
        "Asia/Amman",
        "Asia/Anadyr",
        "Asia/Aqtau",
        "Asia/Aqtobe",
        "Asia/Ashgabat",
        "Asia/Atyrau",
        "Asia/Baghdad",
        "Asia/Bahrain",
        "Asia/Baku",
        "Asia/Bangkok",
        "Asia/Barnaul",
        "Asia/Beirut",
        "Asia/Bishkek",
        "Asia/Brunei",
        "Asia/Chita",
        "Asia/Choibalsan",
        "Asia/Colombo",
        "Asia/Damascus",
        "Asia/Dhaka",
        "Asia/Dili",
        "Asia/Dubai",
        "Asia/Dushanbe",
        "Asia/Famagusta",
        "Asia/Gaza",
        "Asia/Hebron",
        "Asia/Ho_Chi_Minh",
        "Asia/Hong_Kong",
        "Asia/Hovd",
        "Asia/Irkutsk",
        "Asia/Jakarta",
        "Asia/Jayapura",
        "Asia/Jerusalem",
        "Asia/Kabul",
        "Asia/Kamchatka",
        "Asia/Karachi",
        "Asia/Kathmandu",
        "Asia/Khandyga",
        "Asia/Kolkata",
        "Asia/Krasnoyarsk",
        "Asia/Kuala_Lumpur",
        "Asia/Kuching",
        "Asia/Kuwait",
        "Asia/Macau",
        "Asia/Magadan",
        "Asia/Makassar",
        "Asia/Manila",
        "Asia/Muscat",
        "Asia/Nicosia",
        "Asia/Novokuznetsk",
        "Asia/Novosibirsk",
        "Asia/Omsk",
        "Asia/Oral",
        "Asia/Phnom_Penh",
        "Asia/Pontianak",
        "Asia/Pyongyang",
        "Asia/Qatar",
        "Asia/Qostanay",
        "Asia/Qyzylorda",
        "Asia/Riyadh",
        "Asia/Sakhalin",
        "Asia/Samarkand",
        "Asia/Seoul",
        "Asia/Shanghai",
        "Asia/Singapore",
        "Asia/Srednekolymsk",
        "Asia/Taipei",
        "Asia/Tashkent",
        "Asia/Tbilisi",
        "Asia/Tehran",
        "Asia/Thimphu",
        "Asia/Tokyo",
        "Asia/Tomsk",
        "Asia/Ulaanbaatar",
        "Asia/Urumqi",
        "Asia/Ust-Nera",
        "Asia/Vientiane",
        "Asia/Vladivostok",
        "Asia/Yakutsk",
        "Asia/Yangon",
        "Asia/Yekaterinburg",
        "Asia/Yerevan",
        "Atlantic/Azores",
        "Atlantic/Bermuda",
        "Atlantic/Canary",
        "Atlantic/Cape_Verde",
        "Atlantic/Faroe",
        "Atlantic/Madeira",
        "Atlantic/Reykjavik",
        "Atlantic/South_Georgia",
        "Atlantic/St_Helena",
        "Atlantic/Stanley",
        "Australia/Adelaide",
        "Australia/Brisbane",
        "Australia/Broken_Hill",
        "Australia/Darwin",
        "Australia/Eucla",
        "Australia/Hobart",
        "Australia/Lindeman",
        "Australia/Lord_Howe",
        "Australia/Melbourne",
        "Australia/Perth",
        "Australia/Sydney",
        "Canada/Atlantic",
        "Canada/Central",
        "Canada/Eastern",
        "Canada/Mountain",
        "Canada/Newfoundland",
        "Canada/Pacific",
        "Europe/Amsterdam",
        "Europe/Andorra",
        "Europe/Astrakhan",
        "Europe/Athens",
        "Europe/Belgrade",
        "Europe/Berlin",
        "Europe/Bratislava",
        "Europe/Brussels",
        "Europe/Bucharest",
        "Europe/Budapest",
        "Europe/Busingen",
        "Europe/Chisinau",
        "Europe/Copenhagen",
        "Europe/Dublin",
        "Europe/Gibraltar",
        "Europe/Guernsey",
        "Europe/Helsinki",
        "Europe/Isle_of_Man",
        "Europe/Istanbul",
        "Europe/Jersey",
        "Europe/Kaliningrad",
        "Europe/Kirov",
        "Europe/Kyiv",
        "Europe/Lisbon",
        "Europe/Ljubljana",
        "Europe/London",
        "Europe/Luxembourg",
        "Europe/Madrid",
        "Europe/Malta",
        "Europe/Mariehamn",
        "Europe/Minsk",
        "Europe/Monaco",
        "Europe/Moscow",
        "Europe/Oslo",
        "Europe/Paris",
        "Europe/Podgorica",
        "Europe/Prague",
        "Europe/Riga",
        "Europe/Rome",
        "Europe/Samara",
        "Europe/San_Marino",
        "Europe/Sarajevo",
        "Europe/Saratov",
        "Europe/Simferopol",
        "Europe/Skopje",
        "Europe/Sofia",
        "Europe/Stockholm",
        "Europe/Tallinn",
        "Europe/Tirane",
        "Europe/Ulyanovsk",
        "Europe/Vaduz",
        "Europe/Vatican",
        "Europe/Vienna",
        "Europe/Vilnius",
        "Europe/Volgograd",
        "Europe/Warsaw",
        "Europe/Zagreb",
        "Europe/Zurich",
        "GMT",
        "Indian/Antananarivo",
        "Indian/Chagos",
        "Indian/Christmas",
        "Indian/Cocos",
        "Indian/Comoro",
        "Indian/Kerguelen",
        "Indian/Mahe",
        "Indian/Maldives",
        "Indian/Mauritius",
        "Indian/Mayotte",
        "Indian/Reunion",
        "Pacific/Apia",
        "Pacific/Auckland",
        "Pacific/Bougainville",
        "Pacific/Chatham",
        "Pacific/Chuuk",
        "Pacific/Easter",
        "Pacific/Efate",
        "Pacific/Fakaofo",
        "Pacific/Fiji",
        "Pacific/Funafuti",
        "Pacific/Galapagos",
        "Pacific/Gambier",
        "Pacific/Guadalcanal",
        "Pacific/Guam",
        "Pacific/Honolulu",
        "Pacific/Kanton",
        "Pacific/Kiritimati",
        "Pacific/Kosrae",
        "Pacific/Kwajalein",
        "Pacific/Majuro",
        "Pacific/Marquesas",
        "Pacific/Midway",
        "Pacific/Nauru",
        "Pacific/Niue",
        "Pacific/Norfolk",
        "Pacific/Noumea",
        "Pacific/Pago_Pago",
        "Pacific/Palau",
        "Pacific/Pitcairn",
        "Pacific/Pohnpei",
        "Pacific/Port_Moresby",
        "Pacific/Rarotonga",
        "Pacific/Saipan",
        "Pacific/Tahiti",
        "Pacific/Tarawa",
        "Pacific/Tongatapu",
        "Pacific/Wake",
        "Pacific/Wallis",
        "US/Alaska",
        "US/Arizona",
        "US/Central",
        "US/Eastern",
        "US/Hawaii",
        "US/Mountain",
        "US/Pacific",
        "UTC",
        null
      ],
      "nullable": true
    },
    "industries": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "real_estate",
          "mortgage",
          "software",
          "solar",
          "insurance",
          "travel",
          "automotive",
          "support",
          "home_services",
          "financial_services",
          "recruiting",
          "other"
        ]
      },
      "nullable": true
    },
    "leadTypes": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "buyer",
          "seller",
          "renter",
          "rent_to_own",
          "new_home_loan",
          "home_refinance",
          "auto_insurance",
          "crop_insurance",
          "home_insurance",
          "life_insurance",
          "long_term_disability_insurance",
          "mortgage_insurance",
          "pet_insurance",
          "recruiting_insurance",
          "renters_insurance",
          "travel_insurance",
          "umbrella_insurance",
          "bathroom",
          "deck",
          "door",
          "flooring",
          "gutter_guard",
          "gutters",
          "patio",
          "roofing",
          "screened_porch_sunroom",
          "siding",
          "solar",
          "windows",
          "wealth_management",
          "used_vehicle",
          "new_vehicle",
          "inbound_recruit",
          "outbound_recruit"
        ]
      },
      "nullable": true
    },
    "appointmentScheduling": {
      "$ref": "#/components/schemas/PatchUserAppointmentScheduling"
    }
  }
}
```

### `User`

```json
{
  "type": "object",
  "properties": {
    "id": {
      "readOnly": true,
      "type": "string",
      "format": "ObjectId"
    },
    "name": {
      "type": "string",
      "readOnly": true
    },
    "email": {
      "type": "string",
      "format": "email",
      "readOnly": true
    },
    "phone": {
      "type": "string",
      "readOnly": true
    },
    "isFauxUser": {
      "type": "boolean",
      "readOnly": true
    },
    "archivedAt": {
      "type": "string",
      "format": "date-time",
      "readOnly": true,
      "nullable": true
    },
    "teamId": {
      "readOnly": true,
      "type": "string",
      "format": "ObjectId",
      "nullable": true
    },
    "accountId": {
      "readOnly": true,
      "type": "string",
      "format": "ObjectId",
      "nullable": true
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "readOnly": true
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time",
      "readOnly": true
    }
  }
}
```

### `UserAppointmentScheduling`

```json
{
  "type": "object",
  "properties": {
    "provider": {
      "type": "string",
      "enum": [
        "google",
        "faux"
      ],
      "readOnly": true,
      "description": "Scheduling provider. Active Google scheduling wins over FAUX scheduling."
    },
    "configurable": {
      "type": "boolean",
      "readOnly": true,
      "description": "False for Google, which exposes no configurable metadata; true for FAUX."
    },
    "isActive": {
      "type": "boolean",
      "readOnly": true,
      "description": "Present only when provider is faux."
    },
    "appointmentDuration": {
      "type": "integer",
      "readOnly": true,
      "minimum": 10,
      "maximum": 180,
      "description": "Present only when provider is faux."
    },
    "weeklyAvailability": {
      "readOnly": true,
      "description": "Present only when provider is faux.",
      "allOf": [
        {
          "$ref": "#/components/schemas/UserAppointmentSchedulingWeeklyAvailability"
        }
      ]
    }
  },
  "required": [
    "configurable",
    "provider"
  ]
}
```

### `UserAppointmentSchedulingTransition`

```json
{
  "type": "object",
  "properties": {
    "startTime": {
      "type": "string",
      "enum": [
        "12a",
        "1a",
        "2a",
        "3a",
        "4a",
        "5a",
        "6a",
        "7a",
        "8a",
        "9a",
        "10a",
        "11a",
        "12p",
        "1p",
        "2p",
        "3p",
        "4p",
        "5p",
        "6p",
        "7p",
        "8p",
        "9p",
        "10p",
        "11p"
      ],
      "description": "Exact lower-case hourly transition start.",
      "example": "9a"
    },
    "mode": {
      "type": "string",
      "enum": [
        "Available",
        "NotAvailable"
      ],
      "description": "Availability mode beginning at startTime.",
      "example": "Available"
    }
  },
  "required": [
    "mode",
    "startTime"
  ]
}
```

### `UserAppointmentSchedulingWeeklyAvailability`

```json
{
  "type": "object",
  "properties": {
    "monday": {
      "type": "array",
      "readOnly": true,
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "tuesday": {
      "type": "array",
      "readOnly": true,
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "wednesday": {
      "type": "array",
      "readOnly": true,
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "thursday": {
      "type": "array",
      "readOnly": true,
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "friday": {
      "type": "array",
      "readOnly": true,
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "saturday": {
      "type": "array",
      "readOnly": true,
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    },
    "sunday": {
      "type": "array",
      "readOnly": true,
      "minItems": 1,
      "items": {
        "$ref": "#/components/schemas/UserAppointmentSchedulingTransition"
      }
    }
  },
  "required": [
    "friday",
    "monday",
    "saturday",
    "sunday",
    "thursday",
    "tuesday",
    "wednesday"
  ]
}
```

### `UserDetail`

```json
{
  "type": "object",
  "properties": {
    "id": {
      "readOnly": true,
      "type": "string",
      "format": "ObjectId"
    },
    "name": {
      "type": "string",
      "readOnly": true
    },
    "phone": {
      "type": "string",
      "readOnly": true,
      "nullable": true
    },
    "isFauxUser": {
      "type": "boolean",
      "readOnly": true
    },
    "teamId": {
      "readOnly": true,
      "type": "string",
      "format": "ObjectId",
      "nullable": true
    },
    "accountId": {
      "readOnly": true,
      "type": "string",
      "format": "ObjectId"
    },
    "settings": {
      "readOnly": true,
      "allOf": [
        {
          "$ref": "#/components/schemas/UserSettings"
        }
      ]
    }
  },
  "required": [
    "accountId",
    "id",
    "isFauxUser",
    "name",
    "phone",
    "settings",
    "teamId"
  ]
}
```

### `UserList`

```json
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/User"
      }
    },
    "total": {
      "type": "integer"
    },
    "limit": {
      "type": "integer"
    },
    "offset": {
      "type": "integer"
    }
  }
}
```

### `UserSettings`

```json
{
  "type": "object",
  "properties": {
    "defaultChatbotName": {
      "type": "string",
      "readOnly": true
    },
    "chatbotHoursOfOperation": {
      "readOnly": true,
      "allOf": [
        {
          "$ref": "#/components/schemas/AccountHoursOfOperation"
        }
      ]
    },
    "callingHoursOfOperation": {
      "readOnly": true,
      "allOf": [
        {
          "$ref": "#/components/schemas/AccountHoursOfOperation"
        }
      ]
    },
    "timeZone": {
      "type": "string",
      "readOnly": true
    },
    "industries": {
      "type": "array",
      "readOnly": true,
      "items": {
        "type": "string"
      }
    },
    "leadTypes": {
      "type": "array",
      "readOnly": true,
      "items": {
        "type": "string"
      }
    },
    "appointmentScheduling": {
      "readOnly": true,
      "description": "Google responses contain only provider and configurable; FAUX responses contain the configurable surface.",
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "provider",
            "configurable"
          ],
          "properties": {
            "provider": {
              "type": "string",
              "enum": [
                "google"
              ]
            },
            "configurable": {
              "type": "boolean",
              "enum": [
                false
              ]
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "provider",
            "configurable",
            "isActive",
            "appointmentDuration",
            "weeklyAvailability"
          ],
          "properties": {
            "provider": {
              "type": "string",
              "enum": [
                "faux"
              ]
            },
            "configurable": {
              "type": "boolean",
              "enum": [
                true
              ]
            },
            "isActive": {
              "type": "boolean"
            },
            "appointmentDuration": {
              "type": "integer",
              "minimum": 10,
              "maximum": 180,
              "description": "Whole-minute duration honored exactly by FAUX scheduling."
            },
            "weeklyAvailability": {
              "$ref": "#/components/schemas/UserAppointmentSchedulingWeeklyAvailability"
            }
          }
        }
      ],
      "allOf": [
        {
          "$ref": "#/components/schemas/UserAppointmentScheduling"
        }
      ]
    }
  },
  "required": [
    "appointmentScheduling",
    "callingHoursOfOperation",
    "chatbotHoursOfOperation",
    "defaultChatbotName",
    "industries",
    "leadTypes",
    "timeZone"
  ]
}
```

## Security

### `bearer-access-token`

```json
{
  "type": "http",
  "scheme": "bearer",
  "bearerFormat": "JWT"
}
```
