type Query {
    analyticsFeeds: [AnalyticsFeed]!
    allProductsSearch(
        status: [String], term: String, subaccounts: [Int], labelIds: [Int],
        sortField: String, sortDir: SortDir, productType: [Int], limit: Int,
        offset: Int, startDate: Date, endDate: Date,
        queryType: AllProductSearchQueryType,
        productConfiguration: [ProductConfiguration],
        displayStatus: [DisplayStatus],
        notForDistribution: String, notForDistributionIn: [String!],
        deletions: [String!],
    ): ProductSearchResults
    allProductsSearchMultiLabel(
        term: String
        status: [String!]
        queryType: AllProductSearchQueryType
        sortField: String
        sortDir: SortDir
        limit: Int! = 10
        offset: Int! = 0
        deletions: [String!]
    ): ProductSearchResults! @deprecated(reason: "Temporary for use with Insights only. See IN-14591")

    # new opensearch based Product searches. This is to replace ows-search>WORKSTATION_PRODUCT, INSIGHTS_PRODUCT and abacus context.
    searchProducts(
        filters: ProductSearchFilters
        limit: Int! = 10
        offset: Int! = 0
        queryType: AllProductSearchQueryType
        searchContext: ProductSearchContext!
        sortDir: SortDir
        sortField: String
        term: String
    ): ProductSearchResultsV2!

    # new opensearch based Product searches that returns facets/aggregations and highlighted terms in search result. Used by OA. This is to replace ows-search>OA_RELEASE context.
    searchProductsWithFacets(
        filters: ProductSearchFilters
        limit: Int! = 10
        offset: Int! = 0
        queryType: AllProductSearchQueryType
        sortDir: SortDir
        sortField: String
        term: String
    ): ProductSearchResultWithFacets!

    # new opensearch based DimRelease search. This is to replace ows-search>WORKSTATION_ANALYTICS_PRODUCT context.
    searchDimRelease(
        filters: DimReleaseSearchFilters
        limit: Int! = 10
        offset: Int! = 0
        searchContext: DimReleaseSearchContext!
        sortDir: SortDir
        sortField: String
        term: String
    ): ProductSearchResultWithHighlights!

    # new opensearch based ETL_TRACK search. This will replace CloudSearch based trackSearch query.
    searchTrack(
        filters: SearchTrackFilters
        term: String!,
        limit: Int,
        offset: Int,
        searchContext: SearchTrackContext!
        sortDir: SortDir
        sortField: String
    ): TrackSearchResults!

    # new opensearch based ETL_PROJECT search. This will replace CloudSearch based project search in ows-search query. This was never in graphql.
    searchProject(
        filters: SearchProjectFilters,
        term: String!,
        limit: Int,
        offset: Int,
        sortDir: SortDir,
        sortField: String,
        # for now there is no searchContext as only WORKSTATION_PROJECT is in use. Confirming about PUBLIC_PROJECT.
    ): ProjectSearchResults!


    trackSearch(
        term: String!, limit: Int, offset: Int, trackType: String, labelIds: [Int!]
    ): TrackSearchResults!
    product(productId: String!, cached: Boolean): Product
    project(projectId: ID!): Project
    recentPlacements(
        limit: Int, offset: Int, storeIds: [Int!], ownerCategories: [OwnerCategory!], minFollowers: Int, labelIds: [Int!], subaccountIds: [Int!]
    ): PlaylistPlacements!
    catalogPlaylistPlacements(
        limit: Int,
        offset: Int,
        storeIds: [Int!],
        playlistTypes: [PlaylistType!],
        distributors: [Distributor!],
        minFollowers: Int,
        labelIds: [Int!],
        subaccountIds: [Int!]
        globalParticipantIds: [String!]
        order: PlaylistPlacementsOrderInput! = { by: LAST_ADDED_ON_DATE, dir: DESC }
        curatorCountries: [String!],
        storefrontEnabled: Boolean
    ): PlaylistPlacements!

    """
    This field is deprecated and the only consumer is the mobile app.
    TODO: completely remove this field once the mobile app usage stops
    """
    search(term: String, limit: Int, offset: Int): SearchResults! @deprecated(reason: "Use allProductsSearch")
    deliveryLinks(productId: Int): ProductDelivery
    topSoundRecordings(metadataSource: String, limit: Int, offset: Int, countries: [String!], orderBy: String): [SoundRecording] @deprecated(reason: "Use topGlobalSoundRecordings.")
    topGlobalSoundRecordings(
        limit: Int,
        offset: Int,
        storeIds: [Int],
        countries: [String!],
        labelIds: [Int!],
        subaccountIds: [Int!],
        artistIds: [ID!],
        globalParticipantIds: [ID!],
        upc: String,
        orderBy: String,
        companyBrand: String,
        parentCompanyId: String,
        serviceTier: String,
        orderDir: String,
        distributors: String,
        brandsFilter: CompanyBrandsFilterInput
    ): [GlobalSoundRecording!]!
    topGlobalSoundRecordingsTiktok(
        limit: Int,
        offset: Int,
        storeIds: [Int],
        countries: [String!],
        labelIds: [Int!],
        subaccountIds: [Int!],
        artistIds: [ID!],
        globalParticipantIds: [ID!],
        upc: String,
        orderBy: String,
        companyBrand: String,
        parentCompanyId: String,
        serviceTier: String,
        orderDir: String,
        distributors: String,
        isrcCountries: [String!],
        releasePeriodStart: String,
        releasePeriodEnd: String,
        onlyDailyData:Boolean,
        onlyWeeklyData:Boolean,
        tiktokCreationsChangeThreshold: Int,
        activeStreamsChangeThreshold: Int,
        labelManagerId: Int
    ): [GlobalSoundRecording!]!
    topProductResults(
        limit: Int
        offset: Int
        countries: [String!]
        labelIds: [Int!]
        subaccountIds: [Int!]
        """
        Financial label IDs to filter results. Usually, each account (label) has corresponding financial label ID.
        For RCA Records this is E009.
        """
        finLabelIds: [String!]
        upperProfitCenters: [UpperProfitCenter!]
        globalParticipantIds: [ID!]
        companyBrand: String
        parentCompanyId: String
        serviceTier: String
        orderBy: String
        orderDir: String
        distributors: String
        multiProduct: Boolean
        brandsFilter: CompanyBrandsFilterInput
    ): ProductResults!
    topGlobalParticipantsResults(
        limit: Int
        offset: Int
        storeIds: [Int]
        countries: [String!]
        labelIds: [Int!]
        subaccountIds: [Int!]
        """
        Financial label IDs to filter results. Usually, each account (label) has corresponding financial label ID.
        For RCA Records this is E009.
        """
        finLabelIds: [String!]
        upperProfitCenters: [UpperProfitCenter!]
        globalParticipantIds: [ID!]
        orderBy: String
        orderDir: String
        distributors: String
        serviceTier: String
        companyBrand: String
        parentCompany: String
        brandsFilter: CompanyBrandsFilterInput
    ): GlobalParticipantResults!
    topChannels(limit: Int, offset: Int, storeIds: [Int], countries: [String!], labelIds: [Int!], subaccountIds: [Int!], globalParticipantIds: [ID!], orderBy: String, orderDir: String, distributors: String): ChannelResults!
    topVideos(
        limit: Int
        offset: Int
        storeIds: [Int]
        countries: [String!]
        labelIds: [Int!]
        subaccountIds: [Int!]
        globalParticipantIds: [ID!]
        channelIds: [String!]
        """
        Value to filter by the VideoResults. Defaults to [VIDEO]. Applicable when filter by labelIds, subaccountIds or artist_ids are applied.
        """
        trackTypes: [TrackType!]! = []
        orderBy: String
        orderDir: String
        distributors: String): VideoResults!
    ugcVideos(limit: Int, offset: Int, storeIds: [Int], trackIds: [Int!], assetIds: [String!], videoIds: [String!], trackIsrcs: [String!], countries: [String!], claimTypes: [String!], claimStatuses: [String!], orderBy: String, orderDir: String, distributors: String): UgcVideoMetricsResults!
    recommendedGlobalSoundRecordings: [GlobalSoundRecording!]!
    recommendedLabels(sortDir: SortDir, sortField: String): [Label!]!
    recommendedGlobalProducts: [GlobalProduct!]!
    totalCatalogSongs: MetricMetadata
    artist(artistId: Int!): Artist
    filterArtists(artistName: String, artistId: Int, vendorId: Int): [Artist]
    participant(id: ID!, global: Boolean): Participant! @deprecated(reason: "Use `Query.globalParticipantByGpId` or `Query.labelParticipantByUuid`")
    recommendedParticipants: [Participant]!
    projectByProjectCode(
        projectCode: String!
        accountId: Int!
        subaccountId: Int
    ): Project
    participantServiceSearch(
        service: ParticipantServiceType!
        query: String!
        limit: Int
        offset: Int
        localization: String
    ): ParticipantServiceSearchResult
    participantServiceArtist(
        service: ParticipantServiceType!
        identifier: String!
    ): ServiceArtist
    getAvailableVideoChannelsByProductId(
        productId: Int!
    ): [VideoChannel]
    getAvailableVideoChannelsByProjectId(
        projectId: Int!,
        accountId: Int,
        subaccountId: Int
    ): [VideoChannel]
    starredParticipants: [Participant!]!
    starredGlobalParticipants(limit: Int, offset: Int): [GlobalParticipant!]!
    starredLabels(autoFollow: Boolean, sortDir: SortDir, sortField: String): [Label!]!
    starredSoundRecordings(limit: Int, offset: Int): [GlobalSoundRecording!]!
    starredVideoRecordings(limit: Int, offset: Int): [GlobalSoundRecording!]!
    starredChannels(limit: Int, offset: Int): [Channel!]!
    starredGlobalProducts(limit: Int, offset: Int): [GlobalProduct!]!
    track(tuid: ID!): Track
    tracks(tuids: [ID!]): [Track]
    notificationSettings: [NotificationSettings!]!
    playlistPlacement(
        isrc: ID!,
        playlistId: ID!,
        storeId: Int,
        storefront: String,
        streamCountries: [String!],
        distributors: [String!]
    ): PlaylistPlacement
    productByUpc(upc: String!): Product
    productByUpcs(upcs: [String!]!): [Product!]!
    productByProductCode(productCode: String!, accountType: String!, accountUuid: ID!): Product
    health: Health
    analyticsDataAvailability: AnalyticsDataAvailability!
    """Retrieves an Asset status from ows-assets V2"""
    assetStatus(filename: String!): AssetStatus
    assetsV2AssetFinal(filename: String!): AssetsV2AssetFinal!
    """Retrieves all Track Asset statuses for a given Product from ows-assets"""
    productTrackAssets(productId: ID!, useV2: Boolean): ProductTrackAssetsResult
    orchardLabelsByTopGross: [Label!]!
    territories(filter: TerritoryFilterInput, standard: TerritoryStandard!): [Territory!]!
    getVideoWorkflowJobDetails(input: Int!): VideoIngestWorkflow!
    getProductMarketingProgramInfoByProgram(productId: Int!, programId: MarketingProgram!): Product!
    genres(input: RetrieveGenreInput!): [Genre!]!
    playlistPlacementPositionTimeseries(
        isrc: String!,
        playlistId: String!,
        storeId: Int,
        storefront: String,
        startDate: String,
        days: Int,
        endDate: String
    ): TimeseriesPlaylistPlacementPositions
    playlistPlacementStreamsTimeseries(
        isrc: String!,
        playlistId: String!,
        storeId: Int,
        storefront: String,
        startDate: String,
        days: Int,
        endDate: String,
        streamCountries: [String!]
    ): TimeseriesPlaylistPlacementStreams
    orchardPricingFamily(pricingFamilies: [PricingFamily!]): [OrchardPricingFamily!]!
    playlistDeprecated(playlistId: ID!): Playlist @deprecated(reason: "This is an interim solution to provide playlist metadata in OrchardGo until the new playlisting model is fully supported")
    isrc(isrc: String!): Isrc
    metaLanguages: [Language!]!
    audioAttributes: [AudioAttribute!]!
    rightsAttributes: [RightsAttribute!]!
}
