Evo Voice

<back to all web services

ListEndpoints

Lists all endpoints

Requires Authentication
Requires any of the roles:SystemAdministrator, Manager, Customer
The following routes are available for this service:
GET/endpoints
<?php namespace dtos;

use DateTime;
use Exception;
use DateInterval;
use JsonSerializable;
use ServiceStack\{IReturn,IReturnVoid,IGet,IPost,IPut,IDelete,IPatch,IMeta,IHasSessionId,IHasBearerToken,IHasVersion};
use ServiceStack\{ICrud,ICreateDb,IUpdateDb,IPatchDb,IDeleteDb,ISaveDb,AuditBase,QueryDb,QueryDb2,QueryData,QueryData2,QueryResponse};
use ServiceStack\{ResponseStatus,ResponseError,EmptyResponse,IdResponse,ArrayList,KeyValuePair2,StringResponse,StringsResponse,Tuple2,Tuple3,ByteArray};
use ServiceStack\{JsonConverters,Returns,TypeContext};


enum SortOrders : string
{
    case Ascend = 'Ascend';
    case Descend = 'Descend';
}

/**
 * @template T
 */
class ListRequest implements IGet, JsonSerializable
{
    public array $genericArgs = [];
    public static function create(array $genericArgs=[]): ListRequest {
        $to = new ListRequest();
        $to->genericArgs = $genericArgs;
        return $to;
    }

    public function __construct(
        /** @description The page of data to retrieve */
        // @ApiMember(Description="The page of data to retrieve")
        /** @var int */
        public mixed $page=0,

        /** @description If you want all objects to be returned. This should be used with care */
        // @ApiMember(Description="If you want all objects to be returned. This should be used with care")
        /** @var bool|null */
        public mixed $all=null,

        /** @description The number per page to retrieve */
        // @ApiMember(Description="The number per page to retrieve")
        /** @var int */
        public mixed $countPerPage=0,

        /** @description Specific IDs */
        // @ApiMember(Description="Specific IDs")
        /** @var array<string>|null */
        public mixed $specificIds=null,

        /** @description Specify a sort field */
        // @ApiMember(Description="Specify a sort field")
        /** @var string|null */
        public mixed $sortField=null,

        /** @description Specify a sort order */
        // @ApiMember(Description="Specify a sort order")
        /** @var SortOrders|null */
        public mixed $sortOrder=null,

        /** @description Disables total / page counts - improves performance. Returns only data. If there is no more data, Items will be empty array */
        // @ApiMember(Description="Disables total / page counts - improves performance. Returns only data. If there is no more data, Items will be empty array")
        /** @var bool|null */
        public mixed $simplifiedPaging=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['page'])) $this->page = $o['page'];
        if (isset($o['all'])) $this->all = $o['all'];
        if (isset($o['countPerPage'])) $this->countPerPage = $o['countPerPage'];
        if (isset($o['specificIds'])) $this->specificIds = JsonConverters::fromArray('string', $o['specificIds']);
        if (isset($o['sortField'])) $this->sortField = $o['sortField'];
        if (isset($o['sortOrder'])) $this->sortOrder = JsonConverters::from('SortOrders', $o['sortOrder']);
        if (isset($o['simplifiedPaging'])) $this->simplifiedPaging = $o['simplifiedPaging'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->page)) $o['page'] = $this->page;
        if (isset($this->all)) $o['all'] = $this->all;
        if (isset($this->countPerPage)) $o['countPerPage'] = $this->countPerPage;
        if (isset($this->specificIds)) $o['specificIds'] = JsonConverters::toArray('string', $this->specificIds);
        if (isset($this->sortField)) $o['sortField'] = $this->sortField;
        if (isset($this->sortOrder)) $o['sortOrder'] = JsonConverters::to('SortOrders', $this->sortOrder);
        if (isset($this->simplifiedPaging)) $o['simplifiedPaging'] = $this->simplifiedPaging;
        return empty($o) ? new class(){} : $o;
    }
}

class EntityInfo implements JsonSerializable
{
    public function __construct(
        /** @description The ID of the object */
        // @ApiMember(Description="The ID of the object")
        /** @var string|null */
        public ?string $id=null,

        /** @description The date the object was created */
        // @ApiMember(Description="The date the object was created")
        /** @var string|null */
        public ?string $dateCreated=null,

        /** @description The date the object was last modified */
        // @ApiMember(Description="The date the object was last modified")
        /** @var string|null */
        public ?string $dateLastModified=null,

        /** @description The user that created this object */
        // @ApiMember(Description="The user that created this object")
        /** @var string|null */
        public ?string $createdBy=null,

        /** @description The user that last modified this object */
        // @ApiMember(Description="The user that last modified this object")
        /** @var string|null */
        public ?string $lastModifiedBy=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['dateCreated'])) $this->dateCreated = $o['dateCreated'];
        if (isset($o['dateLastModified'])) $this->dateLastModified = $o['dateLastModified'];
        if (isset($o['createdBy'])) $this->createdBy = $o['createdBy'];
        if (isset($o['lastModifiedBy'])) $this->lastModifiedBy = $o['lastModifiedBy'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->dateCreated)) $o['dateCreated'] = $this->dateCreated;
        if (isset($this->dateLastModified)) $o['dateLastModified'] = $this->dateLastModified;
        if (isset($this->createdBy)) $o['createdBy'] = $this->createdBy;
        if (isset($this->lastModifiedBy)) $o['lastModifiedBy'] = $this->lastModifiedBy;
        return empty($o) ? new class(){} : $o;
    }
}

class CustomerBreadcrumb implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var string|null */
        public ?string $name=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['name'])) $this->name = $o['name'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->name)) $o['name'] = $this->name;
        return empty($o) ? new class(){} : $o;
    }
}

enum EndpointTypes : string
{
    case PhoneNumber = 'PhoneNumber';
    case User = 'User';
    case FaxNumber = 'FaxNumber';
    case EmailAddress = 'EmailAddress';
    case Unused_1 = 'Unused_1';
    case Unused_2 = 'Unused_2';
    case Unused_3 = 'Unused_3';
    case Unused_4 = 'Unused_4';
    case Unused_5 = 'Unused_5';
    case Team = 'Team';
    case Assistant = 'Assistant';
}

class Value implements JsonSerializable
{
    public function __construct(
        /** @var bool|null */
        public ?bool $boolValue=null,
        /** @var string|null */
        public ?string $stringValue=null,
        /** @var float|null */
        public ?float $numberValue=null,
        /** @var array<Struct>|null */
        public ?array $listValue=null,
        /** @var Struct|null */
        public ?Struct $structValue=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['boolValue'])) $this->boolValue = $o['boolValue'];
        if (isset($o['stringValue'])) $this->stringValue = $o['stringValue'];
        if (isset($o['numberValue'])) $this->numberValue = $o['numberValue'];
        if (isset($o['listValue'])) $this->listValue = JsonConverters::fromArray('Struct', $o['listValue']);
        if (isset($o['structValue'])) $this->structValue = JsonConverters::from('Struct', $o['structValue']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->boolValue)) $o['boolValue'] = $this->boolValue;
        if (isset($this->stringValue)) $o['stringValue'] = $this->stringValue;
        if (isset($this->numberValue)) $o['numberValue'] = $this->numberValue;
        if (isset($this->listValue)) $o['listValue'] = JsonConverters::toArray('Struct', $this->listValue);
        if (isset($this->structValue)) $o['structValue'] = JsonConverters::to('Struct', $this->structValue);
        return empty($o) ? new class(){} : $o;
    }
}

/**
 * @template array of String
 * @template array1 of Value
 */
class Struct extends array implements JsonSerializable
{
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        return empty($o) ? new class(){} : $o;
    }
}

enum EndpointFlowSchedules : string
{
    case Always = 'Always';
    case Scheduled = 'Scheduled';
    case Simple = 'Simple';
}

enum SimpleSchedulingRuleTypes : string
{
    case Always = 'Always';
    case CustomerState = 'CustomerState';
    case Time = 'Time';
}

class ScheduleDay implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $offset=0,
        /** @var DayOfWeek|null */
        public ?DayOfWeek $dayOfWeek=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['offset'])) $this->offset = $o['offset'];
        if (isset($o['dayOfWeek'])) $this->dayOfWeek = JsonConverters::from('DayOfWeek', $o['dayOfWeek']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->offset)) $o['offset'] = $this->offset;
        if (isset($this->dayOfWeek)) $o['dayOfWeek'] = JsonConverters::to('DayOfWeek', $this->dayOfWeek);
        return empty($o) ? new class(){} : $o;
    }
}

enum SchedulingRuleFrequency : string
{
    case None = 'None';
    case Secondly = 'Secondly';
    case Minutely = 'Minutely';
    case Hourly = 'Hourly';
    case Daily = 'Daily';
    case Weekly = 'Weekly';
    case Monthly = 'Monthly';
    case Yearly = 'Yearly';
}

class SchedulingRule implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var string|null */
        public ?string $name=null,
        /** @var int */
        public int $priority=0,
        /** @var string|null */
        public ?string $state=null,
        /** @var string|null */
        public ?string $source=null,
        /** @var string|null */
        public ?string $condition=null,
        /** @var SimpleSchedulingRuleTypes|null */
        public ?SimpleSchedulingRuleTypes $simpleRuleType=null,
        /** @var string|null */
        public ?string $customerState=null,
        /** @var string|null */
        public ?string $flowId=null,
        /** @var Struct|null */
        public ?Struct $flowParams=null,
        /** @var bool|null */
        public ?bool $isAllDay=null,
        /** @var string|null */
        public ?string $startDate=null,
        /** @var string|null */
        public ?string $startTime=null,
        /** @var string|null */
        public ?string $endTime=null,
        /** @var array<int>|null */
        public ?array $bySetPosition=null,
        /** @var array<int>|null */
        public ?array $byMonth=null,
        /** @var array<int>|null */
        public ?array $byWeekNo=null,
        /** @var array<int>|null */
        public ?array $byYearDay=null,
        /** @var array<int>|null */
        public ?array $byMonthDay=null,
        /** @var array<ScheduleDay>|null */
        public ?array $byDay=null,
        /** @var array<int>|null */
        public ?array $byHour=null,
        /** @var array<int>|null */
        public ?array $byMinute=null,
        /** @var int */
        public int $interval=0,
        /** @var int */
        public int $count=0,
        /** @var string|null */
        public ?string $untilDate=null,
        /** @var SchedulingRuleFrequency|null */
        public ?SchedulingRuleFrequency $frequency=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['priority'])) $this->priority = $o['priority'];
        if (isset($o['state'])) $this->state = $o['state'];
        if (isset($o['source'])) $this->source = $o['source'];
        if (isset($o['condition'])) $this->condition = $o['condition'];
        if (isset($o['simpleRuleType'])) $this->simpleRuleType = JsonConverters::from('SimpleSchedulingRuleTypes', $o['simpleRuleType']);
        if (isset($o['customerState'])) $this->customerState = $o['customerState'];
        if (isset($o['flowId'])) $this->flowId = $o['flowId'];
        if (isset($o['flowParams'])) $this->flowParams = JsonConverters::from('Struct', $o['flowParams']);
        if (isset($o['isAllDay'])) $this->isAllDay = $o['isAllDay'];
        if (isset($o['startDate'])) $this->startDate = $o['startDate'];
        if (isset($o['startTime'])) $this->startTime = $o['startTime'];
        if (isset($o['endTime'])) $this->endTime = $o['endTime'];
        if (isset($o['bySetPosition'])) $this->bySetPosition = JsonConverters::fromArray('int', $o['bySetPosition']);
        if (isset($o['byMonth'])) $this->byMonth = JsonConverters::fromArray('int', $o['byMonth']);
        if (isset($o['byWeekNo'])) $this->byWeekNo = JsonConverters::fromArray('int', $o['byWeekNo']);
        if (isset($o['byYearDay'])) $this->byYearDay = JsonConverters::fromArray('int', $o['byYearDay']);
        if (isset($o['byMonthDay'])) $this->byMonthDay = JsonConverters::fromArray('int', $o['byMonthDay']);
        if (isset($o['byDay'])) $this->byDay = JsonConverters::fromArray('ScheduleDay', $o['byDay']);
        if (isset($o['byHour'])) $this->byHour = JsonConverters::fromArray('int', $o['byHour']);
        if (isset($o['byMinute'])) $this->byMinute = JsonConverters::fromArray('int', $o['byMinute']);
        if (isset($o['interval'])) $this->interval = $o['interval'];
        if (isset($o['count'])) $this->count = $o['count'];
        if (isset($o['untilDate'])) $this->untilDate = $o['untilDate'];
        if (isset($o['frequency'])) $this->frequency = JsonConverters::from('SchedulingRuleFrequency', $o['frequency']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->priority)) $o['priority'] = $this->priority;
        if (isset($this->state)) $o['state'] = $this->state;
        if (isset($this->source)) $o['source'] = $this->source;
        if (isset($this->condition)) $o['condition'] = $this->condition;
        if (isset($this->simpleRuleType)) $o['simpleRuleType'] = JsonConverters::to('SimpleSchedulingRuleTypes', $this->simpleRuleType);
        if (isset($this->customerState)) $o['customerState'] = $this->customerState;
        if (isset($this->flowId)) $o['flowId'] = $this->flowId;
        if (isset($this->flowParams)) $o['flowParams'] = JsonConverters::to('Struct', $this->flowParams);
        if (isset($this->isAllDay)) $o['isAllDay'] = $this->isAllDay;
        if (isset($this->startDate)) $o['startDate'] = $this->startDate;
        if (isset($this->startTime)) $o['startTime'] = $this->startTime;
        if (isset($this->endTime)) $o['endTime'] = $this->endTime;
        if (isset($this->bySetPosition)) $o['bySetPosition'] = JsonConverters::toArray('int', $this->bySetPosition);
        if (isset($this->byMonth)) $o['byMonth'] = JsonConverters::toArray('int', $this->byMonth);
        if (isset($this->byWeekNo)) $o['byWeekNo'] = JsonConverters::toArray('int', $this->byWeekNo);
        if (isset($this->byYearDay)) $o['byYearDay'] = JsonConverters::toArray('int', $this->byYearDay);
        if (isset($this->byMonthDay)) $o['byMonthDay'] = JsonConverters::toArray('int', $this->byMonthDay);
        if (isset($this->byDay)) $o['byDay'] = JsonConverters::toArray('ScheduleDay', $this->byDay);
        if (isset($this->byHour)) $o['byHour'] = JsonConverters::toArray('int', $this->byHour);
        if (isset($this->byMinute)) $o['byMinute'] = JsonConverters::toArray('int', $this->byMinute);
        if (isset($this->interval)) $o['interval'] = $this->interval;
        if (isset($this->count)) $o['count'] = $this->count;
        if (isset($this->untilDate)) $o['untilDate'] = $this->untilDate;
        if (isset($this->frequency)) $o['frequency'] = JsonConverters::to('SchedulingRuleFrequency', $this->frequency);
        return empty($o) ? new class(){} : $o;
    }
}

class Schedule implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $timeZoneId=null,
        /** @var bool|null */
        public ?bool $inherit=null,
        /** @var bool|null */
        public ?bool $forceClosed=null,
        /** @var array<SchedulingRule>|null */
        public ?array $rules=null,
        /** @var string|null */
        public ?string $defaultState=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['timeZoneId'])) $this->timeZoneId = $o['timeZoneId'];
        if (isset($o['inherit'])) $this->inherit = $o['inherit'];
        if (isset($o['forceClosed'])) $this->forceClosed = $o['forceClosed'];
        if (isset($o['rules'])) $this->rules = JsonConverters::fromArray('SchedulingRule', $o['rules']);
        if (isset($o['defaultState'])) $this->defaultState = $o['defaultState'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->timeZoneId)) $o['timeZoneId'] = $this->timeZoneId;
        if (isset($this->inherit)) $o['inherit'] = $this->inherit;
        if (isset($this->forceClosed)) $o['forceClosed'] = $this->forceClosed;
        if (isset($this->rules)) $o['rules'] = JsonConverters::toArray('SchedulingRule', $this->rules);
        if (isset($this->defaultState)) $o['defaultState'] = $this->defaultState;
        return empty($o) ? new class(){} : $o;
    }
}

class ScheduledFlow implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $stateName=null,
        /** @var string|null */
        public ?string $flowId=null,
        /** @var Struct|null */
        public ?Struct $flowParams=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['stateName'])) $this->stateName = $o['stateName'];
        if (isset($o['flowId'])) $this->flowId = $o['flowId'];
        if (isset($o['flowParams'])) $this->flowParams = JsonConverters::from('Struct', $o['flowParams']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->stateName)) $o['stateName'] = $this->stateName;
        if (isset($this->flowId)) $o['flowId'] = $this->flowId;
        if (isset($this->flowParams)) $o['flowParams'] = JsonConverters::to('Struct', $this->flowParams);
        return empty($o) ? new class(){} : $o;
    }
}

enum TwilioSipRegions : string
{
    case NorthAmericaVirginia = 'NorthAmericaVirginia';
    case NorthAmericaOregon = 'NorthAmericaOregon';
    case EuropeIreland = 'EuropeIreland';
    case EuropeFrankfurt = 'EuropeFrankfurt';
    case AsiaPacificSingapore = 'AsiaPacificSingapore';
    case AsiaPacificTokyo = 'AsiaPacificTokyo';
    case AsiaPacificSydney = 'AsiaPacificSydney';
    case SouthAmericaSanPaolo = 'SouthAmericaSanPaolo';
}

enum AgentStates : string
{
    case Unknown = 'Unknown';
    case Ready = 'Ready';
    case NotReady = 'NotReady';
    case LoggedOut = 'LoggedOut';
    case WrapUp = 'WrapUp';
    case Outgoing = 'Outgoing';
    case Other = 'Other';
}

enum AgentStateReasons : string
{
    case Unknown = 'Unknown';
    case SetByUser = 'SetByUser';
    case MissedCall = 'MissedCall';
    case SetBySystem = 'SetBySystem';
}

enum UserModes : string
{
    case SoftPhone = 'SoftPhone';
    case Sip = 'Sip';
    case Flow = 'Flow';
    case DataOnly = 'DataOnly';
    case ThirdParty = 'ThirdParty';
}

enum UserManagerRoles : string
{
    case None = 'None';
    case Manager = 'Manager';
    case VoicemailAndCallHistory = 'VoicemailAndCallHistory';
    case Custom = 'Custom';
}

enum DashboardPermissions : string
{
    case ViewFiles = 'ViewFiles';
    case ViewNotifications = 'ViewNotifications';
    case ViewSessions = 'ViewSessions';
    case ViewEndpoints = 'ViewEndpoints';
    case ViewReports = 'ViewReports';
    case ViewCustomers = 'ViewCustomers';
    case ViewFlows = 'ViewFlows';
}

enum UserDataFieldModes : string
{
    case Hidden = 'Hidden';
    case ReadOnly = 'ReadOnly';
    case ReadWrite = 'ReadWrite';
}

enum TagColors : string
{
    case Magenta = 'Magenta';
    case Red = 'Red';
    case Volcano = 'Volcano';
    case Orange = 'Orange';
    case Gold = 'Gold';
    case Lime = 'Lime';
    case Green = 'Green';
    case Cyan = 'Cyan';
    case Blue = 'Blue';
    case GeekBlue = 'GeekBlue';
    case Purple = 'Purple';
}

class Tag implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var string|null */
        public ?string $name=null,
        /** @var TagColors|null */
        public ?TagColors $color=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['color'])) $this->color = JsonConverters::from('TagColors', $o['color']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->color)) $o['color'] = JsonConverters::to('TagColors', $this->color);
        return empty($o) ? new class(){} : $o;
    }
}

enum ActionUrlHttpMethods : string
{
    case GET = 'GET';
    case POST = 'POST';
}

class EndpointActionUrl implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var string|null */
        public ?string $url=null,
        /** @var ActionUrlHttpMethods|null */
        public ?ActionUrlHttpMethods $method=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['url'])) $this->url = $o['url'];
        if (isset($o['method'])) $this->method = JsonConverters::from('ActionUrlHttpMethods', $o['method']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->url)) $o['url'] = $this->url;
        if (isset($this->method)) $o['method'] = JsonConverters::to('ActionUrlHttpMethods', $this->method);
        return empty($o) ? new class(){} : $o;
    }
}

enum CustomerVisibility : string
{
    case None = 'None';
    case CurrentCustomer = 'CurrentCustomer';
    case CurrentAndChildCustomers = 'CurrentAndChildCustomers';
}

class EndpointContact implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var string|null */
        public ?string $displayName=null,
        /** @var string|null */
        public ?string $address=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['displayName'])) $this->displayName = $o['displayName'];
        if (isset($o['address'])) $this->address = $o['address'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->displayName)) $o['displayName'] = $this->displayName;
        if (isset($this->address)) $o['address'] = $this->address;
        return empty($o) ? new class(){} : $o;
    }
}

class IntegrationData implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $thirdPartyId=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['thirdPartyId'])) $this->thirdPartyId = $o['thirdPartyId'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->thirdPartyId)) $o['thirdPartyId'] = $this->thirdPartyId;
        return empty($o) ? new class(){} : $o;
    }
}

/**
 * @template array of String
 * @template array1 of IntegrationData
 */
class EntityIntegrationData extends array implements JsonSerializable
{
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        return empty($o) ? new class(){} : $o;
    }
}

enum ThirdPartyPhoneSystemTypes : string
{
    case Demo = 'Demo';
    case Sip = 'Sip';
}

enum TransportTypes : string
{
    case UDP = 'UDP';
    case TLS = 'TLS';
    case TCP = 'TCP';
    case PERS = 'PERS';
}

enum AudioCodecTypes : int
{
    case PCMU = 0;
    case GSM = 3;
    case PCMA = 8;
    case G722 = 9;
    case G729 = 18;
    case ILBC = 97;
    case AMR = 98;
    case AMRWB = 99;
    case SPEEX = 100;
    case DTMF = 101;
    case SPEEXWB = 102;
    case ISACWB = 103;
    case ISACSWB = 104;
    case OPUS = 105;
    case G7221 = 121;
    case NONE = -1;
}

enum DtmfMethods : string
{
    case RFC2833 = 'RFC2833';
    case INFO = 'INFO';
}

class ThirdPartySipAccountSettings implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $number=null,
        /** @var string|null */
        public ?string $agent=null,
        /** @var string|null */
        public ?string $authName=null,
        /** @var string|null */
        public ?string $userName=null,
        /** @var string|null */
        public ?string $displayName=null,
        /** @var string|null */
        public ?string $password=null,
        /** @var string|null */
        public ?string $userDomain=null,
        /** @var int */
        public int $registrationExpires=0,
        /** @var TransportTypes|null */
        public ?TransportTypes $transportType=null,
        /** @var string|null */
        public ?string $localIP=null,
        /** @var int */
        public int $localPort=0,
        /** @var string|null */
        public ?string $sipServer=null,
        /** @var int */
        public int $sipServerPort=0,
        /** @var string|null */
        public ?string $outboundServer=null,
        /** @var int */
        public int $outboundServerPort=0,
        /** @var string|null */
        public ?string $stunServer=null,
        /** @var int */
        public int $stunPort=0,
        /** @var string|null */
        public ?string $audioPlaybackDeviceName=null,
        /** @var string|null */
        public ?string $audioRecordingDeviceName=null,
        /** @var array<AudioCodecTypes>|null */
        public ?array $audioCodecs=null,
        /** @var DtmfMethods|null */
        public ?DtmfMethods $dtmfMethod=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['number'])) $this->number = $o['number'];
        if (isset($o['agent'])) $this->agent = $o['agent'];
        if (isset($o['authName'])) $this->authName = $o['authName'];
        if (isset($o['userName'])) $this->userName = $o['userName'];
        if (isset($o['displayName'])) $this->displayName = $o['displayName'];
        if (isset($o['password'])) $this->password = $o['password'];
        if (isset($o['userDomain'])) $this->userDomain = $o['userDomain'];
        if (isset($o['registrationExpires'])) $this->registrationExpires = $o['registrationExpires'];
        if (isset($o['transportType'])) $this->transportType = JsonConverters::from('TransportTypes', $o['transportType']);
        if (isset($o['localIP'])) $this->localIP = $o['localIP'];
        if (isset($o['localPort'])) $this->localPort = $o['localPort'];
        if (isset($o['sipServer'])) $this->sipServer = $o['sipServer'];
        if (isset($o['sipServerPort'])) $this->sipServerPort = $o['sipServerPort'];
        if (isset($o['outboundServer'])) $this->outboundServer = $o['outboundServer'];
        if (isset($o['outboundServerPort'])) $this->outboundServerPort = $o['outboundServerPort'];
        if (isset($o['stunServer'])) $this->stunServer = $o['stunServer'];
        if (isset($o['stunPort'])) $this->stunPort = $o['stunPort'];
        if (isset($o['audioPlaybackDeviceName'])) $this->audioPlaybackDeviceName = $o['audioPlaybackDeviceName'];
        if (isset($o['audioRecordingDeviceName'])) $this->audioRecordingDeviceName = $o['audioRecordingDeviceName'];
        if (isset($o['audioCodecs'])) $this->audioCodecs = JsonConverters::fromArray('AudioCodecTypes', $o['audioCodecs']);
        if (isset($o['dtmfMethod'])) $this->dtmfMethod = JsonConverters::from('DtmfMethods', $o['dtmfMethod']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->number)) $o['number'] = $this->number;
        if (isset($this->agent)) $o['agent'] = $this->agent;
        if (isset($this->authName)) $o['authName'] = $this->authName;
        if (isset($this->userName)) $o['userName'] = $this->userName;
        if (isset($this->displayName)) $o['displayName'] = $this->displayName;
        if (isset($this->password)) $o['password'] = $this->password;
        if (isset($this->userDomain)) $o['userDomain'] = $this->userDomain;
        if (isset($this->registrationExpires)) $o['registrationExpires'] = $this->registrationExpires;
        if (isset($this->transportType)) $o['transportType'] = JsonConverters::to('TransportTypes', $this->transportType);
        if (isset($this->localIP)) $o['localIP'] = $this->localIP;
        if (isset($this->localPort)) $o['localPort'] = $this->localPort;
        if (isset($this->sipServer)) $o['sipServer'] = $this->sipServer;
        if (isset($this->sipServerPort)) $o['sipServerPort'] = $this->sipServerPort;
        if (isset($this->outboundServer)) $o['outboundServer'] = $this->outboundServer;
        if (isset($this->outboundServerPort)) $o['outboundServerPort'] = $this->outboundServerPort;
        if (isset($this->stunServer)) $o['stunServer'] = $this->stunServer;
        if (isset($this->stunPort)) $o['stunPort'] = $this->stunPort;
        if (isset($this->audioPlaybackDeviceName)) $o['audioPlaybackDeviceName'] = $this->audioPlaybackDeviceName;
        if (isset($this->audioRecordingDeviceName)) $o['audioRecordingDeviceName'] = $this->audioRecordingDeviceName;
        if (isset($this->audioCodecs)) $o['audioCodecs'] = JsonConverters::toArray('AudioCodecTypes', $this->audioCodecs);
        if (isset($this->dtmfMethod)) $o['dtmfMethod'] = JsonConverters::to('DtmfMethods', $this->dtmfMethod);
        return empty($o) ? new class(){} : $o;
    }
}

class ThirdPartySipSettings implements JsonSerializable
{
    public function __construct(
        /** @var array<ThirdPartySipAccountSettings>|null */
        public ?array $accounts=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['accounts'])) $this->accounts = JsonConverters::fromArray('ThirdPartySipAccountSettings', $o['accounts']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->accounts)) $o['accounts'] = JsonConverters::toArray('ThirdPartySipAccountSettings', $this->accounts);
        return empty($o) ? new class(){} : $o;
    }
}

class ThirdPartyDemoSettings implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $extension=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['extension'])) $this->extension = $o['extension'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->extension)) $o['extension'] = $this->extension;
        return empty($o) ? new class(){} : $o;
    }
}

class ThirdPartyPhoneSystemSettings implements JsonSerializable
{
    public function __construct(
        /** @var ThirdPartyPhoneSystemTypes|null */
        public ?ThirdPartyPhoneSystemTypes $type=null,
        /** @var ThirdPartySipSettings|null */
        public ?ThirdPartySipSettings $sipSettings=null,
        /** @var ThirdPartyDemoSettings|null */
        public ?ThirdPartyDemoSettings $demoSettings=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['type'])) $this->type = JsonConverters::from('ThirdPartyPhoneSystemTypes', $o['type']);
        if (isset($o['sipSettings'])) $this->sipSettings = JsonConverters::from('ThirdPartySipSettings', $o['sipSettings']);
        if (isset($o['demoSettings'])) $this->demoSettings = JsonConverters::from('ThirdPartyDemoSettings', $o['demoSettings']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->type)) $o['type'] = JsonConverters::to('ThirdPartyPhoneSystemTypes', $this->type);
        if (isset($this->sipSettings)) $o['sipSettings'] = JsonConverters::to('ThirdPartySipSettings', $this->sipSettings);
        if (isset($this->demoSettings)) $o['demoSettings'] = JsonConverters::to('ThirdPartyDemoSettings', $this->demoSettings);
        return empty($o) ? new class(){} : $o;
    }
}

class AppSettings implements JsonSerializable
{
    public function __construct(
        /** @var bool|null */
        public ?bool $enablePhoneNumberManagement=null,
        /** @var bool|null */
        public ?bool $enableDeviceManagement=null,
        /** @var bool|null */
        public ?bool $enableDialer=null,
        /** @var bool|null */
        public ?bool $enableCallHistory=null,
        /** @var bool|null */
        public ?bool $enableAssistants=null,
        /** @var bool|null */
        public ?bool $showFileNameInMessageCenter=null,
        /** @var string|null */
        public ?string $chakraTheme=null,
        /** @var string|null */
        public ?string $customCss=null,
        /** @var string|null */
        public ?string $pageTitle=null,
        /** @var string|null */
        public ?string $stringMappings=null,
        /** @var string|null */
        public ?string $logoutUrl=null,
        /** @var string|null */
        public ?string $portMyNumberUrl=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['enablePhoneNumberManagement'])) $this->enablePhoneNumberManagement = $o['enablePhoneNumberManagement'];
        if (isset($o['enableDeviceManagement'])) $this->enableDeviceManagement = $o['enableDeviceManagement'];
        if (isset($o['enableDialer'])) $this->enableDialer = $o['enableDialer'];
        if (isset($o['enableCallHistory'])) $this->enableCallHistory = $o['enableCallHistory'];
        if (isset($o['enableAssistants'])) $this->enableAssistants = $o['enableAssistants'];
        if (isset($o['showFileNameInMessageCenter'])) $this->showFileNameInMessageCenter = $o['showFileNameInMessageCenter'];
        if (isset($o['chakraTheme'])) $this->chakraTheme = $o['chakraTheme'];
        if (isset($o['customCss'])) $this->customCss = $o['customCss'];
        if (isset($o['pageTitle'])) $this->pageTitle = $o['pageTitle'];
        if (isset($o['stringMappings'])) $this->stringMappings = $o['stringMappings'];
        if (isset($o['logoutUrl'])) $this->logoutUrl = $o['logoutUrl'];
        if (isset($o['portMyNumberUrl'])) $this->portMyNumberUrl = $o['portMyNumberUrl'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->enablePhoneNumberManagement)) $o['enablePhoneNumberManagement'] = $this->enablePhoneNumberManagement;
        if (isset($this->enableDeviceManagement)) $o['enableDeviceManagement'] = $this->enableDeviceManagement;
        if (isset($this->enableDialer)) $o['enableDialer'] = $this->enableDialer;
        if (isset($this->enableCallHistory)) $o['enableCallHistory'] = $this->enableCallHistory;
        if (isset($this->enableAssistants)) $o['enableAssistants'] = $this->enableAssistants;
        if (isset($this->showFileNameInMessageCenter)) $o['showFileNameInMessageCenter'] = $this->showFileNameInMessageCenter;
        if (isset($this->chakraTheme)) $o['chakraTheme'] = $this->chakraTheme;
        if (isset($this->customCss)) $o['customCss'] = $this->customCss;
        if (isset($this->pageTitle)) $o['pageTitle'] = $this->pageTitle;
        if (isset($this->stringMappings)) $o['stringMappings'] = $this->stringMappings;
        if (isset($this->logoutUrl)) $o['logoutUrl'] = $this->logoutUrl;
        if (isset($this->portMyNumberUrl)) $o['portMyNumberUrl'] = $this->portMyNumberUrl;
        return empty($o) ? new class(){} : $o;
    }
}

enum AssistantTunings : string
{
    case Accuracy = 'Accuracy';
    case Speed = 'Speed';
}

class AssistantWord implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $word=null,
        /** @var string|null */
        public ?string $pronounced=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['word'])) $this->word = $o['word'];
        if (isset($o['pronounced'])) $this->pronounced = $o['pronounced'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->word)) $o['word'] = $this->word;
        if (isset($this->pronounced)) $o['pronounced'] = $this->pronounced;
        return empty($o) ? new class(){} : $o;
    }
}

class AssistantLink implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $url=null,
        /** @var string|null */
        public ?string $description=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['url'])) $this->url = $o['url'];
        if (isset($o['description'])) $this->description = $o['description'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->url)) $o['url'] = $this->url;
        if (isset($this->description)) $o['description'] = $this->description;
        return empty($o) ? new class(){} : $o;
    }
}

enum AssistantTransferTypes : string
{
    case Blind = 'Blind';
    case Supervised = 'Supervised';
    case MessagesOnly = 'MessagesOnly';
}

class AssistantTakeMessageField implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $name=null,
        /** @var string|null */
        public ?string $description=null,
        /** @var bool|null */
        public ?bool $required=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['description'])) $this->description = $o['description'];
        if (isset($o['required'])) $this->required = $o['required'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->description)) $o['description'] = $this->description;
        if (isset($this->required)) $o['required'] = $this->required;
        return empty($o) ? new class(){} : $o;
    }
}

class AssistantContact implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $name=null,
        /** @var string|null */
        public ?string $phoneNumber=null,
        /** @var AssistantTransferTypes|null */
        public ?AssistantTransferTypes $transferType=null,
        /** @var string|null */
        public ?string $about=null,
        /** @var string|null */
        public ?string $emailAddress=null,
        /** @var array<AssistantTakeMessageField>|null */
        public ?array $takeMessageFields=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['phoneNumber'])) $this->phoneNumber = $o['phoneNumber'];
        if (isset($o['transferType'])) $this->transferType = JsonConverters::from('AssistantTransferTypes', $o['transferType']);
        if (isset($o['about'])) $this->about = $o['about'];
        if (isset($o['emailAddress'])) $this->emailAddress = $o['emailAddress'];
        if (isset($o['takeMessageFields'])) $this->takeMessageFields = JsonConverters::fromArray('AssistantTakeMessageField', $o['takeMessageFields']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->phoneNumber)) $o['phoneNumber'] = $this->phoneNumber;
        if (isset($this->transferType)) $o['transferType'] = JsonConverters::to('AssistantTransferTypes', $this->transferType);
        if (isset($this->about)) $o['about'] = $this->about;
        if (isset($this->emailAddress)) $o['emailAddress'] = $this->emailAddress;
        if (isset($this->takeMessageFields)) $o['takeMessageFields'] = JsonConverters::toArray('AssistantTakeMessageField', $this->takeMessageFields);
        return empty($o) ? new class(){} : $o;
    }
}

class AssistantIntegration implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $uri=null,
        /** @var string|null */
        public ?string $httpMethod=null,
        /** @var string|null */
        public ?string $authToken=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['uri'])) $this->uri = $o['uri'];
        if (isset($o['httpMethod'])) $this->httpMethod = $o['httpMethod'];
        if (isset($o['authToken'])) $this->authToken = $o['authToken'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->uri)) $o['uri'] = $this->uri;
        if (isset($this->httpMethod)) $o['httpMethod'] = $this->httpMethod;
        if (isset($this->authToken)) $o['authToken'] = $this->authToken;
        return empty($o) ? new class(){} : $o;
    }
}

class AssistantSettings implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $companyName=null,
        /** @var string|null */
        public ?string $greeting=null,
        /** @var string|null */
        public ?string $companyInformation=null,
        /** @var string|null */
        public ?string $customPrompt=null,
        /** @var string|null */
        public ?string $voice=null,
        /** @var string|null */
        public ?string $voiceStyle=null,
        /** @var AssistantTunings|null */
        public ?AssistantTunings $tuning=null,
        /** @var array<AssistantWord>|null */
        public ?array $words=null,
        /** @var array<AssistantLink>|null */
        public ?array $links=null,
        /** @var array<AssistantContact>|null */
        public ?array $contacts=null,
        /** @var array<AssistantIntegration>|null */
        public ?array $integrations=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['companyName'])) $this->companyName = $o['companyName'];
        if (isset($o['greeting'])) $this->greeting = $o['greeting'];
        if (isset($o['companyInformation'])) $this->companyInformation = $o['companyInformation'];
        if (isset($o['customPrompt'])) $this->customPrompt = $o['customPrompt'];
        if (isset($o['voice'])) $this->voice = $o['voice'];
        if (isset($o['voiceStyle'])) $this->voiceStyle = $o['voiceStyle'];
        if (isset($o['tuning'])) $this->tuning = JsonConverters::from('AssistantTunings', $o['tuning']);
        if (isset($o['words'])) $this->words = JsonConverters::fromArray('AssistantWord', $o['words']);
        if (isset($o['links'])) $this->links = JsonConverters::fromArray('AssistantLink', $o['links']);
        if (isset($o['contacts'])) $this->contacts = JsonConverters::fromArray('AssistantContact', $o['contacts']);
        if (isset($o['integrations'])) $this->integrations = JsonConverters::fromArray('AssistantIntegration', $o['integrations']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->companyName)) $o['companyName'] = $this->companyName;
        if (isset($this->greeting)) $o['greeting'] = $this->greeting;
        if (isset($this->companyInformation)) $o['companyInformation'] = $this->companyInformation;
        if (isset($this->customPrompt)) $o['customPrompt'] = $this->customPrompt;
        if (isset($this->voice)) $o['voice'] = $this->voice;
        if (isset($this->voiceStyle)) $o['voiceStyle'] = $this->voiceStyle;
        if (isset($this->tuning)) $o['tuning'] = JsonConverters::to('AssistantTunings', $this->tuning);
        if (isset($this->words)) $o['words'] = JsonConverters::toArray('AssistantWord', $this->words);
        if (isset($this->links)) $o['links'] = JsonConverters::toArray('AssistantLink', $this->links);
        if (isset($this->contacts)) $o['contacts'] = JsonConverters::toArray('AssistantContact', $this->contacts);
        if (isset($this->integrations)) $o['integrations'] = JsonConverters::toArray('AssistantIntegration', $this->integrations);
        return empty($o) ? new class(){} : $o;
    }
}

class EmbedSettings implements JsonSerializable
{
    public function __construct(
        /** @var bool|null */
        public ?bool $enabled=null,
        /** @var string|null */
        public ?string $allowedHosts=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['enabled'])) $this->enabled = $o['enabled'];
        if (isset($o['allowedHosts'])) $this->allowedHosts = $o['allowedHosts'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->enabled)) $o['enabled'] = $this->enabled;
        if (isset($this->allowedHosts)) $o['allowedHosts'] = $this->allowedHosts;
        return empty($o) ? new class(){} : $o;
    }
}

class EndpointInfo extends EntityInfo implements JsonSerializable
{
    /**
     * @param string|null $id
     * @param string|null $dateCreated
     * @param string|null $dateLastModified
     * @param string|null $createdBy
     * @param string|null $lastModifiedBy
     */
    public function __construct(
        ?string $id=null,
        ?string $dateCreated=null,
        ?string $dateLastModified=null,
        ?string $createdBy=null,
        ?string $lastModifiedBy=null,
        /** @description The account ID this endpoint is associated with */
        // @ApiMember(Description="The account ID this endpoint is associated with")
        /** @var string|null */
        public ?string $accountId=null,

        /** @description The name of the account this endpoint is associated with */
        // @ApiMember(Description="The name of the account this endpoint is associated with")
        /** @var string|null */
        public ?string $accountName=null,

        /** @description The ID of the customer this endpoint is associated with */
        // @ApiMember(Description="The ID of the customer this endpoint is associated with")
        /** @var string|null */
        public ?string $customerId=null,

        /** @description The name of the customer this endpoint is associated with */
        // @ApiMember(Description="The name of the customer this endpoint is associated with")
        /** @var string|null */
        public ?string $customerName=null,

        /** @description The third party reference ID for the endpoint */
        // @ApiMember(Description="The third party reference ID for the endpoint")
        /** @var string|null */
        public ?string $referenceId=null,

        /** @description The breadcrumb to the customer for this endpoint */
        // @ApiMember(Description="The breadcrumb to the customer for this endpoint")
        /** @var array<CustomerBreadcrumb>|null */
        public ?array $customerBreadcrumb=null,

        /** @description The display name of the endpoint */
        // @ApiMember(Description="The display name of the endpoint")
        /** @var string|null */
        public ?string $displayName=null,

        /** @description The type of endpoint */
        // @ApiMember(Description="The type of endpoint")
        /** @var EndpointTypes|null */
        public ?EndpointTypes $type=null,

        /** @description Extra info for this endpoint (typically to show in grid) */
        // @ApiMember(Description="Extra info for this endpoint (typically to show in grid)")
        /** @var string|null */
        public ?string $extraInformation=null,

        /** @description The ID of the flow to use for voice */
        // @ApiMember(Description="The ID of the flow to use for voice")
        /** @var string|null */
        public ?string $flowId=null,

        /** @description The name of the flow to use for voice */
        // @ApiMember(Description="The name of the flow to use for voice")
        /** @var string|null */
        public ?string $flowName=null,

        /** @description The params for the voice flow */
        // @ApiMember(Description="The params for the voice flow")
        /** @var Struct|null */
        public ?Struct $flowParams=null,

        /** @description Whether to use a single flow always or use scheduled flow system */
        // @ApiMember(Description="Whether to use a single flow always or use scheduled flow system")
        /** @var EndpointFlowSchedules|null */
        public ?EndpointFlowSchedules $flowSchedule=null,

        /** @description This endpoint's schedule */
        // @ApiMember(Description="This endpoint's schedule")
        /** @var Schedule|null */
        public ?Schedule $schedule=null,

        /** @description The list of scheduled flows when using scheduling */
        // @ApiMember(Description="The list of scheduled flows when using scheduling")
        /** @var array<ScheduledFlow>|null */
        public ?array $scheduledFlows=null,

        /** @description Disable SMS */
        // @ApiMember(Description="Disable SMS")
        /** @var bool|null */
        public ?bool $disableSms=null,

        /** @description Set this to true to prevent Evo Voice from overriding the 10DLC / SMS settings for this number */
        // @ApiMember(Description="Set this to true to prevent Evo Voice from overriding the 10DLC / SMS settings for this number")
        /** @var bool|null */
        public ?bool $useExternal10DlcCampaign=null,

        /** @description Is this a virtual phone number? */
        // @ApiMember(Description="Is this a virtual phone number?")
        /** @var bool|null */
        public ?bool $isVirtualPhoneNumber=null,

        /** @description Is caller ID verified for this virtual number? */
        // @ApiMember(Description="Is caller ID verified for this virtual number?")
        /** @var bool|null */
        public ?bool $isCallerIdVerified=null,

        /** @description The verification code for this number */
        // @ApiMember(Description="The verification code for this number")
        /** @var string|null */
        public ?string $callerIdVerificationCode=null,

        /** @description The phone number */
        // @ApiMember(Description="The phone number")
        /** @var string|null */
        public ?string $phoneNumber=null,

        /** @description The Sid of the phone number */
        // @ApiMember(Description="The Sid of the phone number")
        /** @var string|null */
        public ?string $phoneNumberSid=null,

        /** @description The caller ID Name (CNAM) for the phone number */
        // @ApiMember(Description="The caller ID Name (CNAM) for the phone number")
        /** @var string|null */
        public ?string $callerIdName=null,

        /** @description The address SID associated with the phone number */
        // @ApiMember(Description="The address SID associated with the phone number")
        /** @var string|null */
        public ?string $addressSid=null,

        /** @description Do not touch this phone number - for BYOA accounts */
        // @ApiMember(Description="Do not touch this phone number - for BYOA accounts")
        /** @var bool|null */
        public ?bool $doNotTouchPhoneNumber=null,

        /** @description Is this number enrolled in a 10DLC messaging service campaign */
        // @ApiMember(Description="Is this number enrolled in a 10DLC messaging service campaign")
        /** @var bool|null */
        public ?bool $isEnrolledIn10DlcService=null,

        /** @description Whether we look up caller ID or not */
        // @ApiMember(Description="Whether we look up caller ID or not")
        /** @var bool|null */
        public ?bool $enableCallerIdLookup=null,

        /** @description The email address of the user */
        // @ApiMember(Description="The email address of the user")
        /** @var string|null */
        public ?string $userEmailAddress=null,

        /** @description The Twilio Region for the SIP endpoint */
        // @ApiMember(Description="The Twilio Region for the SIP endpoint")
        /** @var TwilioSipRegions|null */
        public ?TwilioSipRegions $sipRegion=null,

        /** @description The Twilio Sid of the credentials for Sip */
        // @ApiMember(Description="The Twilio Sid of the credentials for Sip")
        /** @var string|null */
        public ?string $sipCredentialSid=null,

        /** @description The Twilio SIP user name */
        // @ApiMember(Description="The Twilio SIP user name")
        /** @var string|null */
        public ?string $sipUserName=null,

        /** @description The Twilio SIP password */
        // @ApiMember(Description="The Twilio SIP password")
        /** @var string|null */
        public ?string $sipPassword=null,

        /** @description The SIP domain */
        // @ApiMember(Description="The SIP domain")
        /** @var string|null */
        public ?string $sipDomain=null,

        /** @description Is emergency calling enabled on this number? */
        // @ApiMember(Description="Is emergency calling enabled on this number?")
        /** @var bool|null */
        public ?bool $enableEmergencyCalling=null,

        /** @description The SID of the emergency address for this number */
        // @ApiMember(Description="The SID of the emergency address for this number")
        /** @var string|null */
        public ?string $emergencyAddressSid=null,

        /** @description The ID of the phone number to use for emergency dialing */
        // @ApiMember(Description="The ID of the phone number to use for emergency dialing")
        /** @var string|null */
        public ?string $emergencyPhoneNumberId=null,

        /** @description The current agent state of this user endpoint */
        // @ApiMember(Description="The current agent state of this user endpoint")
        /** @var AgentStates|null */
        public ?AgentStates $agentState=null,

        /** @description The current agent state reason of this user endpoint */
        // @ApiMember(Description="The current agent state reason of this user endpoint")
        /** @var AgentStateReasons|null */
        public ?AgentStateReasons $agentStateReason=null,

        /** @description The mode for this user */
        // @ApiMember(Description="The mode for this user")
        /** @var UserModes|null */
        public ?UserModes $userMode=null,

        /** @description The ID of the file to use for voicemail greeting */
        // @ApiMember(Description="The ID of the file to use for voicemail greeting")
        /** @var string|null */
        public ?string $voicemailGreetingId=null,

        /** @description The endpoint's data */
        // @ApiMember(Description="The endpoint's data")
        /** @var Struct|null */
        public ?Struct $data=null,

        /** @description The email address for email endpoints */
        // @ApiMember(Description="The email address for email endpoints")
        /** @var string|null */
        public ?string $emailAddress=null,

        /** @description The first name of the user (for user endpoints) */
        // @ApiMember(Description="The first name of the user (for user endpoints)")
        /** @var string|null */
        public ?string $userFirstName=null,

        /** @description The last name of the user (for user endpoints) */
        // @ApiMember(Description="The last name of the user (for user endpoints)")
        /** @var string|null */
        public ?string $userLastName=null,

        /** @description The URL of an image for this user's avatar */
        // @ApiMember(Description="The URL of an image for this user's avatar")
        /** @var string|null */
        public ?string $avatarUrl=null,

        /** @description Does this user have manager role? */
        // @ApiMember(Description="Does this user have manager role?")
        /** @var UserManagerRoles|null */
        public ?UserManagerRoles $managerRole=null,

        /** @description The list of dashboard permissions for when the manager role is custom */
        // @ApiMember(Description="The list of dashboard permissions for when the manager role is custom")
        /** @var array<DashboardPermissions>|null */
        public ?array $dashboardPermissions=null,

        /** @description The type of visibility this user has to their own fields */
        // @ApiMember(Description="The type of visibility this user has to their own fields")
        /** @var UserDataFieldModes|null */
        public ?UserDataFieldModes $myFieldPermissions=null,

        /** @description The type of visibility this user has to customer fields */
        // @ApiMember(Description="The type of visibility this user has to customer fields")
        /** @var UserDataFieldModes|null */
        public ?UserDataFieldModes $customerFieldPermissions=null,

        /** @description The type of visibility this user has to other user fields */
        // @ApiMember(Description="The type of visibility this user has to other user fields")
        /** @var UserDataFieldModes|null */
        public ?UserDataFieldModes $otherUserFieldPermissions=null,

        /** @description The type of visibility this user has to other endpoint fields */
        // @ApiMember(Description="The type of visibility this user has to other endpoint fields")
        /** @var UserDataFieldModes|null */
        public ?UserDataFieldModes $otherEndpointFieldPermissions=null,

        /** @description The name of this endpoint (for bots etc.) */
        // @ApiMember(Description="The name of this endpoint (for bots etc.)")
        /** @var string|null */
        public ?string $name=null,

        /** @description The list of tags for this endpoint */
        // @ApiMember(Description="The list of tags for this endpoint")
        /** @var array<Tag>|null */
        public ?array $tags=null,

        /** @description The list of action URLs */
        // @ApiMember(Description="The list of action URLs")
        /** @var array<EndpointActionUrl>|null */
        public ?array $actionUrls=null,

        /** @description The list of members in this team */
        // @ApiMember(Description="The list of members in this team")
        /** @var array<string>|null */
        public ?array $teamMemberIds=null,

        /** @description Visibility of this user/team in contact lists */
        // @ApiMember(Description="Visibility of this user/team in contact lists")
        /** @var CustomerVisibility|null */
        public ?CustomerVisibility $contactListVisibility=null,

        /** @description The list of contacts personal to this user */
        // @ApiMember(Description="The list of contacts personal to this user")
        /** @var array<EndpointContact>|null */
        public ?array $contacts=null,

        /** @description The documo ID for this number */
        // @ApiMember(Description="The documo ID for this number")
        /** @var string|null */
        public ?string $documoId=null,

        /** @description Integration data for this endpoint */
        // @ApiMember(Description="Integration data for this endpoint")
        /** @var EntityIntegrationData|null */
        public ?EntityIntegrationData $integrationData=null,

        /** @description Settings for third party phone system */
        // @ApiMember(Description="Settings for third party phone system")
        /** @var ThirdPartyPhoneSystemSettings|null */
        public ?ThirdPartyPhoneSystemSettings $thirdPartyPhoneSystemSettings=null,

        /** @description Should this user override the parent customer's app settings */
        // @ApiMember(Description="Should this user override the parent customer's app settings")
        /** @var bool|null */
        public ?bool $overrideAppSettings=null,

        /** @description App / Portal settings for this user */
        // @ApiMember(Description="App / Portal settings for this user")
        /** @var AppSettings|null */
        public ?AppSettings $appSettings=null,

        /** @description Configuration for the AI assistant */
        // @ApiMember(Description="Configuration for the AI assistant")
        /** @var AssistantSettings|null */
        public ?AssistantSettings $assistantSettings=null,

        /** @description Configuration for the embed */
        // @ApiMember(Description="Configuration for the embed")
        /** @var EmbedSettings|null */
        public ?EmbedSettings $embedSettings=null
    ) {
        parent::__construct($id,$dateCreated,$dateLastModified,$createdBy,$lastModifiedBy);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['accountId'])) $this->accountId = $o['accountId'];
        if (isset($o['accountName'])) $this->accountName = $o['accountName'];
        if (isset($o['customerId'])) $this->customerId = $o['customerId'];
        if (isset($o['customerName'])) $this->customerName = $o['customerName'];
        if (isset($o['referenceId'])) $this->referenceId = $o['referenceId'];
        if (isset($o['customerBreadcrumb'])) $this->customerBreadcrumb = JsonConverters::fromArray('CustomerBreadcrumb', $o['customerBreadcrumb']);
        if (isset($o['displayName'])) $this->displayName = $o['displayName'];
        if (isset($o['type'])) $this->type = JsonConverters::from('EndpointTypes', $o['type']);
        if (isset($o['extraInformation'])) $this->extraInformation = $o['extraInformation'];
        if (isset($o['flowId'])) $this->flowId = $o['flowId'];
        if (isset($o['flowName'])) $this->flowName = $o['flowName'];
        if (isset($o['flowParams'])) $this->flowParams = JsonConverters::from('Struct', $o['flowParams']);
        if (isset($o['flowSchedule'])) $this->flowSchedule = JsonConverters::from('EndpointFlowSchedules', $o['flowSchedule']);
        if (isset($o['schedule'])) $this->schedule = JsonConverters::from('Schedule', $o['schedule']);
        if (isset($o['scheduledFlows'])) $this->scheduledFlows = JsonConverters::fromArray('ScheduledFlow', $o['scheduledFlows']);
        if (isset($o['disableSms'])) $this->disableSms = $o['disableSms'];
        if (isset($o['useExternal10DlcCampaign'])) $this->useExternal10DlcCampaign = $o['useExternal10DlcCampaign'];
        if (isset($o['isVirtualPhoneNumber'])) $this->isVirtualPhoneNumber = $o['isVirtualPhoneNumber'];
        if (isset($o['isCallerIdVerified'])) $this->isCallerIdVerified = $o['isCallerIdVerified'];
        if (isset($o['callerIdVerificationCode'])) $this->callerIdVerificationCode = $o['callerIdVerificationCode'];
        if (isset($o['phoneNumber'])) $this->phoneNumber = $o['phoneNumber'];
        if (isset($o['phoneNumberSid'])) $this->phoneNumberSid = $o['phoneNumberSid'];
        if (isset($o['callerIdName'])) $this->callerIdName = $o['callerIdName'];
        if (isset($o['addressSid'])) $this->addressSid = $o['addressSid'];
        if (isset($o['doNotTouchPhoneNumber'])) $this->doNotTouchPhoneNumber = $o['doNotTouchPhoneNumber'];
        if (isset($o['isEnrolledIn10DlcService'])) $this->isEnrolledIn10DlcService = $o['isEnrolledIn10DlcService'];
        if (isset($o['enableCallerIdLookup'])) $this->enableCallerIdLookup = $o['enableCallerIdLookup'];
        if (isset($o['userEmailAddress'])) $this->userEmailAddress = $o['userEmailAddress'];
        if (isset($o['sipRegion'])) $this->sipRegion = JsonConverters::from('TwilioSipRegions', $o['sipRegion']);
        if (isset($o['sipCredentialSid'])) $this->sipCredentialSid = $o['sipCredentialSid'];
        if (isset($o['sipUserName'])) $this->sipUserName = $o['sipUserName'];
        if (isset($o['sipPassword'])) $this->sipPassword = $o['sipPassword'];
        if (isset($o['sipDomain'])) $this->sipDomain = $o['sipDomain'];
        if (isset($o['enableEmergencyCalling'])) $this->enableEmergencyCalling = $o['enableEmergencyCalling'];
        if (isset($o['emergencyAddressSid'])) $this->emergencyAddressSid = $o['emergencyAddressSid'];
        if (isset($o['emergencyPhoneNumberId'])) $this->emergencyPhoneNumberId = $o['emergencyPhoneNumberId'];
        if (isset($o['agentState'])) $this->agentState = JsonConverters::from('AgentStates', $o['agentState']);
        if (isset($o['agentStateReason'])) $this->agentStateReason = JsonConverters::from('AgentStateReasons', $o['agentStateReason']);
        if (isset($o['userMode'])) $this->userMode = JsonConverters::from('UserModes', $o['userMode']);
        if (isset($o['voicemailGreetingId'])) $this->voicemailGreetingId = $o['voicemailGreetingId'];
        if (isset($o['data'])) $this->data = JsonConverters::from('Struct', $o['data']);
        if (isset($o['emailAddress'])) $this->emailAddress = $o['emailAddress'];
        if (isset($o['userFirstName'])) $this->userFirstName = $o['userFirstName'];
        if (isset($o['userLastName'])) $this->userLastName = $o['userLastName'];
        if (isset($o['avatarUrl'])) $this->avatarUrl = $o['avatarUrl'];
        if (isset($o['managerRole'])) $this->managerRole = JsonConverters::from('UserManagerRoles', $o['managerRole']);
        if (isset($o['dashboardPermissions'])) $this->dashboardPermissions = JsonConverters::fromArray('DashboardPermissions', $o['dashboardPermissions']);
        if (isset($o['myFieldPermissions'])) $this->myFieldPermissions = JsonConverters::from('UserDataFieldModes', $o['myFieldPermissions']);
        if (isset($o['customerFieldPermissions'])) $this->customerFieldPermissions = JsonConverters::from('UserDataFieldModes', $o['customerFieldPermissions']);
        if (isset($o['otherUserFieldPermissions'])) $this->otherUserFieldPermissions = JsonConverters::from('UserDataFieldModes', $o['otherUserFieldPermissions']);
        if (isset($o['otherEndpointFieldPermissions'])) $this->otherEndpointFieldPermissions = JsonConverters::from('UserDataFieldModes', $o['otherEndpointFieldPermissions']);
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['tags'])) $this->tags = JsonConverters::fromArray('Tag', $o['tags']);
        if (isset($o['actionUrls'])) $this->actionUrls = JsonConverters::fromArray('EndpointActionUrl', $o['actionUrls']);
        if (isset($o['teamMemberIds'])) $this->teamMemberIds = JsonConverters::fromArray('string', $o['teamMemberIds']);
        if (isset($o['contactListVisibility'])) $this->contactListVisibility = JsonConverters::from('CustomerVisibility', $o['contactListVisibility']);
        if (isset($o['contacts'])) $this->contacts = JsonConverters::fromArray('EndpointContact', $o['contacts']);
        if (isset($o['documoId'])) $this->documoId = $o['documoId'];
        if (isset($o['integrationData'])) $this->integrationData = JsonConverters::from('EntityIntegrationData', $o['integrationData']);
        if (isset($o['thirdPartyPhoneSystemSettings'])) $this->thirdPartyPhoneSystemSettings = JsonConverters::from('ThirdPartyPhoneSystemSettings', $o['thirdPartyPhoneSystemSettings']);
        if (isset($o['overrideAppSettings'])) $this->overrideAppSettings = $o['overrideAppSettings'];
        if (isset($o['appSettings'])) $this->appSettings = JsonConverters::from('AppSettings', $o['appSettings']);
        if (isset($o['assistantSettings'])) $this->assistantSettings = JsonConverters::from('AssistantSettings', $o['assistantSettings']);
        if (isset($o['embedSettings'])) $this->embedSettings = JsonConverters::from('EmbedSettings', $o['embedSettings']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->accountId)) $o['accountId'] = $this->accountId;
        if (isset($this->accountName)) $o['accountName'] = $this->accountName;
        if (isset($this->customerId)) $o['customerId'] = $this->customerId;
        if (isset($this->customerName)) $o['customerName'] = $this->customerName;
        if (isset($this->referenceId)) $o['referenceId'] = $this->referenceId;
        if (isset($this->customerBreadcrumb)) $o['customerBreadcrumb'] = JsonConverters::toArray('CustomerBreadcrumb', $this->customerBreadcrumb);
        if (isset($this->displayName)) $o['displayName'] = $this->displayName;
        if (isset($this->type)) $o['type'] = JsonConverters::to('EndpointTypes', $this->type);
        if (isset($this->extraInformation)) $o['extraInformation'] = $this->extraInformation;
        if (isset($this->flowId)) $o['flowId'] = $this->flowId;
        if (isset($this->flowName)) $o['flowName'] = $this->flowName;
        if (isset($this->flowParams)) $o['flowParams'] = JsonConverters::to('Struct', $this->flowParams);
        if (isset($this->flowSchedule)) $o['flowSchedule'] = JsonConverters::to('EndpointFlowSchedules', $this->flowSchedule);
        if (isset($this->schedule)) $o['schedule'] = JsonConverters::to('Schedule', $this->schedule);
        if (isset($this->scheduledFlows)) $o['scheduledFlows'] = JsonConverters::toArray('ScheduledFlow', $this->scheduledFlows);
        if (isset($this->disableSms)) $o['disableSms'] = $this->disableSms;
        if (isset($this->useExternal10DlcCampaign)) $o['useExternal10DlcCampaign'] = $this->useExternal10DlcCampaign;
        if (isset($this->isVirtualPhoneNumber)) $o['isVirtualPhoneNumber'] = $this->isVirtualPhoneNumber;
        if (isset($this->isCallerIdVerified)) $o['isCallerIdVerified'] = $this->isCallerIdVerified;
        if (isset($this->callerIdVerificationCode)) $o['callerIdVerificationCode'] = $this->callerIdVerificationCode;
        if (isset($this->phoneNumber)) $o['phoneNumber'] = $this->phoneNumber;
        if (isset($this->phoneNumberSid)) $o['phoneNumberSid'] = $this->phoneNumberSid;
        if (isset($this->callerIdName)) $o['callerIdName'] = $this->callerIdName;
        if (isset($this->addressSid)) $o['addressSid'] = $this->addressSid;
        if (isset($this->doNotTouchPhoneNumber)) $o['doNotTouchPhoneNumber'] = $this->doNotTouchPhoneNumber;
        if (isset($this->isEnrolledIn10DlcService)) $o['isEnrolledIn10DlcService'] = $this->isEnrolledIn10DlcService;
        if (isset($this->enableCallerIdLookup)) $o['enableCallerIdLookup'] = $this->enableCallerIdLookup;
        if (isset($this->userEmailAddress)) $o['userEmailAddress'] = $this->userEmailAddress;
        if (isset($this->sipRegion)) $o['sipRegion'] = JsonConverters::to('TwilioSipRegions', $this->sipRegion);
        if (isset($this->sipCredentialSid)) $o['sipCredentialSid'] = $this->sipCredentialSid;
        if (isset($this->sipUserName)) $o['sipUserName'] = $this->sipUserName;
        if (isset($this->sipPassword)) $o['sipPassword'] = $this->sipPassword;
        if (isset($this->sipDomain)) $o['sipDomain'] = $this->sipDomain;
        if (isset($this->enableEmergencyCalling)) $o['enableEmergencyCalling'] = $this->enableEmergencyCalling;
        if (isset($this->emergencyAddressSid)) $o['emergencyAddressSid'] = $this->emergencyAddressSid;
        if (isset($this->emergencyPhoneNumberId)) $o['emergencyPhoneNumberId'] = $this->emergencyPhoneNumberId;
        if (isset($this->agentState)) $o['agentState'] = JsonConverters::to('AgentStates', $this->agentState);
        if (isset($this->agentStateReason)) $o['agentStateReason'] = JsonConverters::to('AgentStateReasons', $this->agentStateReason);
        if (isset($this->userMode)) $o['userMode'] = JsonConverters::to('UserModes', $this->userMode);
        if (isset($this->voicemailGreetingId)) $o['voicemailGreetingId'] = $this->voicemailGreetingId;
        if (isset($this->data)) $o['data'] = JsonConverters::to('Struct', $this->data);
        if (isset($this->emailAddress)) $o['emailAddress'] = $this->emailAddress;
        if (isset($this->userFirstName)) $o['userFirstName'] = $this->userFirstName;
        if (isset($this->userLastName)) $o['userLastName'] = $this->userLastName;
        if (isset($this->avatarUrl)) $o['avatarUrl'] = $this->avatarUrl;
        if (isset($this->managerRole)) $o['managerRole'] = JsonConverters::to('UserManagerRoles', $this->managerRole);
        if (isset($this->dashboardPermissions)) $o['dashboardPermissions'] = JsonConverters::toArray('DashboardPermissions', $this->dashboardPermissions);
        if (isset($this->myFieldPermissions)) $o['myFieldPermissions'] = JsonConverters::to('UserDataFieldModes', $this->myFieldPermissions);
        if (isset($this->customerFieldPermissions)) $o['customerFieldPermissions'] = JsonConverters::to('UserDataFieldModes', $this->customerFieldPermissions);
        if (isset($this->otherUserFieldPermissions)) $o['otherUserFieldPermissions'] = JsonConverters::to('UserDataFieldModes', $this->otherUserFieldPermissions);
        if (isset($this->otherEndpointFieldPermissions)) $o['otherEndpointFieldPermissions'] = JsonConverters::to('UserDataFieldModes', $this->otherEndpointFieldPermissions);
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->tags)) $o['tags'] = JsonConverters::toArray('Tag', $this->tags);
        if (isset($this->actionUrls)) $o['actionUrls'] = JsonConverters::toArray('EndpointActionUrl', $this->actionUrls);
        if (isset($this->teamMemberIds)) $o['teamMemberIds'] = JsonConverters::toArray('string', $this->teamMemberIds);
        if (isset($this->contactListVisibility)) $o['contactListVisibility'] = JsonConverters::to('CustomerVisibility', $this->contactListVisibility);
        if (isset($this->contacts)) $o['contacts'] = JsonConverters::toArray('EndpointContact', $this->contacts);
        if (isset($this->documoId)) $o['documoId'] = $this->documoId;
        if (isset($this->integrationData)) $o['integrationData'] = JsonConverters::to('EntityIntegrationData', $this->integrationData);
        if (isset($this->thirdPartyPhoneSystemSettings)) $o['thirdPartyPhoneSystemSettings'] = JsonConverters::to('ThirdPartyPhoneSystemSettings', $this->thirdPartyPhoneSystemSettings);
        if (isset($this->overrideAppSettings)) $o['overrideAppSettings'] = $this->overrideAppSettings;
        if (isset($this->appSettings)) $o['appSettings'] = JsonConverters::to('AppSettings', $this->appSettings);
        if (isset($this->assistantSettings)) $o['assistantSettings'] = JsonConverters::to('AssistantSettings', $this->assistantSettings);
        if (isset($this->embedSettings)) $o['embedSettings'] = JsonConverters::to('EmbedSettings', $this->embedSettings);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Lists all endpoints */
// @Api(Description="Lists all endpoints")
/**
 * @template ListRequest of EndpointInfo
 */
class ListEndpoints extends ListRequest implements JsonSerializable
{
    /**
     * @param int $page
     * @param bool|null $all
     * @param int $countPerPage
     * @param array<string>|null $specificIds
     * @param string|null $sortField
     * @param SortOrders|null $sortOrder
     * @param bool|null $simplifiedPaging
     */
    public function __construct(
        int $page=0,
        ?bool $all=null,
        int $countPerPage=0,
        ?array $specificIds=null,
        ?string $sortField=null,
        ?SortOrders $sortOrder=null,
        ?bool $simplifiedPaging=null,
        /** @description The IDs of the account whose endpoints you want to retrieve */
        // @ApiMember(Description="The IDs of the account whose endpoints you want to retrieve")
        /** @var array<string>|null */
        public ?array $accountIds=null,

        /** @description The IDs of the customers whose endpoints you want to retrieve */
        // @ApiMember(Description="The IDs of the customers whose endpoints you want to retrieve")
        /** @var array<string>|null */
        public ?array $customerIds=null,

        /** @description The third party IDs of endpoints you want to retrieve */
        // @ApiMember(Description="The third party IDs of endpoints you want to retrieve")
        /** @var array<string>|null */
        public ?array $referenceIds=null,

        /** @description If you want a shall parent customer filter (e.g. no deep children) */
        // @ApiMember(Description="If you want a shall parent customer filter (e.g. no deep children)")
        /** @var bool|null */
        public ?bool $shallowParent=null,

        /** @description The IDs of the flows whose endpoints you want to retrieve */
        // @ApiMember(Description="The IDs of the flows whose endpoints you want to retrieve")
        /** @var array<string>|null */
        public ?array $flowIds=null,

        /** @description The state where the specified flow IDs should be */
        // @ApiMember(Description="The state where the specified flow IDs should be")
        /** @var string|null */
        public ?string $flowState=null,

        /** @description The list of tag IDs to filter by (must contain all) */
        // @ApiMember(Description="The list of tag IDs to filter by (must contain all)")
        /** @var array<string>|null */
        public ?array $tagIds=null,

        /** @description Filter by name */
        // @ApiMember(Description="Filter by name")
        /** @var string|null */
        public ?string $nameFilter=null,

        /** @description Filter by phone number */
        // @ApiMember(Description="Filter by phone number")
        /** @var string|null */
        public ?string $phoneNumberFilter=null,

        /** @description Filter by type */
        // @ApiMember(Description="Filter by type")
        /** @var EndpointTypes|null */
        public ?EndpointTypes $type=null,

        /** @description Filter by types */
        // @ApiMember(Description="Filter by types")
        /** @var array<EndpointTypes>|null */
        public ?array $types=null,

        /** @description Filter by user mode */
        // @ApiMember(Description="Filter by user mode")
        /** @var UserModes|null */
        public ?UserModes $userMode=null,

        /** @description Filters for any endpoint data fields. Format for each entry should be 'FieldName=Value'. We do not support numeric or boolean currently */
        // @ApiMember(Description="Filters for any endpoint data fields. Format for each entry should be 'FieldName=Value'. We do not support numeric or boolean currently")
        /** @var array<string>|null */
        public ?array $dataFilters=null,

        /** @description Filter by SIP user name */
        // @ApiMember(Description="Filter by SIP user name")
        /** @var string|null */
        public ?string $sipUserName=null,

        /** @description Filter by flow parameters (this must be a JSON struct) */
        // @ApiMember(Description="Filter by flow parameters (this must be a JSON struct)")
        /** @var string|null */
        public ?string $flowParametersFilter=null
    ) {
        parent::__construct($page,$all,$countPerPage,$specificIds,$sortField,$sortOrder,$simplifiedPaging);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['accountIds'])) $this->accountIds = JsonConverters::fromArray('string', $o['accountIds']);
        if (isset($o['customerIds'])) $this->customerIds = JsonConverters::fromArray('string', $o['customerIds']);
        if (isset($o['referenceIds'])) $this->referenceIds = JsonConverters::fromArray('string', $o['referenceIds']);
        if (isset($o['shallowParent'])) $this->shallowParent = $o['shallowParent'];
        if (isset($o['flowIds'])) $this->flowIds = JsonConverters::fromArray('string', $o['flowIds']);
        if (isset($o['flowState'])) $this->flowState = $o['flowState'];
        if (isset($o['tagIds'])) $this->tagIds = JsonConverters::fromArray('string', $o['tagIds']);
        if (isset($o['nameFilter'])) $this->nameFilter = $o['nameFilter'];
        if (isset($o['phoneNumberFilter'])) $this->phoneNumberFilter = $o['phoneNumberFilter'];
        if (isset($o['type'])) $this->type = JsonConverters::from('EndpointTypes', $o['type']);
        if (isset($o['types'])) $this->types = JsonConverters::fromArray('EndpointTypes', $o['types']);
        if (isset($o['userMode'])) $this->userMode = JsonConverters::from('UserModes', $o['userMode']);
        if (isset($o['dataFilters'])) $this->dataFilters = JsonConverters::fromArray('string', $o['dataFilters']);
        if (isset($o['sipUserName'])) $this->sipUserName = $o['sipUserName'];
        if (isset($o['flowParametersFilter'])) $this->flowParametersFilter = $o['flowParametersFilter'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->accountIds)) $o['accountIds'] = JsonConverters::toArray('string', $this->accountIds);
        if (isset($this->customerIds)) $o['customerIds'] = JsonConverters::toArray('string', $this->customerIds);
        if (isset($this->referenceIds)) $o['referenceIds'] = JsonConverters::toArray('string', $this->referenceIds);
        if (isset($this->shallowParent)) $o['shallowParent'] = $this->shallowParent;
        if (isset($this->flowIds)) $o['flowIds'] = JsonConverters::toArray('string', $this->flowIds);
        if (isset($this->flowState)) $o['flowState'] = $this->flowState;
        if (isset($this->tagIds)) $o['tagIds'] = JsonConverters::toArray('string', $this->tagIds);
        if (isset($this->nameFilter)) $o['nameFilter'] = $this->nameFilter;
        if (isset($this->phoneNumberFilter)) $o['phoneNumberFilter'] = $this->phoneNumberFilter;
        if (isset($this->type)) $o['type'] = JsonConverters::to('EndpointTypes', $this->type);
        if (isset($this->types)) $o['types'] = JsonConverters::toArray('EndpointTypes', $this->types);
        if (isset($this->userMode)) $o['userMode'] = JsonConverters::to('UserModes', $this->userMode);
        if (isset($this->dataFilters)) $o['dataFilters'] = JsonConverters::toArray('string', $this->dataFilters);
        if (isset($this->sipUserName)) $o['sipUserName'] = $this->sipUserName;
        if (isset($this->flowParametersFilter)) $o['flowParametersFilter'] = $this->flowParametersFilter;
        return empty($o) ? new class(){} : $o;
    }
}

class BillingItem implements JsonSerializable
{
    public function __construct(
        /** @var float */
        public float $baseCost=0.0,
        /** @var float */
        public float $rawUnitMultiplier=0.0,
        /** @var float */
        public float $unitCost=0.0,
        /** @var int */
        public int $allowance=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['baseCost'])) $this->baseCost = $o['baseCost'];
        if (isset($o['rawUnitMultiplier'])) $this->rawUnitMultiplier = $o['rawUnitMultiplier'];
        if (isset($o['unitCost'])) $this->unitCost = $o['unitCost'];
        if (isset($o['allowance'])) $this->allowance = $o['allowance'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->baseCost)) $o['baseCost'] = $this->baseCost;
        if (isset($this->rawUnitMultiplier)) $o['rawUnitMultiplier'] = $this->rawUnitMultiplier;
        if (isset($this->unitCost)) $o['unitCost'] = $this->unitCost;
        if (isset($this->allowance)) $o['allowance'] = $this->allowance;
        return empty($o) ? new class(){} : $o;
    }
}

class BillingSettings implements JsonSerializable
{
    public function __construct(
        /** @var BillingItem|null */
        public ?BillingItem $base=null,
        /** @var BillingItem|null */
        public ?BillingItem $localNumbers=null,
        /** @var BillingItem|null */
        public ?BillingItem $tollFreeNumbers=null,
        /** @var BillingItem|null */
        public ?BillingItem $inboundVoiceCalls=null,
        /** @var BillingItem|null */
        public ?BillingItem $outboundVoiceCalls=null,
        /** @var BillingItem|null */
        public ?BillingItem $inboundFaxes=null,
        /** @var BillingItem|null */
        public ?BillingItem $outboundFaxes=null,
        /** @var BillingItem|null */
        public ?BillingItem $inboundSmsMessages=null,
        /** @var BillingItem|null */
        public ?BillingItem $outboundSmsMessages=null,
        /** @var BillingItem|null */
        public ?BillingItem $aiInsights=null,
        /** @var BillingItem|null */
        public ?BillingItem $aiLiveMinutes=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['base'])) $this->base = JsonConverters::from('BillingItem', $o['base']);
        if (isset($o['localNumbers'])) $this->localNumbers = JsonConverters::from('BillingItem', $o['localNumbers']);
        if (isset($o['tollFreeNumbers'])) $this->tollFreeNumbers = JsonConverters::from('BillingItem', $o['tollFreeNumbers']);
        if (isset($o['inboundVoiceCalls'])) $this->inboundVoiceCalls = JsonConverters::from('BillingItem', $o['inboundVoiceCalls']);
        if (isset($o['outboundVoiceCalls'])) $this->outboundVoiceCalls = JsonConverters::from('BillingItem', $o['outboundVoiceCalls']);
        if (isset($o['inboundFaxes'])) $this->inboundFaxes = JsonConverters::from('BillingItem', $o['inboundFaxes']);
        if (isset($o['outboundFaxes'])) $this->outboundFaxes = JsonConverters::from('BillingItem', $o['outboundFaxes']);
        if (isset($o['inboundSmsMessages'])) $this->inboundSmsMessages = JsonConverters::from('BillingItem', $o['inboundSmsMessages']);
        if (isset($o['outboundSmsMessages'])) $this->outboundSmsMessages = JsonConverters::from('BillingItem', $o['outboundSmsMessages']);
        if (isset($o['aiInsights'])) $this->aiInsights = JsonConverters::from('BillingItem', $o['aiInsights']);
        if (isset($o['aiLiveMinutes'])) $this->aiLiveMinutes = JsonConverters::from('BillingItem', $o['aiLiveMinutes']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->base)) $o['base'] = JsonConverters::to('BillingItem', $this->base);
        if (isset($this->localNumbers)) $o['localNumbers'] = JsonConverters::to('BillingItem', $this->localNumbers);
        if (isset($this->tollFreeNumbers)) $o['tollFreeNumbers'] = JsonConverters::to('BillingItem', $this->tollFreeNumbers);
        if (isset($this->inboundVoiceCalls)) $o['inboundVoiceCalls'] = JsonConverters::to('BillingItem', $this->inboundVoiceCalls);
        if (isset($this->outboundVoiceCalls)) $o['outboundVoiceCalls'] = JsonConverters::to('BillingItem', $this->outboundVoiceCalls);
        if (isset($this->inboundFaxes)) $o['inboundFaxes'] = JsonConverters::to('BillingItem', $this->inboundFaxes);
        if (isset($this->outboundFaxes)) $o['outboundFaxes'] = JsonConverters::to('BillingItem', $this->outboundFaxes);
        if (isset($this->inboundSmsMessages)) $o['inboundSmsMessages'] = JsonConverters::to('BillingItem', $this->inboundSmsMessages);
        if (isset($this->outboundSmsMessages)) $o['outboundSmsMessages'] = JsonConverters::to('BillingItem', $this->outboundSmsMessages);
        if (isset($this->aiInsights)) $o['aiInsights'] = JsonConverters::to('BillingItem', $this->aiInsights);
        if (isset($this->aiLiveMinutes)) $o['aiLiveMinutes'] = JsonConverters::to('BillingItem', $this->aiLiveMinutes);
        return empty($o) ? new class(){} : $o;
    }
}

class AccountInfo extends EntityInfo implements JsonSerializable
{
    /**
     * @param string|null $id
     * @param string|null $dateCreated
     * @param string|null $dateLastModified
     * @param string|null $createdBy
     * @param string|null $lastModifiedBy
     */
    public function __construct(
        ?string $id=null,
        ?string $dateCreated=null,
        ?string $dateLastModified=null,
        ?string $createdBy=null,
        ?string $lastModifiedBy=null,
        /** @description The name of this account */
        // @ApiMember(Description="The name of this account")
        /** @var string|null */
        public ?string $name=null,

        /** @description The ID of this account's parent */
        // @ApiMember(Description="The ID of this account's parent")
        /** @var string|null */
        public ?string $parentAccountId=null,

        /** @description The twilio account SID */
        // @ApiMember(Description="The twilio account SID")
        /** @var string|null */
        public ?string $twilioAccountSid=null,

        /** @description The ancestors of this account. Useful for breadcrumbs */
        // @ApiMember(Description="The ancestors of this account. Useful for breadcrumbs")
        /** @var array<string>|null */
        public ?array $ancestorIds=null,

        /** @description The max number of phone numbers this account can have */
        // @ApiMember(Description="The max number of phone numbers this account can have")
        /** @var int */
        public int $maxPhoneNumbers=0,

        /** @description This account is BYOA */
        // @ApiMember(Description="This account is BYOA")
        /** @var bool|null */
        public ?bool $isBYOA=null,

        /** @description TrustHub Profile Sid */
        // @ApiMember(Description="TrustHub Profile Sid")
        /** @var string|null */
        public ?string $trustHubProfileSid=null,

        /** @description The ID of the logo file */
        // @ApiMember(Description="The ID of the logo file")
        /** @var string|null */
        public ?string $logoId=null,

        /** @description The URI of the logo file */
        // @ApiMember(Description="The URI of the logo file")
        /** @var string|null */
        public ?string $logoUri=null,

        /** @description The billing settings for this account */
        // @ApiMember(Description="The billing settings for this account")
        /** @var BillingSettings|null */
        public ?BillingSettings $billingSettings=null
    ) {
        parent::__construct($id,$dateCreated,$dateLastModified,$createdBy,$lastModifiedBy);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['parentAccountId'])) $this->parentAccountId = $o['parentAccountId'];
        if (isset($o['twilioAccountSid'])) $this->twilioAccountSid = $o['twilioAccountSid'];
        if (isset($o['ancestorIds'])) $this->ancestorIds = JsonConverters::fromArray('string', $o['ancestorIds']);
        if (isset($o['maxPhoneNumbers'])) $this->maxPhoneNumbers = $o['maxPhoneNumbers'];
        if (isset($o['isBYOA'])) $this->isBYOA = $o['isBYOA'];
        if (isset($o['trustHubProfileSid'])) $this->trustHubProfileSid = $o['trustHubProfileSid'];
        if (isset($o['logoId'])) $this->logoId = $o['logoId'];
        if (isset($o['logoUri'])) $this->logoUri = $o['logoUri'];
        if (isset($o['billingSettings'])) $this->billingSettings = JsonConverters::from('BillingSettings', $o['billingSettings']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->parentAccountId)) $o['parentAccountId'] = $this->parentAccountId;
        if (isset($this->twilioAccountSid)) $o['twilioAccountSid'] = $this->twilioAccountSid;
        if (isset($this->ancestorIds)) $o['ancestorIds'] = JsonConverters::toArray('string', $this->ancestorIds);
        if (isset($this->maxPhoneNumbers)) $o['maxPhoneNumbers'] = $this->maxPhoneNumbers;
        if (isset($this->isBYOA)) $o['isBYOA'] = $this->isBYOA;
        if (isset($this->trustHubProfileSid)) $o['trustHubProfileSid'] = $this->trustHubProfileSid;
        if (isset($this->logoId)) $o['logoId'] = $this->logoId;
        if (isset($this->logoUri)) $o['logoUri'] = $this->logoUri;
        if (isset($this->billingSettings)) $o['billingSettings'] = JsonConverters::to('BillingSettings', $this->billingSettings);
        return empty($o) ? new class(){} : $o;
    }
}

/**
 * @template T
 */
class ListResponse implements JsonSerializable
{
    public array $genericArgs = [];
    public static function create(array $genericArgs=[]): ListResponse {
        $to = new ListResponse();
        $to->genericArgs = $genericArgs;
        return $to;
    }

    public function __construct(
        /** @description The items */
        // @ApiMember(Description="The items")
        /** @var array<AccountInfo>|null */
        public mixed $items=null,

        /** @description The total number of items */
        // @ApiMember(Description="The total number of items")
        /** @var int */
        public mixed $totalCount=0,

        /** @description The total number of pages */
        // @ApiMember(Description="The total number of pages")
        /** @var int */
        public mixed $totalPages=0,

        /** @description Are there more pages of items? Used with simplified paging */
        // @ApiMember(Description="Are there more pages of items? Used with simplified paging")
        /** @var bool|null */
        public mixed $hasMorePages=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['items'])) $this->items = JsonConverters::fromArray('AccountInfo', $o['items']);
        if (isset($o['totalCount'])) $this->totalCount = $o['totalCount'];
        if (isset($o['totalPages'])) $this->totalPages = $o['totalPages'];
        if (isset($o['hasMorePages'])) $this->hasMorePages = $o['hasMorePages'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->items)) $o['items'] = JsonConverters::toArray('AccountInfo', $this->items);
        if (isset($this->totalCount)) $o['totalCount'] = $this->totalCount;
        if (isset($this->totalPages)) $o['totalPages'] = $this->totalPages;
        if (isset($this->hasMorePages)) $o['hasMorePages'] = $this->hasMorePages;
        return empty($o) ? new class(){} : $o;
    }
}

PHP ListEndpoints DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /endpoints HTTP/1.1 
Host: team.evovoice.io 
Accept: text/jsv
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	items: 
	[
		{
			accountId: String,
			accountName: String,
			customerId: String,
			customerName: String,
			referenceId: String,
			customerBreadcrumb: 
			[
				{
					id: String,
					name: String
				}
			],
			displayName: String,
			type: PhoneNumber,
			extraInformation: String,
			flowId: String,
			flowName: String,
			flowSchedule: Always,
			schedule: 
			{
				timeZoneId: String,
				inherit: False,
				forceClosed: False,
				rules: 
				[
					{
						id: String,
						name: String,
						priority: 0,
						state: String,
						source: String,
						condition: String,
						simpleRuleType: Always,
						customerState: String,
						flowId: String,
						isAllDay: False,
						startDate: String,
						startTime: String,
						endTime: String,
						bySetPosition: 
						[
							0
						],
						byMonth: 
						[
							0
						],
						byWeekNo: 
						[
							0
						],
						byYearDay: 
						[
							0
						],
						byMonthDay: 
						[
							0
						],
						byDay: 
						[
							{
								offset: 0,
								dayOfWeek: Sunday
							}
						],
						byHour: 
						[
							0
						],
						byMinute: 
						[
							0
						],
						interval: 0,
						count: 0,
						untilDate: String,
						frequency: None
					}
				],
				defaultState: String
			},
			scheduledFlows: 
			[
				{
					stateName: String,
					flowId: String
				}
			],
			disableSms: False,
			useExternal10DlcCampaign: False,
			isVirtualPhoneNumber: False,
			isCallerIdVerified: False,
			callerIdVerificationCode: String,
			phoneNumber: String,
			phoneNumberSid: String,
			callerIdName: String,
			addressSid: String,
			doNotTouchPhoneNumber: False,
			isEnrolledIn10DlcService: False,
			enableCallerIdLookup: False,
			userEmailAddress: String,
			sipRegion: NorthAmericaVirginia,
			sipCredentialSid: String,
			sipUserName: String,
			sipPassword: String,
			sipDomain: String,
			enableEmergencyCalling: False,
			emergencyAddressSid: String,
			emergencyPhoneNumberId: String,
			agentState: Unknown,
			agentStateReason: Unknown,
			userMode: SoftPhone,
			voicemailGreetingId: String,
			emailAddress: String,
			userFirstName: String,
			userLastName: String,
			avatarUrl: String,
			managerRole: None,
			dashboardPermissions: 
			[
				ViewFiles
			],
			myFieldPermissions: Hidden,
			customerFieldPermissions: Hidden,
			otherUserFieldPermissions: Hidden,
			otherEndpointFieldPermissions: Hidden,
			name: String,
			tags: 
			[
				{
					id: String,
					name: String,
					color: Magenta
				}
			],
			actionUrls: 
			[
				{
					id: String,
					url: String,
					method: GET
				}
			],
			teamMemberIds: 
			[
				String
			],
			contactListVisibility: None,
			contacts: 
			[
				{
					id: String,
					displayName: String,
					address: String
				}
			],
			documoId: String,
			integrationData: 
			{
				String: 
				{
					thirdPartyId: String
				}
			},
			thirdPartyPhoneSystemSettings: 
			{
				type: Demo,
				sipSettings: 
				{
					accounts: 
					[
						{
							number: String,
							agent: String,
							authName: String,
							userName: String,
							displayName: String,
							password: String,
							userDomain: String,
							registrationExpires: 0,
							transportType: UDP,
							localIP: String,
							localPort: 0,
							sipServer: String,
							sipServerPort: 0,
							outboundServer: String,
							outboundServerPort: 0,
							stunServer: String,
							stunPort: 0,
							audioPlaybackDeviceName: String,
							audioRecordingDeviceName: String,
							audioCodecs: 
							[
								PCMU
							],
							dtmfMethod: RFC2833
						}
					]
				},
				demoSettings: 
				{
					extension: String
				}
			},
			overrideAppSettings: False,
			appSettings: 
			{
				enablePhoneNumberManagement: False,
				enableDeviceManagement: False,
				enableDialer: False,
				enableCallHistory: False,
				enableAssistants: False,
				showFileNameInMessageCenter: False,
				chakraTheme: String,
				customCss: String,
				pageTitle: String,
				stringMappings: String,
				logoutUrl: String,
				portMyNumberUrl: String
			},
			assistantSettings: 
			{
				companyName: String,
				greeting: String,
				companyInformation: String,
				customPrompt: String,
				voice: String,
				voiceStyle: String,
				tuning: Accuracy,
				words: 
				[
					{
						word: String,
						pronounced: String
					}
				],
				links: 
				[
					{
						url: String,
						description: String
					}
				],
				contacts: 
				[
					{
						name: String,
						phoneNumber: String,
						transferType: Blind,
						about: String,
						emailAddress: String,
						takeMessageFields: 
						[
							{
								name: String,
								description: String,
								required: False
							}
						]
					}
				],
				integrations: 
				[
					{
						uri: String,
						httpMethod: String,
						authToken: String
					}
				]
			},
			embedSettings: 
			{
				enabled: False,
				allowedHosts: String
			},
			id: String,
			dateCreated: String,
			dateLastModified: String,
			createdBy: String,
			lastModifiedBy: String
		}
	],
	totalCount: 0,
	totalPages: 0,
	hasMorePages: False
}