     public let filter: Filter?
     public let search: Search?
     public let orderBy: Order?
-    public let urlParameters: [UrlParameter]
-    
-    public init(auth: Auth, offset: MSOffset? = nil, expanders: [Expander] = [], filter: Filter? = nil, search: Search? = nil, orderBy: Order? = nil, urlParameters: [UrlParameter] = []) {
+    public let id: UUID?
+    public let urlParameters: [UrlParameter]?
+    
+    public init(auth: Auth, offset: MSOffset? = nil, expanders: [Expander] = [], filter: Filter? = nil, search: Search? = nil, orderBy: Order? = nil, id: UUID? = nil, urlParameters: [UrlParameter] = []) {
         self.auth = auth
         self.offset = offset
         self.expanders = expanders
         self.filter = filter
         self.search = search
         self.orderBy = orderBy
+        self.id = id
         self.urlParameters = urlParameters
     }
     
     var allParameters: [UrlParameter] {
-        return mergeUrlParameters(offset, search, CompositeExpander(expanders), filter, orderBy) + urlParameters
+        return mergeUrlParameters(offset, search, CompositeExpander(expanders), filter, orderBy) + (urlParameters ?? [])
     }
 }
 

    
    /**
     Load dashboard data for current day
     - parameter auth: Authentication information
     - returns: Dashboard
    */
    public static func dashboardDay(auth: Auth) -> Observable<MSDashboard> {
        return HttpClient.get(.dashboardDay, auth: auth)
            .flatMapLatest { result -> Observable<MSDashboard> in
                guard let result = result?.toDictionary() else { return Observable.empty() }
                guard let dash = MSDashboard.from(dict: result) else {

    /**
     Load product info by product id
     Also see [ API reference](https://online.moysklad.ru/api/remap/1.1/doc/index.html#товар-товар-get)
     - parameter parameters: container for parameters like:
                         authentication information,
                         desired data offset,
                         filter for request,
                         Additional objects to include into request,
                         Order by instruction,
                         UUID id
    */
    public static func productAssortmentById(parameters: UrlRequestParameters) -> Observable<MSEntity<MSAssortment>> {
        guard let idStr = parameters.id?.uuidString else { return Observable.error(MSError.genericError(errorText: LocalizedStrings.incorrectProductResponse.value)) }
        return HttpClient.get(.product, auth: parameters.auth, urlPathComponents: [idStr], urlParameters: [CompositeExpander(parameters.expanders)])
            .flatMapLatest { result -> Observable<MSEntity<MSAssortment>> in
                guard let result = result?.toDictionary() else { return Observable.error(MSError.genericError(errorText: LocalizedStrings.incorrectProductResponse.value)) }
                
                guard let deserialized = MSAssortment.from(dict: result) else {
                    return Observable.error(MSError.genericError(errorText: LocalizedStrings.incorrectProductResponse.value))
                }
                
                return Observable.just(deserialized)
        }
    }
    
    /**
     Load product info by bundle id.
     Also see [ API reference](https://online.moysklad.ru/api/remap/1.1/doc/index.html#комплект-комплект-get)
     - parameter parameters: container for parameters like:
                         authentication information,
                         desired data offset,
                         filter for request,
                         Additional objects to include into request,
                         Order by instruction,
                         UUID id
     */
    public static func bundleAssortmentById(parameters: UrlRequestParameters) -> Observable<MSEntity<MSAssortment>> {
        guard let idString = parameters.id?.uuidString else { return Observable.error(MSError.genericError(errorText: LocalizedStrings.incorrectProductResponse.value)) }
        return HttpClient.get(.bundle, auth: parameters.auth, urlPathComponents: [idString], urlParameters: [CompositeExpander(parameters.expanders)])
            .flatMapLatest { result -> Observable<MSEntity<MSAssortment>> in
                guard let result = result?.toDictionary() else { return Observable.error(MSError.genericError(errorText: LocalizedStrings.incorrectBundleResponse.value)) }
                
                guard let deserialized = MSAssortment.from(dict: result) else {
                    return Observable.error(MSError.genericError(errorText: LocalizedStrings.incorrectBundleResponse.value))
                }
                
                return Observable.just(deserialized)
        }
    }
    
    /**
     Load product info by variant id.
     Also see [ API reference](https://online.moysklad.ru/api/remap/1.1/doc/index.html#модификация-модификация-get)
     - parameter parameters: container for parameters like:
                         authentication information,
                         desired data offset,
                         filter for request,
                         Additional objects to include into request,
                         Order by instruction,
                         UUID id
     */
    public static func variantAssortmentById(parameters: UrlRequestParameters) -> Observable<MSEntity<MSAssortment>> {
        guard let idString = parameters.id?.uuidString else { return Observable.error(MSError.genericError(errorText: LocalizedStrings.incorrectProductResponse.value)) }
        return HttpClient.get(.variant, auth: parameters.auth, urlPathComponents: [idString], urlParameters: [CompositeExpander(parameters.expanders)])
            .flatMapLatest { result -> Observable<MSEntity<MSAssortment>> in
                guard let result = result?.toDictionary() else { return Observable.error(MSError.genericError(errorText: LocalizedStrings.incorrectVariantResponse.value)) }
                
                guard let deserialized = MSAssortment.from(dict: result) else {
                    return Observable.error(MSError.genericError(errorText: LocalizedStrings.incorrectVariantResponse.value))
                }
                
                return Observable.just(deserialized)
        }
    }
    
    /**
     Load custom entities
     Also see [ API reference](https://online.moysklad.ru/api/remap/1.1/doc/index.html#пользовательский-справочник)
     - parameter parameters: container for parameters like:
                         authentication information,
                         desired data offset,
                         filter for request,
                         Additional objects to include into request,
                         Order by instruction,
                         UUID id
     - parameter metadataId: Id of custom entity
    */
    public static func customEntities(parameters: UrlRequestParameters,
