| Requires any of the roles: | SystemAdministrator, Manager, Customer |
| GET | /customers/{customerId} |
|---|
import Foundation
import ServiceStack
/**
* Get a specific customer
*/
// @Api(Description="Get a specific customer")
public class GetCustomer : IGet, Codable
{
/**
* The ID of the customer you want to get
*/
// @ApiMember(Description="The ID of the customer you want to get")
public var customerId:String
required public init(){}
}
public class CustomerInfo : EntityInfo
{
/**
* The ID of the account associated with this customer
*/
// @ApiMember(Description="The ID of the account associated with this customer")
public var accountId:String
/**
* The parent customer ID for this customer
*/
// @ApiMember(Description="The parent customer ID for this customer")
public var parentCustomerId:String
/**
* The breadcrumb to this customer
*/
// @ApiMember(Description="The breadcrumb to this customer")
public var breadcrumb:[CustomerBreadcrumb]
/**
* The name of the account associated with this customer
*/
// @ApiMember(Description="The name of the account associated with this customer")
public var accountName:String
/**
* Is this customer staging or production?
*/
// @ApiMember(Description="Is this customer staging or production?")
public var isStaging:Bool
/**
* The name of the company
*/
// @ApiMember(Description="The name of the company")
public var name:String
/**
* The reference ID for this company
*/
// @ApiMember(Description="The reference ID for this company")
public var referenceId:String
/**
* This customer's data values
*/
// @ApiMember(Description="This customer's data values")
public var data:Struct
/**
* The list of tags for this customer
*/
// @ApiMember(Description="The list of tags for this customer")
public var tags:[Tag]
/**
* This customer's schedule
*/
// @ApiMember(Description="This customer's schedule")
public var schedule:Schedule
/**
* Integration data for this customer
*/
// @ApiMember(Description="Integration data for this customer")
public var integrationData:EntityIntegrationData
/**
* Override this customer's billing settings? Otherwise inherits from parent
*/
// @ApiMember(Description="Override this customer's billing settings? Otherwise inherits from parent")
public var overrideBillingSettings:Bool
/**
* Billing settings for this customer
*/
// @ApiMember(Description="Billing settings for this customer")
public var billingSettings:BillingSettings
/**
* Should this customer override the parent customer's app settings
*/
// @ApiMember(Description="Should this customer override the parent customer's app settings")
public var overrideAppSettings:Bool
/**
* App / Portal settings for this customer
*/
// @ApiMember(Description="App / Portal settings for this customer")
public var appSettings:AppSettings
/**
* Is international dialing enabled? This setting will only take effect if the account has international dialing settings turned on
*/
// @ApiMember(Description="Is international dialing enabled? This setting will only take effect if the account has international dialing settings turned on")
public var enableInternationalDialing:Bool
/**
* The list of country codes (in addition to the account default) which will be enabled for this customer
*/
// @ApiMember(Description="The list of country codes (in addition to the account default) which will be enabled for this customer")
public var enabledInternationalCountryCodes:[String]
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case accountId
case parentCustomerId
case breadcrumb
case accountName
case isStaging
case name
case referenceId
case data
case tags
case schedule
case integrationData
case overrideBillingSettings
case billingSettings
case overrideAppSettings
case appSettings
case enableInternationalDialing
case enabledInternationalCountryCodes
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
accountId = try container.decodeIfPresent(String.self, forKey: .accountId)
parentCustomerId = try container.decodeIfPresent(String.self, forKey: .parentCustomerId)
breadcrumb = try container.decodeIfPresent([CustomerBreadcrumb].self, forKey: .breadcrumb) ?? []
accountName = try container.decodeIfPresent(String.self, forKey: .accountName)
isStaging = try container.decodeIfPresent(Bool.self, forKey: .isStaging)
name = try container.decodeIfPresent(String.self, forKey: .name)
referenceId = try container.decodeIfPresent(String.self, forKey: .referenceId)
data = try container.decodeIfPresent(Struct.self, forKey: .data)
tags = try container.decodeIfPresent([Tag].self, forKey: .tags) ?? []
schedule = try container.decodeIfPresent(Schedule.self, forKey: .schedule)
integrationData = try container.decodeIfPresent(EntityIntegrationData.self, forKey: .integrationData)
overrideBillingSettings = try container.decodeIfPresent(Bool.self, forKey: .overrideBillingSettings)
billingSettings = try container.decodeIfPresent(BillingSettings.self, forKey: .billingSettings)
overrideAppSettings = try container.decodeIfPresent(Bool.self, forKey: .overrideAppSettings)
appSettings = try container.decodeIfPresent(AppSettings.self, forKey: .appSettings)
enableInternationalDialing = try container.decodeIfPresent(Bool.self, forKey: .enableInternationalDialing)
enabledInternationalCountryCodes = try container.decodeIfPresent([String].self, forKey: .enabledInternationalCountryCodes) ?? []
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if accountId != nil { try container.encode(accountId, forKey: .accountId) }
if parentCustomerId != nil { try container.encode(parentCustomerId, forKey: .parentCustomerId) }
if breadcrumb != nil { try container.encode(breadcrumb, forKey: .breadcrumb) }
if accountName != nil { try container.encode(accountName, forKey: .accountName) }
if isStaging != nil { try container.encode(isStaging, forKey: .isStaging) }
if name != nil { try container.encode(name, forKey: .name) }
if referenceId != nil { try container.encode(referenceId, forKey: .referenceId) }
if data != nil { try container.encode(data, forKey: .data) }
if tags != nil { try container.encode(tags, forKey: .tags) }
if schedule != nil { try container.encode(schedule, forKey: .schedule) }
if integrationData != nil { try container.encode(integrationData, forKey: .integrationData) }
if overrideBillingSettings != nil { try container.encode(overrideBillingSettings, forKey: .overrideBillingSettings) }
if billingSettings != nil { try container.encode(billingSettings, forKey: .billingSettings) }
if overrideAppSettings != nil { try container.encode(overrideAppSettings, forKey: .overrideAppSettings) }
if appSettings != nil { try container.encode(appSettings, forKey: .appSettings) }
if enableInternationalDialing != nil { try container.encode(enableInternationalDialing, forKey: .enableInternationalDialing) }
if enabledInternationalCountryCodes != nil { try container.encode(enabledInternationalCountryCodes, forKey: .enabledInternationalCountryCodes) }
}
}
public class EntityInfo : Codable
{
/**
* The ID of the object
*/
// @ApiMember(Description="The ID of the object")
public var id:String
/**
* The date the object was created
*/
// @ApiMember(Description="The date the object was created")
public var dateCreated:String
/**
* The date the object was last modified
*/
// @ApiMember(Description="The date the object was last modified")
public var dateLastModified:String
/**
* The user that created this object
*/
// @ApiMember(Description="The user that created this object")
public var createdBy:String
/**
* The user that last modified this object
*/
// @ApiMember(Description="The user that last modified this object")
public var lastModifiedBy:String
required public init(){}
}
public class CustomerBreadcrumb : Codable
{
public var id:String
public var name:String
required public init(){}
}
public class Struct : List<String:Value>
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class Value : Codable
{
public var boolValue:Bool?
public var stringValue:String
public var numberValue:Double?
public var listValue:[Struct]
public var structValue:Struct
required public init(){}
}
public class Tag : Codable
{
public var id:String
public var name:String
public var color:TagColors
required public init(){}
}
public enum TagColors : String, Codable
{
case Magenta
case Red
case Volcano
case Orange
case Gold
case Lime
case Green
case Cyan
case Blue
case GeekBlue
case Purple
}
public class Schedule : Codable
{
public var timeZoneId:String
public var inherit:Bool
public var forceClosed:Bool
public var rules:[SchedulingRule]
public var defaultState:String
required public init(){}
}
public class SchedulingRule : Codable
{
public var id:String
public var name:String
public var priority:Int
public var state:String
public var source:String
public var condition:String
public var simpleRuleType:SimpleSchedulingRuleTypes
public var customerState:String
public var flowId:String
public var flowParams:Struct
public var isAllDay:Bool
public var startDate:String
public var startTime:String
public var endTime:String
public var bySetPosition:[Int]
public var byMonth:[Int]
public var byWeekNo:[Int]
public var byYearDay:[Int]
public var byMonthDay:[Int]
public var byDay:[ScheduleDay]
public var byHour:[Int]
public var byMinute:[Int]
public var interval:Int
public var count:Int
public var untilDate:String
public var frequency:SchedulingRuleFrequency
required public init(){}
}
public enum SimpleSchedulingRuleTypes : String, Codable
{
case Always
case CustomerState
case Time
}
public class ScheduleDay : Codable
{
public var offset:Int
public var dayOfWeek:DayOfWeek
required public init(){}
}
public enum SchedulingRuleFrequency : String, Codable
{
case None
case Secondly
case Minutely
case Hourly
case Daily
case Weekly
case Monthly
case Yearly
}
public class EntityIntegrationData : List<String:IntegrationData>
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class IntegrationData : Codable
{
public var thirdPartyId:String
required public init(){}
}
public class BillingSettings : Codable
{
public var base:BillingItem
public var localNumbers:BillingItem
public var tollFreeNumbers:BillingItem
public var inboundVoiceCalls:BillingItem
public var outboundVoiceCalls:BillingItem
public var inboundFaxes:BillingItem
public var outboundFaxes:BillingItem
public var inboundSmsMessages:BillingItem
public var outboundSmsMessages:BillingItem
public var aiInsights:BillingItem
public var aiLiveMinutes:BillingItem
public var aiMessages:BillingItem
public var aiTranscriptions:BillingItem
required public init(){}
}
public class BillingItem : Codable
{
public var baseCost:Double
public var rawUnitMultiplier:Double
public var unitCost:Double
public var allowance:Int
required public init(){}
}
public class AppSettings : Codable
{
public var enablePhoneNumberManagement:Bool
public var enableDeviceManagement:Bool
public var enableDialer:Bool
public var enableCallHistory:Bool
public var enableAssistants:Bool
public var showFileNameInMessageCenter:Bool
public var chakraTheme:String
public var customCss:String
public var pageTitle:String
public var stringMappings:String
public var logoutUrl:String
public var portMyNumberUrl:String
required public init(){}
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
GET /customers/{customerId} HTTP/1.1
Host: team.evovoice.io
Accept: text/jsv
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
accountId: String,
parentCustomerId: String,
breadcrumb:
[
{
id: String,
name: String
}
],
accountName: String,
isStaging: False,
name: String,
referenceId: String,
tags:
[
{
id: String,
name: String,
color: Magenta
}
],
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
},
integrationData:
{
String:
{
thirdPartyId: String
}
},
overrideBillingSettings: False,
billingSettings:
{
base:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
localNumbers:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
tollFreeNumbers:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
inboundVoiceCalls:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
outboundVoiceCalls:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
inboundFaxes:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
outboundFaxes:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
inboundSmsMessages:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
outboundSmsMessages:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
aiInsights:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
aiLiveMinutes:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
aiMessages:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
},
aiTranscriptions:
{
baseCost: 0,
rawUnitMultiplier: 0,
unitCost: 0,
allowance: 0
}
},
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
},
enableInternationalDialing: False,
enabledInternationalCountryCodes:
[
String
],
id: String,
dateCreated: String,
dateLastModified: String,
createdBy: String,
lastModifiedBy: String
}