         return .init(path: "/v2/catalogs/favorites",
                      method: .GET,
                      requiresAuth: true,
-                     parameters: params,
-                     timeoutInterval: 30)
+                     parameters: params)
+    }
+    
+    // TODO: LocationQuery
+    public static func getPublications(matchingSearch searchString: String, pagination: PaginatedQuery = PaginatedQuery(count: 24)) -> CoreAPI.Request<[CoreAPI.PagedPublication]> {
+        
+        var params = ["query": searchString]
+        params.merge(pagination.requestParams) { (_, new) in new }
+        
+        return .init(path: "/v2/catalogs/search",
+                     method: .GET,
+                     requiresAuth: true,
+                     parameters: params)
+    }
+    
+    public static func getPublications(forStores storeIds: [CoreAPI.Store.Identifier], pagination: PaginatedQuery = PaginatedQuery(count: 24)) ->
+        CoreAPI.Request<[CoreAPI.PagedPublication]> {
+            var params = ["store_ids": storeIds.map({ $0.rawValue }).joined(separator: ",")]
+            params.merge(pagination.requestParams) { (_, new) in new }
+
+            return .init(path: "/v2/catalogs",
+                         method: .GET,
+                         requiresAuth: true,
+                         parameters: params)
     }
 }

        return .init(path: "/v2/catalogs/suggest",
                     method: .GET,
                     requiresAuth: true,
                     parameters: params,
                     timeoutInterval: 30)
    }
    
    public enum PublicationSortOrder {

    /// Fetch all hotspots for the specified publication
    /// The `aspectRatio` (w/h) of the publication is needed in order to position the hotspots correctly
    public static func getPagedPublicationHotspots(withId pubId: CoreAPI.PagedPublication.Identifier, aspectRatio: Double) -> CoreAPI.Request<[CoreAPI.PagedPublication.Hotspot]> {
        return .init(path: "/v2/catalogs/\(pubId.rawValue)/hotspots", method: .GET, resultMapper: {
            return $0.mapValue {
                return try JSONDecoder().decode([CoreAPI.PagedPublication.Hotspot].self, from: $0).map {
                    /// We do this to convert out of the awful old V2 coord system (which was x: 0->1, y: 0->(h/w))
