Search Storyblok's Documentation
  1. Filtering Stories by Defining a Value Range

Filtering Stories by Defining a Value Range

In a common shop content structure implementation, a simple price range products filter is often necessary. A single filter_query can be crafted to retrieve products that exceed or fall below a specified price point. In this scenario, the gt_float and lt_float filters are combined to obtain all products within a given price range.

Example Request and Response

The following example demonstrates how to receive products (stories of that story type) with a price value between 100 and 300.

Request
curl "https://api.storyblok.com/v2/cdn/stories/?starts_with=products/&filter_query[price][lt_float]=300&filter_query[price][gt_float]=100" \
  -X GET \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
Request
// Using the Universal JavaScript Client:
// https://github.com/storyblok/storyblok-js-client
Storyblok.get('cdn/stories/', {
  "filter_query": {
    "price": {
      "lt_float": "300",
      "gt_float": "100"
    }
  }
})
  .then(response => {
    console.log(response)
  }).catch(error => { 
    console.log(error)
  })
Request
$client = new \Storyblok\Client('YOUR_STORYBLOK_SPACE_ACCESS_TOKEN');

$client->getStories([
  "filter_query" =>  [
    "price" =>  [
      "lt_float" =>  "300",
      "gt_float" =>  "100"
    ]
  ]
])->getBody();
Request
require 'storyblok'
client = Storyblok::Client.new(oauth_token: 'YOUR_OAUTH_TOKEN')

client.stories({:params => {
  "filter_query" =>  {
    "price" =>  {
      "lt_float" =>  "300",
      "gt_float" =>  "100"
    }
  }
}})
Request
HttpResponse<String> response = Unirest.get("https://api.storyblok.com/v2/cdn/stories/?starts_with=products/&filter_query[price][lt_float]=300&filter_query[price][gt_float]=100")
  .asString();
Request
var client = new RestClient("https://api.storyblok.com/v2/cdn/stories/?starts_with=products/&filter_query[price][lt_float]=300&filter_query[price][gt_float]=100");
var request = new RestRequest(Method.GET);

IRestResponse response = client.Execute(request);
Request
import Foundation

let request = NSMutableURLRequest(url: NSURL(string: "https://api.storyblok.com/v2/cdn/stories/?starts_with=products/&filter_query[price][lt_float]=300&filter_query[price][gt_float]=100")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
request.method = "GET"

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
Request
import requests

url = "https://api.storyblok.com/v2/cdn/stories/"

querystring = {"filter_query":{"price":{"lt_float":"300","gt_float":"100"}}}

payload = ""
headers = {}

response = requests.request("GET", url, data=payload, headers=headers, params=querystring)

print(response.text)
Response
{
  "stories": [
    {
      "name": "Product A",
      "created_at": "2024-03-07T15:42:27.967Z",
      "published_at": "2024-03-07T15:59:58.325Z",
      "id": 457608234,
      "uuid": "43a86f66-0b12-4653-9ed9-6dbceb85cb60",
      "content": {
        "_uid": "2fe813f5-e86a-4f56-a4ea-e9a9bfdc354c",
        "image": {
          "id": null,
          "alt": null,
          "name": "",
          "focus": null,
          "title": null,
          "source": null,
          "filename": "",
          "copyright": null,
          "fieldtype": "asset",
          "meta_data": {}
        },
        "price": "239.99",
        "component": "product"
      },
      "slug": "product-a",
      "full_slug": "products/product-a",
      "sort_by_date": null,
      "position": 0,
      "tag_list": ["Product Tag"],
      "is_startpage": false,
      "parent_id": 457608232,
      "meta_data": null,
      "group_id": "7eb7a5f8-8d0b-4c4c-9404-262f7d09f910",
      "first_published_at": "2024-03-07T15:42:52.308Z",
      "release_id": null,
      "lang": "default",
      "path": null,
      "alternates": [],
      "default_full_slug": null,
      "translated_slugs": null
    }
  ],
  "cv": 1711108220,
  "rels": [],
  "links": []
}