not_in
Filter stories by checking if a field does not match any of the specified values.
Examples Use Cases
Section titled “Examples Use Cases”filter_query[categories][not_in]=space-exploration,culture
Returns all stories without categories space-exploration AND culture
filter_query[categories][not_in]=space-exploration,history,tech
Returns all stories without categories space-exploration AND history AND tech
filter_query[topics][not_in]=physics,ai,space
Returns all stories without topics physics AND ai AND space
Example Request and Response
Section titled “Example Request and Response”The following example demonstrates how to receive all stories without the topics Design or Finance using the not_in operation.
curl "https://api.storyblok.com/v2/cdn/stories\?filter_query%5Btopics%5D%5Bnot_in%5D=Design%2CFinance\&token=ask9soUkv02QqbZgmZdeDAtt"// storyblok-js-client@>=7, node@>=18import Storyblok from "storyblok-js-client";
const storyblok = new Storyblok({ accessToken: "ask9soUkv02QqbZgmZdeDAtt",});
try { const response = await storyblok.get('cdn/stories', { "filter_query[topics][not_in]": "Design,Finance" }) console.log({ response })} catch (error) { console.log(error)}$client = new \Storyblok\Client('YOUR_STORYBLOK_SPACE_ACCESS_TOKEN');
$client->getStories([ "filter_query[topics][not_in]" => "Design,Finance"])->getBody();HttpResponse<String> response = Unirest.get("https://api.storyblok.com/v2/cdn/stories?filter_query%5Btopics%5D%5Bnot_in%5D=Design%2CFinance&token=ask9soUkv02QqbZgmZdeDAtt") .asString();var client = new RestClient("https://api.storyblok.com/v2/cdn/stories?filter_query%5Btopics%5D%5Bnot_in%5D=Design%2CFinance&token=ask9soUkv02QqbZgmZdeDAtt");var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);import requests
url = "https://api.storyblok.com/v2/cdn/stories"
querystring = {"filter_query[topics][not_in]":"Design,Finance","token":"ask9soUkv02QqbZgmZdeDAtt"}
payload = ""headers = {}
response = requests.request("GET", url, data=payload, headers=headers, params=querystring)
print(response.text)require 'storyblok'client = Storyblok::Client.new(token: 'YOUR_TOKEN')
client.stories({:params => { "filter_query[topics][not_in]" => "Design,Finance"}})// .package(url: "https://github.com/storyblok/storyblok-swift.git", from: "1.1.0")// Requires a `Block` content model — see https://www.storyblok.com/docs/quickstarts/apple-platforms/content-modelinglet client = StoryblokClient( library: Block.self, accessToken: "ask9soUkv02QqbZgmZdeDAtt", version: .published, region: .eu)
let stories: Page<Story<Block.Post>>? = try await client .stories { @Sendable (query: inout StoriesQuery<Block.Post>) in query.filter { $0.topics.notIn(["Design", "Finance"]) } } .last() .values .first { @Sendable _ in true }
print(stories!)// implementation("com.storyblok:content-api-client:0.7.1")// Requires a `Post` component model — see https://www.storyblok.com/docs/quickstarts/android/content-modelingval client = StoryblokClient( accessToken = "ask9soUkv02QqbZgmZdeDAtt", version = Published,)
val stories = client .stories<Post> { filter { Post::topics notIn listOf("Design", "Finance") } } .flow .asItemSnapshotListFlow() .first()
println(stories){ "stories": [ { "name": "My second post", "created_at": "2018-04-24T11:57:29.283Z", "published_at": "2026-10-08T12:40:20.406Z", "updated_at": "2026-10-08T12:40:20.419Z", "id": 107349, "uuid": "a91440ee-fd57-4ee3-83cf-d49d217ae919", "content": { "_uid": "98cccd01-f807-4494-996d-c6b0de2045a5", "image": "//a.storyblok.com/f/44162/1500x500/68b522b06d/1500x500.jpeg", "title": "My second title", "author": "22f4fb1b-50b3-4bf2-816e-7d589e307421", "topics": "Tech", "content": "Lorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\ntempor incididunt ut **labore et dolore magna aliqua**. Ut enim ad minim veniam,\nquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\nconsequat. ***Duis aute irure dolor*** in reprehenderit in voluptate velit esse\ncillum dolore eu fugiat nulla pariatur. ~~Excepteur sint occaecat~~ cupidatat non\nproident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\n## H2\n\nLorem ipsum dolor sit amet, *consectetur* adipisicing elit, sed do eiusmod\ntempor incididunt ut **labore et dolore magna aliqua**. Ut enim ad minim veniam,\nquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\nconsequat. \n\n---\n\n***Duis aute irure dolor*** in reprehenderit in voluptate velit esse\ncillum dolore eu fugiat nulla pariatur. ~~Excepteur sint occaecat~~ cupidatat non\nproident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\n### H3\n\nunordered list:\n\n* item-1\n * sub-item-1\n * sub-item-2\n- item-2\n - sub-item-3\n - sub-item-4\n+ item-3\n + sub-item-5\n + sub-item-6\n\n\nordered list:\n\n1. item-1\n 1. sub-item-1\n 2. sub-item-2\n2. item-2\n 1. sub-item-3\n 2. sub-item-4\n3. item-3\n\n#### Header4\n\nTable Header-1 | Table Header-2 | Table Header-3\n:--- | :---: | ---:\nTable Data-1 | Table Data-2 | Table Data-3\nTD-4 | Td-5 | TD-6\nTable Data-7 | Table Data-8 | Table Data-9\n\n##### Header5\n\nYou may also want some images right in here like  - you can do that but I would recommend you to use the component \"image\" and simply split your text.\n\n###### Header6\n\nLet us do some links - this for example: https://github.com/MinhasKamal/github-markdown-syntax is **NOT** a link but this is [GitHub](https://github.com/MinhasKamal/github-markdown-syntax)", "schedule": "2026-10-13 22:00", "component": "post", "categories": [ "5db2e929-6d3d-4564-982e-fa8513b0e5de" ], "description": "Description of the second" }, "slug": "my-second-post", "full_slug": "posts/my-second-post", "sort_by_date": null, "position": -10, "tag_list": [], "is_startpage": false, "parent_id": 107348, "meta_data": null, "group_id": "854c3d1f-5d7f-4785-92ee-620a7c6ca7ee", "first_published_at": "2018-07-26T12:38:17.000Z", "release_id": null, "lang": "default", "path": null, "alternates": [], "default_full_slug": null, "translated_slugs": null } ], "cv": 1791799432, "rels": [], "links": []}Was this page helpful?
This site uses reCAPTCHA and Google's Privacy Policy (opens in a new window).Terms of Service (opens in a new window) apply.
Get in touch with the Storyblok community