Skip to main content

Filtering and pagination

Most list queries in the WikiParfum API support a shared set of filtering, pagination, and sorting parameters. Understanding these patterns lets you build precise, performant queries across perfumes, ingredients, brands, and recommendations.

Pagination

Pagination uses an offset-based pattern via the page parameter, formatted as a string: "offset,limit".
query PaginatedPerfumes {
  findPerfumes(search: {
    lang: "EN"
    page: "0,20"
  }) {
    id
    name
  }
}
ExampleMeaning
"0,20"First 20 results
"20,20"Results 21–40
"40,10"Results 41–50
The offset is zero-based. The first value is the starting position, the second is the number of results to return.

Sorting

Use the order_by parameter to control result ordering. The format is "field direction".
query SortedPerfumes {
  findPerfumes(search: {
    lang: "EN"
    page: "0,20"
    order_by: "name asc"
  }) {
    id
    name
  }
}
Common sort options:
ValueDescription
"name asc"Alphabetical A–Z
"name desc"Alphabetical Z–A
"year desc"Newest first
"year asc"Oldest first
"price-asc"By market segment: mass → prestige → niche
"price-desc"By market segment: niche → prestige → mass
"customerPrice-asc"By customer price: lowest first
"customerPrice-desc"By customer price: highest first
"popularity"Most popular first (based on previous month’s traffic)
The price-asc and price-desc options sort by market classification (mass, prestige, niche) as a proxy for price tier, not by actual product price. Perfumes without a classification are placed last in ascending order and first in descending order.
The customerPrice-asc and customerPrice-desc options sort by your catalog’s actual product prices. Perfumes without a price in your catalog are placed last.Requirements:
  • Your Product Feed must include the price column.
  • Use a dot (.) as the decimal separator (e.g., 29.99). Comma-separated values (e.g., 29,99) will be converted automatically, but using dot format is recommended to avoid potential issues.
  • If a perfume has multiple EANs with different prices, the lowest price is used for sorting.
The popularity option ranks perfumes by their global view count from the previous calendar month across WikiParfum and the WikiParfum app. Perfumes without traffic data are placed at the end.

The Filters input

The Filters input type is shared across perfume, ingredient, brand, and recommendation queries. It provides fine-grained control over which results are returned.

Gender

Filter by target gender.
query FemalePerfumes {
  findPerfumes(search: {
    lang: "EN"
    page: "0,20"
    filters: {
      gender: "F"
    }
  }) {
    id
    name
    gender
  }
}
ValueMeaning
"F"Feminine
"M"Masculine
"U"Unisex

Brand

Filter by brand slug or brand IDs.
query PerfumesByBrandSlug {
  findPerfumes(search: {
    lang: "EN"
    page: "0,20"
    filters: {
      brand: "chanel"
    }
  }) {
    id
    name
  }
}
Use brandsIds for multiple brands: brandsIds: "42,87,103". Use excludedBrandsIds to exclude specific brands: excludedBrandsIds: "55,60".

Olfactive family

Filter by primary family, secondary family, or both.
query WoodyPerfumes {
  findPerfumes(search: {
    lang: "EN"
    page: "0,20"
    filters: {
      family: "woody"
    }
  }) {
    id
    name
    family {
      name
    }
  }
}
FilterDescription
familyPrimary family slug
mainfamilyAlias for primary family slug
subfamilySecondary family slug
mainFamilyIdsPrimary family IDs (comma-separated)
subFamilyIdsSecondary family IDs (comma-separated)
familiesIdsCombined primary + secondary family IDs

Market classification

filters: {
  classification: "prestige"
}
ValueMeaning
"prestige"Prestige / luxury segment
"mass"Mass market segment

Intensity range

Filter by olfactive intensity using a min/max range.
filters: {
  intensity: "3,7"
}

Customer price range

Filter by your catalog’s product prices using a min/max range.
filters: {
  customerPriceRange: "10,100"
}
The format is "min,max" where both values are numeric. Perfumes without a price in your catalog are excluded from the results when this filter is applied.
This filter requires the price column in your Product Feed. If a perfume has multiple EANs with different prices, the perfume is included if any of its EANs falls within the specified range.

Discontinued products

filters: {
  discontinued: "no"
}
ValueMeaning
"yes"Only discontinued perfumes
"no"Only active perfumes

Release date

Filter by release year or year-month.
filters: {
  releaseDate: ["2023", "2024"]
}

Region and country

Restrict results to perfumes available in specific regions or countries.
filters: {
  regions: ["EU"]
  countries: ["FR", "ES"]
}

Additional filters

FilterTypeDescription
withImageBooleanOnly return perfumes with images
popularBooleanOnly popular perfumes
onlyReleasedBooleanOnly released perfumes
showVariantBooleanInclude variant products
fragranceTypeStringFilter by fragrance type (e.g., EDP, EDT)

Combining filters

Filters can be combined freely. All active filters are applied with AND logic.
query CombinedFilters {
  findPerfumes(search: {
    lang: "EN"
    page: "0,20"
    order_by: "year desc"
    filters: {
      gender: "F"
      classification: "prestige"
      family: "floral"
      discontinued: "no"
      withImage: true
    }
  }) {
    id
    name
    brand {
      name
    }
    family {
      name
    }
    year
    gender
  }
}