Mercedes.Agency.Orchestration.API

<back to all web services

CarConfiguratorStockRequest

CarConfigurator
Requires Authentication
The following routes are available for this service:
POST/v1/CarConfiguratorStockValidate and save a car configurator code for a vehicle searchThis endpoint calls Agency API to validate and save a car configurator code. The code is validated and saved in the database and returns a response from a third party CCS which provides car configuration details. These get saved to open search and used to perform a vehicle search
import Foundation
import ServiceStack

public class CarConfiguratorStockRequest : IPost, Codable
{
    /**
    * The configurator code to search on
    */
    // @ApiMember(Description="The configurator code to search on", IsRequired=true)
    public var configuratorCode:String

    /**
    * Whether to return sellable vehicles
    */
    // @ApiMember(Description="Whether to return sellable vehicles")
    public var isSellable:Bool?

    /**
    * Whether to only get exact matches
    */
    // @ApiMember(Description="Whether to only get exact matches")
    public var exactMatch:Bool

    /**
    * Whether to restrict vehicles response to a GSSN
    */
    // @ApiMember(Description="Whether to restrict vehicles response to a GSSN")
    public var gssn:String

    required public init(){}
}

public class CarConfiguratorStockResponse : Codable
{
    public var totalVehicles:Int
    public var carConfiguratorResponse:CarConfiguratorResponse
    public var exactMatches:CarConfiguratorStockMatches
    public var closeMatches:CarConfiguratorStockMatches

    required public init(){}
}

public class CarConfiguratorResponse : Codable
{
    public var name:String
    public var keyInformation:KeyInformation
    public var orderingOptions:OrderingOptions
    public var responseStatus:ResponseStatus
    public var configuratorCode:String

    required public init(){}
}

public class KeyInformation : Codable
{
    public var bM7NST:String
    public var configurationDate:String
    public var modelYear:String
    public var halfYear:String

    required public init(){}
}

public class OrderingOptions : Codable
{
    public var interior:[String]
    public var exterior:[String]
    public var options:[String]
    public var wheelOptions:[EquipmentCache] = []
    public var trimOptions:[EquipmentCache] = []
    public var optionCodes:[EquipmentCache] = []

    required public init(){}
}

public class EquipmentCache : Codable
{
    public var code:String
    public var Description:String
    public var standardFlag:String
    public var price:Double
    public var category:String
    public var importance:String

    required public init(){}
}

public class CarConfiguratorStockMatches : Codable
{
    public var sellableMatches:[CarConfiguratorStockMatch] = []
    public var nonSellableMatches:[CarConfiguratorStockMatch] = []

    required public init(){}
}

public class CarConfiguratorStockMatch : Codable
{
    public var vehicle:CarConfiguratorVehicle
    public var isSellable:Bool
    public var vehicleWheels:String
    public var vehicleTrim:String
    public var vehicleAdditionalOptionCodes:[String] = []
    public var fullModelYearDifferences:[String] = []
    public var paintDifferences:[String] = []
    public var upholsteryDifferences:[String] = []
    public var wheelDifferences:[String] = []
    public var trimDifferences:[String] = []
    public var equipmentDifferences:[String] = []
    public var differences:[String] = []
    public var exactMatch:Bool

    required public init(){}
}

public class CarConfiguratorVehicle : BackOrderVehicleDetailsWithPackages
{
    public var modelYearCode:String
    public var halfModelYearCode:String
    public var activeOffers:[Int] = []
    public var eligibleForMotability:Bool
    public var nearestPort:Bool?

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case modelYearCode
        case halfModelYearCode
        case activeOffers
        case eligibleForMotability
        case nearestPort
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        modelYearCode = try container.decodeIfPresent(String.self, forKey: .modelYearCode)
        halfModelYearCode = try container.decodeIfPresent(String.self, forKey: .halfModelYearCode)
        activeOffers = try container.decodeIfPresent([Int].self, forKey: .activeOffers) ?? []
        eligibleForMotability = try container.decodeIfPresent(Bool.self, forKey: .eligibleForMotability)
        nearestPort = try container.decodeIfPresent(Bool.self, forKey: .nearestPort)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if modelYearCode != nil { try container.encode(modelYearCode, forKey: .modelYearCode) }
        if halfModelYearCode != nil { try container.encode(halfModelYearCode, forKey: .halfModelYearCode) }
        if activeOffers.count > 0 { try container.encode(activeOffers, forKey: .activeOffers) }
        if eligibleForMotability != nil { try container.encode(eligibleForMotability, forKey: .eligibleForMotability) }
        if nearestPort != nil { try container.encode(nearestPort, forKey: .nearestPort) }
    }
}

public class BackOrderVehicleDetailsWithPackages : BackOrderVehicleDetails, IPackages
{
    public var packages:[Package]
    public var packageNames:String

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case packages
        case packageNames
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        packages = try container.decodeIfPresent([Package].self, forKey: .packages) ?? []
        packageNames = try container.decodeIfPresent(String.self, forKey: .packageNames)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if packages != nil { try container.encode(packages, forKey: .packages) }
        if packageNames != nil { try container.encode(packageNames, forKey: .packageNames) }
    }
}

public class BackOrderVehicleDetails : IVehiclePrices, IVehiclePriceCollection, IImageUrl, IVehicleDetails, Codable
{
    public var vin:String
    public var commissionNumber:String
    public var Description:String
    public var shortDescription:String
    public var modelId:Int
    public var model:String
    public var fullModelYearCode:String
    public var brandId:Int?
    public var brand:BackOrderVehicleDetailsBrand
    public var retailerId:Int
    public var imageUrl:String
    public var colour:String
    public var colourCode:String
    public var fuelType:String
    public var fuelTypeId:Int
    public var transmission:String
    public var transmissionType:String
    public var engine:Engine
    public var engineBadge:String
    public var package:String
    public var line:String
    public var upholstery:String
    public var upholsteryCode:String
    public var usageCode:String
    public var account:String
    public var accountType:String
    public var nst:String
    public var baumuster:String
    public var electricRange:Double?
    public var electricConsumption:Double?
    public var actualPrice:Double?
    public var otrPrice:Double
    public var retailPriceExVat:Double
    public var p11D:Double
    public var vehicleType:String
    public var upholsteryDescription:String
    public var upholsteryType:String
    public var bodyStyle:String
    public var bodyStyleStyleCode:String
    public var bodyStyleStyleCodeElectric:String
    public var bodyStyleStyleCodeHybrid:String
    public var availablePackages:[String]
    public var mapped_Line:Int?
    public var secured:Bool
    public var bm7NST:String
    public var isAvailableOnline:Bool
    public var isSpecialistCar:Bool
    public var isSellable:Bool
    public var underOffer:Bool
    public var vehicleAuditDetails:[VehicleAuditDetails]
    public var retailer:Retailer
    public var media:Media
    public var emission:Double?
    public var colourGroup:String
    public var vehicleClass:String
    public var productRange:String
    public var isHOBackOrderAccountVehicle:Bool
    public var isAllocatedToBackOrder:Bool
    public var inBackOrderAccount:Bool
    public var deliveryCharge:Double
    public var deliveryChargeNet:Double?
    public var deliveryChargeVAT:Double?
    public var plates:Double
    public var platesNet:Double?
    public var platesVAT:Double?
    public var fuelCharge:Double
    public var fuelChargeNet:Double?
    public var fuelChargeVAT:Double?
    public var retailPrice_ExVAT:Double
    public var retailPrice_IncVAT:Double
    public var veD_Year1:Double
    public var veD_Year2:Double
    public var firstRegFee:Double
    public var otR_Value:Double
    public var otr:Double
    public var prices:[Price]
    public var productionDate:String
    public var portArrivalDate:Date?
    public var location:String
    public var isDisplayStock:Bool
    public var displayRetailerId:Int?
    public var displayRetailer:String
    public var displayRetailerGssnId:String
    public var displayRetailerMarketAreaId:Int?
    public var isSmartDisplayRetailer:Bool?
    public var colourDescription:String
    public var creation:Date?
    public var modified:Date?
    public var vatQualifyingNumber:Int?
    public var vatQualifying:Bool
    public var currentRetailerOfferPrice:Double
    public var gssnId:String
    public var noImage:Bool
    public var registrationNumber:String
    public var registrationDate:Date?
    public var mileage:Int?
    public var tradeInDate:Date?
    public var vid:String
    public var emissionCombined:String
    public var emissionDirective:String
    public var normalisedEmissionDirective:String
    public var hasMildHybridEquipmentCode:Bool
    public var acceleration:Double?
    public var chassisNumber:String
    public var numberOfDoors:String
    public var numberOfSeats:String
    public var specialInfo:Bool
    public var eligibleForIntegratedServiceCare:Bool
    public var consumptionCombined:Consumption
    public var consumptionExtraUrban:Consumption
    public var consumptionUrban:Consumption
    public var wltpFuelConsumptionCombined:Consumption
    public var wltpFuelConsumptionExtraHigh:Consumption
    public var wltpFuelConsumptionHigh:Consumption
    public var wltpFuelConsumptionLow:Consumption
    public var wltpFuelConsumptionMedium:Consumption
    public var energyEfficiencyClass:EmissionClass
    public var equipment:[Equipmentv2]
    public var equipmentAdditional:[Equipment]
    public var equipmentCategories:[EquipmentCategoryv2]
    public var vehicleData:[VehicleAttribute]
    public var integratedServiceCareOptions:[IntegratedServiceCareOptions]
    public var ispVehicleCustomerDescriptions:[String]
    public var marketingCode:String
    public var eligibleForMaTransfer:Bool
    public var confirmedProductionDate:String
    public var forecastedArrivalDate:String

    required public init(){}
}

public class BackOrderVehicleDetailsBrand : Codable
{
    public var Description:String

    required public init(){}
}

public class Engine : Codable
{
    public var id:Int
    public var badge:String
    public var cubicCapacity:Int
    public var cyclinders:Int
    public var horsePower:String
    public var kw:String
    public var selected:Bool

    required public init(){}
}

public class VehicleAuditDetails : Codable
{
    public var userId:String
    public var status:Bool
    public var notes:String
    public var creationDate:String

    required public init(){}
}

public class Retailer : Codable
{
    public var id:Int
    public var gssnId:String
    public var Description:String
    public var street:String
    public var city:String
    public var district:String
    public var postcode:String
    public var googleMapPostcode:String
    public var phone:String
    public var fax:String
    public var email:String
    public var website:String
    public var latitude:Double
    public var longitude:Double
    public var retailerGroup_Id:Int?
    public var retailerGroupId:String
    public var retailerGroupName:String
    public var distance:Double
    public var paymentServiceGuid:String
    public var isOnline:Bool?
    public var isNewCarRetailer:Bool?
    public var isUsedCarRetailer:Bool?
    public var isCentralRetailer:Bool
    public var chatEnabled:Bool
    public var tradeInEnabled:Bool
    public var displayPhoneNumberNew:String
    public var displayPhoneNumberUsed:String
    public var services:RetailerServices
    public var smart:Bool
    public var smartDescription:String
    public var smartWebsite:String
    public var smartEmail:String
    public var smartPhone:String
    public var additionalInformation:String
    public var legacyId:String
    public var driveTime:Double
    public var agent:Bool
    public var port:Int?
    public var portName:String
    public var marketAreaId:Int?
    public var marketAreaName:String
    public var maintenanceDate:String
    public var maintenanceSource:String
    public var stpAccountNumbers:String
    public var campaignExcluded:Bool?
    public var digitalLoungeParentGssnId:String
    public var sendLeadsToDigitalLoungeParent:Bool
    public var isExcludedFromImport:Bool
    public var openingTimes:RetailerOpeningTimes

    required public init(){}
}

public class RetailerServices : Codable
{
    public var `new`:[RetailerService]
    public var used:[RetailerService]

    required public init(){}
}

public class RetailerService : Codable
{
    public var id:Int
    public var Description:String
    public var priority:Bool

    required public init(){}
}

public class RetailerOpeningTimes : Codable
{
    public var `new`:[RetailerOpeningTime] = []
    public var used:[RetailerOpeningTime] = []

    required public init(){}
}

public class RetailerOpeningTime : Codable
{
    public var day:String
    public var openFrom:String
    public var openTo:String
    public var special:String

    required public init(){}
}

public class Media : Codable
{
    public var imageCount:Int
    public var mainImageUrl:String
    public var mainImageUrlMobile:String
    public var noImage:Bool
    public var threeSixtyDegreeImageUrls:[String]
    public var threeSixtyDegreeMobileImageUrls:[String]
    public var vehicleImageUrls:[String]
    public var vehicleMobileImageUrls:[String]

    required public init(){}
}

public class Price : Codable
{
    public var id:String
    public var Description:String
    public var net:Double
    public var vat:Double
    public var gross:Double
    public var product:OfferPriceProductType

    required public init(){}
}

public enum OfferPriceProductType : String, Codable
{
    case LIST_PRICE
    case NUMBER_PLATE_FEE
    case DELIVERY_CHARGE
    case FUEL_CHARGE
    case MANUFACTURER_OFFER
    case PERSONALISED_MONEYOFFER
    case PERSONALISED_NONMONEYOFFER
    case PERSONALISED_NONMONEYOFFER_NEG
    case SERVICE
    case SERVICE_NEG
    case GOVERNMENT_GRANT
    case OUTRIGHT_PURCHASE_DISCOUNT
    case VIP_OFFER
    case WALLBOX_OFFER
    case WALLBOX_OFFER_NEG
    case ROAD_FUND_LICENCE
    case FIRST_REGISTRATION_FEE
    case NOT_FOUND
    case ACCESSORY_OFFER
    case ACCESSORY_OFFER_NEG
    case MOTABILITY_DISCOUNT
}

public class Consumption : Codable
{
    public var id:Int
    public var lkm:Double
    public var mpg:Double

    required public init(){}
}

public class EmissionClass : Codable
{
    public var colour:String
    public var rating:String

    required public init(){}
}

public class Equipmentv2 : Equipment
{
    public var importance:Int
    public var isAdditional:Bool

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case importance
        case isAdditional
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        importance = try container.decodeIfPresent(Int.self, forKey: .importance)
        isAdditional = try container.decodeIfPresent(Bool.self, forKey: .isAdditional)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if importance != nil { try container.encode(importance, forKey: .importance) }
        if isAdditional != nil { try container.encode(isAdditional, forKey: .isAdditional) }
    }
}

public class Equipment : Codable
{
    public var id:Int?
    public var code:String
    public var Description:String

    required public init(){}
}

public class EquipmentCategoryv2 : Codable
{
    public var order:Int
    public var code:String
    public var Description:String
    public var equipment:[Equipmentv2]

    required public init(){}
}

public class VehicleAttribute : Codable
{
    public var Description:String
    public var value:String

    required public init(){}
}

public class IntegratedServiceCareOptions : Codable
{
    public var optionCode:String
    public var bM7NST:String
    public var fullModelYear:String
    public var integratedProductType:String
    public var customerDescription:String
    public var oneAgentProductType:String

    required public init(){}
}

public class Package : Codable
{
    public var id:Int
    public var Description:String

    required public init(){}
}


Swift CarConfiguratorStockRequest DTOs

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

HTTP + OTHER

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

POST /v1/CarConfiguratorStock HTTP/1.1 
Host: prod-api-agency-orch-mb-dhc.rapp-customers.co.uk 
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length

{"ConfiguratorCode":"String","IsSellable":false,"ExactMatch":false,"GSSN":"String"}
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length

{"TotalVehicles":4,"CarConfiguratorResponse":{"Name":"String","KeyInformation":{"BM7NST":"String","ConfigurationDate":"String","ModelYear":"String","HalfYear":"String"},"OrderingOptions":{"Interior":["String"],"Exterior":["String"],"Options":["String"],"WheelOptions":[{"Code":"String","Description":"String","StandardFlag":"String","Price":0,"Category":"String","Importance":"String"}],"TrimOptions":[{"Code":"String","Description":"String","StandardFlag":"String","Price":0,"Category":"String","Importance":"String"}],"OptionCodes":[{"Code":"String","Description":"String","StandardFlag":"String","Price":0,"Category":"String","Importance":"String"}]},"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}},"ConfiguratorCode":"String"},"ExactMatches":{"SellableMatches":[{}],"NonSellableMatches":[{}]},"CloseMatches":{"SellableMatches":[{}],"NonSellableMatches":[{}]}}