Evo Voice

<back to all web services

ListIntegrations

Retrieve integrations

The following routes are available for this service:
GET/integrations
<?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 IntegrationTypes : string
{
    case HostedSuite = 'HostedSuite';
    case OfficeRnd = 'OfficeRnd';
    case Zoho = 'Zoho';
}

enum IntegrationStatuses : string
{
    case NotConfigured = 'NotConfigured';
    case Error = 'Error';
    case OK = 'OK';
}

enum ValueTypes : string
{
    case NotSpecified = 'NotSpecified';
    case String = 'String';
    case Boolean = 'Boolean';
    case Number = 'Number';
    case List = 'List';
    case Struct = 'Struct';
    case Transition = 'Transition';
    case Custom = 'Custom';
    case Date = 'Date';
    case AudioFile = 'AudioFile';
    case TimeZoneId = 'TimeZoneId';
    case PhoneNumber = 'PhoneNumber';
    case User = 'User';
    case Endpoint = 'Endpoint';
    case Time = 'Time';
    case File = 'File';
    case FaxNumber = 'FaxNumber';
    case EmailAccount = 'EmailAccount';
    case Customer = 'Customer';
    case Flow = 'Flow';
    case Team = 'Team';
    case FlowReference = 'FlowReference';
    case Integration = 'Integration';
    case Assistant = 'Assistant';
}

enum UIHints : string
{
    case None = 'None';
    case LargeText = 'LargeText';
    case InlineForm = 'InlineForm';
    case Password = 'Password';
    case InlineStruct = 'InlineStruct';
}

/**
 * @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;
    }
}

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;
    }
}

enum DataFieldUniqueness : string
{
    case NotUnique = 'NotUnique';
    case Unique = 'Unique';
    case UniqueToCustomer = 'UniqueToCustomer';
}

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

class DataField implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var string|null */
        public ?string $name=null,
        /** @var ValueTypes|null */
        public ?ValueTypes $type=null,
        /** @var UIHints|null */
        public ?UIHints $uiHint=null,
        /** @var string|null */
        public ?string $uiTab=null,
        /** @var bool|null */
        public ?bool $isAsync=null,
        /** @var bool|null */
        public ?bool $disableBinding=null,
        /** @var DataType|null */
        public ?DataType $structType=null,
        /** @var DataType|null */
        public ?DataType $listType=null,
        /** @var string|null */
        public ?string $description=null,
        /** @var array<string>|null */
        public ?array $possibleValues=null,
        /** @var bool|null */
        public ?bool $isOutput=null,
        /** @var string|null */
        public ?string $customFieldValuesUrl=null,
        /** @var Value|null */
        public ?Value $defaultValue=null,
        /** @var string|null */
        public ?string $transitionNameFormat=null,
        /** @var DataFieldUniqueness|null */
        public ?DataFieldUniqueness $uniqueness=null,
        /** @var bool|null */
        public ?bool $voiceOnly=null,
        /** @var string|null */
        public ?string $conditionalVisibilityField=null,
        /** @var string|null */
        public ?string $conditionalVisibilityValue=null,
        /** @var bool|null */
        public ?bool $noEvalTemplate=null,
        /** @var UserDataFieldModes|null */
        public ?UserDataFieldModes $userMode=null,
        /** @var bool|null */
        public ?bool $anyValueType=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['type'])) $this->type = JsonConverters::from('ValueTypes', $o['type']);
        if (isset($o['uiHint'])) $this->uiHint = JsonConverters::from('UIHints', $o['uiHint']);
        if (isset($o['uiTab'])) $this->uiTab = $o['uiTab'];
        if (isset($o['isAsync'])) $this->isAsync = $o['isAsync'];
        if (isset($o['disableBinding'])) $this->disableBinding = $o['disableBinding'];
        if (isset($o['structType'])) $this->structType = JsonConverters::from('DataType', $o['structType']);
        if (isset($o['listType'])) $this->listType = JsonConverters::from('DataType', $o['listType']);
        if (isset($o['description'])) $this->description = $o['description'];
        if (isset($o['possibleValues'])) $this->possibleValues = JsonConverters::fromArray('string', $o['possibleValues']);
        if (isset($o['isOutput'])) $this->isOutput = $o['isOutput'];
        if (isset($o['customFieldValuesUrl'])) $this->customFieldValuesUrl = $o['customFieldValuesUrl'];
        if (isset($o['defaultValue'])) $this->defaultValue = JsonConverters::from('Value', $o['defaultValue']);
        if (isset($o['transitionNameFormat'])) $this->transitionNameFormat = $o['transitionNameFormat'];
        if (isset($o['uniqueness'])) $this->uniqueness = JsonConverters::from('DataFieldUniqueness', $o['uniqueness']);
        if (isset($o['voiceOnly'])) $this->voiceOnly = $o['voiceOnly'];
        if (isset($o['conditionalVisibilityField'])) $this->conditionalVisibilityField = $o['conditionalVisibilityField'];
        if (isset($o['conditionalVisibilityValue'])) $this->conditionalVisibilityValue = $o['conditionalVisibilityValue'];
        if (isset($o['noEvalTemplate'])) $this->noEvalTemplate = $o['noEvalTemplate'];
        if (isset($o['userMode'])) $this->userMode = JsonConverters::from('UserDataFieldModes', $o['userMode']);
        if (isset($o['anyValueType'])) $this->anyValueType = $o['anyValueType'];
    }
    
    /** @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->type)) $o['type'] = JsonConverters::to('ValueTypes', $this->type);
        if (isset($this->uiHint)) $o['uiHint'] = JsonConverters::to('UIHints', $this->uiHint);
        if (isset($this->uiTab)) $o['uiTab'] = $this->uiTab;
        if (isset($this->isAsync)) $o['isAsync'] = $this->isAsync;
        if (isset($this->disableBinding)) $o['disableBinding'] = $this->disableBinding;
        if (isset($this->structType)) $o['structType'] = JsonConverters::to('DataType', $this->structType);
        if (isset($this->listType)) $o['listType'] = JsonConverters::to('DataType', $this->listType);
        if (isset($this->description)) $o['description'] = $this->description;
        if (isset($this->possibleValues)) $o['possibleValues'] = JsonConverters::toArray('string', $this->possibleValues);
        if (isset($this->isOutput)) $o['isOutput'] = $this->isOutput;
        if (isset($this->customFieldValuesUrl)) $o['customFieldValuesUrl'] = $this->customFieldValuesUrl;
        if (isset($this->defaultValue)) $o['defaultValue'] = JsonConverters::to('Value', $this->defaultValue);
        if (isset($this->transitionNameFormat)) $o['transitionNameFormat'] = $this->transitionNameFormat;
        if (isset($this->uniqueness)) $o['uniqueness'] = JsonConverters::to('DataFieldUniqueness', $this->uniqueness);
        if (isset($this->voiceOnly)) $o['voiceOnly'] = $this->voiceOnly;
        if (isset($this->conditionalVisibilityField)) $o['conditionalVisibilityField'] = $this->conditionalVisibilityField;
        if (isset($this->conditionalVisibilityValue)) $o['conditionalVisibilityValue'] = $this->conditionalVisibilityValue;
        if (isset($this->noEvalTemplate)) $o['noEvalTemplate'] = $this->noEvalTemplate;
        if (isset($this->userMode)) $o['userMode'] = JsonConverters::to('UserDataFieldModes', $this->userMode);
        if (isset($this->anyValueType)) $o['anyValueType'] = $this->anyValueType;
        return empty($o) ? new class(){} : $o;
    }
}

class DataType implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $typeName=null,
        /** @var array<DataField>|null */
        public ?array $fields=null
    ) {
    }

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

enum IntegrationFeatures : string
{
    case CrmSync = 'CrmSync';
    case OAuth2 = 'OAuth2';
}

class IntegrationInfo 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 ID of the account associated with this integration */
        // @ApiMember(Description="The ID of the account associated with this integration")
        /** @var string|null */
        public ?string $accountId=null,

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

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

        /** @description The date the integration was sync'd last */
        // @ApiMember(Description="The date the integration was sync'd last")
        /** @var string|null */
        public ?string $dateLastSync=null,

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

        /** @description The name of the integration (e.g. HostedSuite Dallas) */
        // @ApiMember(Description="The name of the integration (e.g. HostedSuite Dallas)")
        /** @var string|null */
        public ?string $name=null,

        /** @description Automatically create new customers / users when sync'ing with CRM? */
        // @ApiMember(Description="Automatically create new customers / users when sync'ing with CRM?")
        /** @var bool|null */
        public ?bool $automaticallyCreateCustomers=null,

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

        /** @description The status of the integration */
        // @ApiMember(Description="The status of the integration")
        /** @var IntegrationStatuses|null */
        public ?IntegrationStatuses $status=null,

        /** @description The status of the integration */
        // @ApiMember(Description="The status of the integration")
        /** @var string|null */
        public ?string $statusMessage=null,

        /** @description The settings type for this integration */
        // @ApiMember(Description="The settings type for this integration")
        /** @var DataType|null */
        public ?DataType $settingsDataType=null,

        /** @description The settings for this integration */
        // @ApiMember(Description="The settings for this integration")
        /** @var Struct|null */
        public ?Struct $settings=null,

        /** @description The features supported by this integration */
        // @ApiMember(Description="The features supported by this integration")
        /** @var array<IntegrationFeatures>|null */
        public ?array $features=null,

        /** @description Is this integration authorized (OAuth)? */
        // @ApiMember(Description="Is this integration authorized (OAuth)?")
        /** @var bool|null */
        public ?bool $isAuthorized=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['customerId'])) $this->customerId = $o['customerId'];
        if (isset($o['customerName'])) $this->customerName = $o['customerName'];
        if (isset($o['dateLastSync'])) $this->dateLastSync = $o['dateLastSync'];
        if (isset($o['customerBreadcrumb'])) $this->customerBreadcrumb = JsonConverters::fromArray('CustomerBreadcrumb', $o['customerBreadcrumb']);
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['automaticallyCreateCustomers'])) $this->automaticallyCreateCustomers = $o['automaticallyCreateCustomers'];
        if (isset($o['type'])) $this->type = JsonConverters::from('IntegrationTypes', $o['type']);
        if (isset($o['status'])) $this->status = JsonConverters::from('IntegrationStatuses', $o['status']);
        if (isset($o['statusMessage'])) $this->statusMessage = $o['statusMessage'];
        if (isset($o['settingsDataType'])) $this->settingsDataType = JsonConverters::from('DataType', $o['settingsDataType']);
        if (isset($o['settings'])) $this->settings = JsonConverters::from('Struct', $o['settings']);
        if (isset($o['features'])) $this->features = JsonConverters::fromArray('IntegrationFeatures', $o['features']);
        if (isset($o['isAuthorized'])) $this->isAuthorized = $o['isAuthorized'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->accountId)) $o['accountId'] = $this->accountId;
        if (isset($this->customerId)) $o['customerId'] = $this->customerId;
        if (isset($this->customerName)) $o['customerName'] = $this->customerName;
        if (isset($this->dateLastSync)) $o['dateLastSync'] = $this->dateLastSync;
        if (isset($this->customerBreadcrumb)) $o['customerBreadcrumb'] = JsonConverters::toArray('CustomerBreadcrumb', $this->customerBreadcrumb);
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->automaticallyCreateCustomers)) $o['automaticallyCreateCustomers'] = $this->automaticallyCreateCustomers;
        if (isset($this->type)) $o['type'] = JsonConverters::to('IntegrationTypes', $this->type);
        if (isset($this->status)) $o['status'] = JsonConverters::to('IntegrationStatuses', $this->status);
        if (isset($this->statusMessage)) $o['statusMessage'] = $this->statusMessage;
        if (isset($this->settingsDataType)) $o['settingsDataType'] = JsonConverters::to('DataType', $this->settingsDataType);
        if (isset($this->settings)) $o['settings'] = JsonConverters::to('Struct', $this->settings);
        if (isset($this->features)) $o['features'] = JsonConverters::toArray('IntegrationFeatures', $this->features);
        if (isset($this->isAuthorized)) $o['isAuthorized'] = $this->isAuthorized;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Retrieve integrations */
// @Api(Description="Retrieve integrations")
/**
 * @template ListRequest of IntegrationInfo
 */
class ListIntegrations 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 Filter by accounts */
        // @ApiMember(Description="Filter by accounts")
        /** @var array<string>|null */
        public ?array $accountIds=null,

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

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

        /** @description If you want a shall customer integration filter (e.g. no deep children) */
        // @ApiMember(Description="If you want a shall customer integration filter (e.g. no deep children)")
        /** @var bool|null */
        public ?bool $shallowParent=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['nameFilter'])) $this->nameFilter = $o['nameFilter'];
        if (isset($o['customerIds'])) $this->customerIds = JsonConverters::fromArray('string', $o['customerIds']);
        if (isset($o['shallowParent'])) $this->shallowParent = $o['shallowParent'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->accountIds)) $o['accountIds'] = JsonConverters::toArray('string', $this->accountIds);
        if (isset($this->nameFilter)) $o['nameFilter'] = $this->nameFilter;
        if (isset($this->customerIds)) $o['customerIds'] = JsonConverters::toArray('string', $this->customerIds);
        if (isset($this->shallowParent)) $o['shallowParent'] = $this->shallowParent;
        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 ListIntegrations DTOs

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

HTTP + XML

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

GET /integrations HTTP/1.1 
Host: team.evovoice.io 
Accept: application/xml
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<ListResponseOfIntegrationInfo_SFbT5aKg xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">
  <HasMorePages>false</HasMorePages>
  <Items xmlns:d2p1="http://schemas.datacontract.org/2004/07/Voice.Api.Integrations">
    <d2p1:IntegrationInfo>
      <CreatedBy>String</CreatedBy>
      <DateCreated>String</DateCreated>
      <DateLastModified>String</DateLastModified>
      <Id>String</Id>
      <LastModifiedBy>String</LastModifiedBy>
      <d2p1:AccountId>String</d2p1:AccountId>
      <d2p1:AutomaticallyCreateCustomers>false</d2p1:AutomaticallyCreateCustomers>
      <d2p1:CustomerBreadcrumb xmlns:d4p1="http://schemas.datacontract.org/2004/07/Voice.Api.Customers">
        <d4p1:CustomerBreadcrumb>
          <d4p1:Id>String</d4p1:Id>
          <d4p1:Name>String</d4p1:Name>
        </d4p1:CustomerBreadcrumb>
      </d2p1:CustomerBreadcrumb>
      <d2p1:CustomerId>String</d2p1:CustomerId>
      <d2p1:CustomerName>String</d2p1:CustomerName>
      <d2p1:DateLastSync>String</d2p1:DateLastSync>
      <d2p1:Features>
        <d2p1:IntegrationFeatures>CrmSync</d2p1:IntegrationFeatures>
      </d2p1:Features>
      <d2p1:IsAuthorized>false</d2p1:IsAuthorized>
      <d2p1:Name>String</d2p1:Name>
      <d2p1:Settings xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:nil="true" />
      <d2p1:SettingsDataType xmlns:d4p1="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data" i:nil="true" />
      <d2p1:Status>NotConfigured</d2p1:Status>
      <d2p1:StatusMessage>String</d2p1:StatusMessage>
      <d2p1:Type>HostedSuite</d2p1:Type>
    </d2p1:IntegrationInfo>
  </Items>
  <TotalCount>0</TotalCount>
  <TotalPages>0</TotalPages>
</ListResponseOfIntegrationInfo_SFbT5aKg>