[{"data":1,"prerenderedAt":434},["ShallowReactive",2],{"footer-primary":3,"footer-secondary":93,"footer-description":119,"short-hops-version-control":121,"short-hops-version-control-next":167,"sales-reps":182},{"items":4},[5,29,49,69],{"id":6,"title":7,"url":8,"page":8,"children":9},"522e608a-77b0-4333-820d-d4f44be2ade1","Solutions",null,[10,15,20,25],{"id":11,"title":12,"url":8,"page":13},"fcafe85a-a798-4710-9e7a-776fe413aae5","Headless CMS",{"permalink":14},"/solutions/headless-cms",{"id":16,"title":17,"url":8,"page":18},"79972923-93cf-4777-9e32-5c9b0315fc10","Backend-as-a-Service",{"permalink":19},"/solutions/backend-as-a-service",{"id":21,"title":22,"url":8,"page":23},"0fa8d0c1-7b64-4f6f-939d-d7fdb99fc407","Product Information",{"permalink":24},"/solutions/product-information-management",{"id":26,"title":27,"url":28,"page":8},"63946d54-6052-4780-8ff4-91f5a9931dcc","100+ Things to Build","https://directus.io/blog/100-tools-apps-and-platforms-you-can-build-with-directus",{"id":30,"title":31,"url":8,"page":8,"children":32},"8ab4f9b1-f3e2-44d6-919b-011d91fe072f","Resources",[33,37,41,45],{"id":34,"title":35,"url":36,"page":8},"f951fb84-8777-4b84-9e91-996fe9d25483","Documentation","https://docs.directus.io",{"id":38,"title":39,"url":40,"page":8},"366febc7-a538-4c08-a326-e6204957f1e3","Guides","https://docs.directus.io/guides/",{"id":42,"title":43,"url":44,"page":8},"aeb9128e-1c5f-417f-863c-2449416433cd","Community","https://directus.chat",{"id":46,"title":47,"url":48,"page":8},"da1c2ed8-0a77-49b0-a903-49c56cb07de5","Release Notes","https://github.com/directus/directus/releases",{"id":50,"title":51,"url":8,"page":8,"children":52},"d61fae8c-7502-494a-822f-19ecff3d0256","Support",[53,57,61,65],{"id":54,"title":55,"url":56,"page":8},"8c43c781-7ebd-475f-a931-747e293c0a88","Issue Tracker","https://github.com/directus/directus/issues",{"id":58,"title":59,"url":60,"page":8},"d77bb78e-cf7b-4e01-932a-514414ba49d3","Feature Requests","https://github.com/directus/directus/discussions?discussions_q=is:open+sort:top",{"id":62,"title":63,"url":64,"page":8},"4346be2b-2c53-476e-b53b-becacec626a6","Community Chat","https://discord.com/channels/725371605378924594/741317677397704757",{"id":66,"title":67,"url":68,"page":8},"26c115d2-49f7-4edc-935e-d37d427fb89d","Cloud Dashboard","https://directus.cloud",{"id":70,"title":71,"url":8,"page":8,"children":72},"49141403-4f20-44ac-8453-25ace1265812","Organization",[73,78,84,88],{"id":74,"title":75,"url":76,"page":77},"1f36ea92-8a5e-47c8-914c-9822a8b9538a","About","/about",{"permalink":76},{"id":79,"title":80,"url":81,"page":82},"b84bf525-5471-4b14-a93c-225f6c386005","Careers","#",{"permalink":83},"/careers",{"id":85,"title":86,"url":87,"page":8},"86aabc3a-433d-434b-9efa-ad1d34be0a34","Brand Assets","https://drive.google.com/drive/folders/1lBOTba4RaA5ikqOn8Ewo4RYzD0XcymG9?usp=sharing",{"id":89,"title":90,"url":8,"page":91},"8d2fa1e3-198e-4405-81e1-2ceb858bc237","Contact",{"permalink":92},"/contact",{"items":94},[95,101,107,113],{"id":96,"title":97,"url":8,"page":98,"children":100},"8a1b7bfa-429d-4ffc-a650-2a5fdcf356da","Cloud Policies",{"permalink":99},"/cloud-policies",[],{"id":102,"title":103,"url":81,"page":104,"children":106},"bea848ef-828f-4306-8017-6b00ec5d4a0c","License",{"permalink":105},"/bsl",[],{"id":108,"title":109,"url":81,"page":110,"children":112},"4e914f47-4bee-42b7-b445-3119ee4196ef","Terms",{"permalink":111},"/terms",[],{"id":114,"title":115,"url":81,"page":116,"children":118},"ea69eda6-d317-4981-8421-fcabb1826bfd","Privacy",{"permalink":117},"/privacy",[],{"description":120},"\u003Cp>A composable backend to build your Headless CMS, BaaS, and more.&nbsp;\u003C/p>",{"id":122,"slug":123,"vimeo_id":124,"description":125,"tile":126,"length":127,"resources":8,"people":8,"episode_number":128,"published":129,"title":130,"video_transcript_html":131,"video_transcript_text":132,"content":133,"status":134,"episode_people":135,"recommendations":150,"season":151,"seo":166},"0bfed0fe-2c73-4528-8a6a-d3b39b4c0528","version-control","983671293","Learn how to make stress-free edits to published content without affecting the live version. Bryant walks you through how to enable content versioning in Directus and how to create and manage different versions of content.","54340f51-3329-4209-8cae-5589ac7d6f33",5,7,"2024-07-26","Version Control","\u003Cp>Speaker 0: Alright. And welcome back to another episode of Short Hops. I'm your host, Brian Gillespie. In this episode, we are gonna cover content versioning. So what is content versioning?\u003C/p>\u003Cp>Basically it allows you to do stress free editing on articles or content or pages, whatever you're serving up, that you've already published. Right? We've all been through it. Hey, we need to make some edits to a page. I need to be able to save those edits, but I don't wanna push those live until we get approval or we've had time to vet them out.\u003C/p>\u003Cp>So content versioning allows you to basically make changes and edits without affecting the published version of a piece of content. Now how do we set that up? Right? I am in a sample Directus instance. This is one of my blog posts, a very nice piece by mister Carrot Gillespie, about steampunk rabbits and why they are the future of work.\u003C/p>\u003Cp>So I've got some edits that I wanna make to this, but this is already published. So any edits that I make, if I save, could potentially show up live on our site. So content versioning to the rescue. How do we enable this? We go to our settings.\u003C/p>\u003Cp>We go to the collection we would like to enable versioning for. And we'll go down to the settings for this and we'll find the content versioning header. We'll check the box. I'm sure you know what that will do. And now we'll go back to our post.\u003C/p>\u003Cp>So at the top we can see now we have this little badge for main. So that is the main piece of content. That's the the main version that we are going to publish. So if I wanna make some changes here, I could just go and create a new version. This is, BG edits, And the key is important here.\u003C/p>\u003Cp>We'll just call this Bryant's edits. Great. I've created that new version. Now I could go in and make all the changes I want here. This looks pretty good.\u003C/p>\u003Cp>Okay. So what I can do now is save this version and I've got 2 versions here. I can see Bryant's edits. I could potentially, you know, send this to somebody on our team, ask them to review it. And then once I am ready to promote or publish this version, we've got a a function here called promote version.\u003C/p>\u003Cp>So basically I'm gonna click promote version. This will then show me a difference between what is published and what is the, the edits that I'm making. And here I can confirm which version should be used for each of these individual fields. So if I don't want to overwrite the summary, I can, you know, use whatever is in the the main version here. Or likewise, in this case, I want to overwrite everything entirely.\u003C/p>\u003Cp>I'll hit this and I've got the option to keep or delete. I could, keep this change, and now those changes that I make are now published in the main content version. Now when I'm accessing versions via the API, especially on like a front end or something, let's say I'm trying to fetch this piece of content. So I'm just gonna go to items slash posts and I could see the post here. Right?\u003C/p>\u003Cp>If I were to go in and, you know, create a new version, let's just call it test version, and here's some more changes. We'll just save. Oh, actually, let's switch that. Here's the changes. And we'll save this version.\u003C/p>\u003Cp>So now I'm working on the test version. If I run that API call again, you could see I don't see those changes. Right? But if I am calling an individual piece of content, I can add a version param to this. So I could say version equals test, and I could see here's the changes that we have.\u003C/p>\u003Cp>Right? Great. So, that is content versioning. There's also a separate API endpoint for this as well if you wanna get all the individual content versions and it does support all the regular global parameters. So make sure you check out the documentation on this on how to leverage it further.\u003C/p>\u003Cp>That's it for this episode. We'll catch you on the next one.\u003C/p>","Alright. And welcome back to another episode of Short Hops. I'm your host, Brian Gillespie. In this episode, we are gonna cover content versioning. So what is content versioning? Basically it allows you to do stress free editing on articles or content or pages, whatever you're serving up, that you've already published. Right? We've all been through it. Hey, we need to make some edits to a page. I need to be able to save those edits, but I don't wanna push those live until we get approval or we've had time to vet them out. So content versioning allows you to basically make changes and edits without affecting the published version of a piece of content. Now how do we set that up? Right? I am in a sample Directus instance. This is one of my blog posts, a very nice piece by mister Carrot Gillespie, about steampunk rabbits and why they are the future of work. So I've got some edits that I wanna make to this, but this is already published. So any edits that I make, if I save, could potentially show up live on our site. So content versioning to the rescue. How do we enable this? We go to our settings. We go to the collection we would like to enable versioning for. And we'll go down to the settings for this and we'll find the content versioning header. We'll check the box. I'm sure you know what that will do. And now we'll go back to our post. So at the top we can see now we have this little badge for main. So that is the main piece of content. That's the the main version that we are going to publish. So if I wanna make some changes here, I could just go and create a new version. This is, BG edits, And the key is important here. We'll just call this Bryant's edits. Great. I've created that new version. Now I could go in and make all the changes I want here. This looks pretty good. Okay. So what I can do now is save this version and I've got 2 versions here. I can see Bryant's edits. I could potentially, you know, send this to somebody on our team, ask them to review it. And then once I am ready to promote or publish this version, we've got a a function here called promote version. So basically I'm gonna click promote version. This will then show me a difference between what is published and what is the, the edits that I'm making. And here I can confirm which version should be used for each of these individual fields. So if I don't want to overwrite the summary, I can, you know, use whatever is in the the main version here. Or likewise, in this case, I want to overwrite everything entirely. I'll hit this and I've got the option to keep or delete. I could, keep this change, and now those changes that I make are now published in the main content version. Now when I'm accessing versions via the API, especially on like a front end or something, let's say I'm trying to fetch this piece of content. So I'm just gonna go to items slash posts and I could see the post here. Right? If I were to go in and, you know, create a new version, let's just call it test version, and here's some more changes. We'll just save. Oh, actually, let's switch that. Here's the changes. And we'll save this version. So now I'm working on the test version. If I run that API call again, you could see I don't see those changes. Right? But if I am calling an individual piece of content, I can add a version param to this. So I could say version equals test, and I could see here's the changes that we have. Right? Great. So, that is content versioning. There's also a separate API endpoint for this as well if you wanna get all the individual content versions and it does support all the regular global parameters. So make sure you check out the documentation on this on how to leverage it further. That's it for this episode. We'll catch you on the next one.","\u003Cp>In this episode of Short Hops, host Bryant Gillespie explains content versioning in Directus. Learn how to make stress-free edits to published content without affecting the live version.\u003C/p>\n\u003Cp>Bryant walks you through:\u003C/p>\n\u003Cul>\n\u003Cli>What content versioning is and why it's useful\u003C/li>\n\u003Cli>How to enable content versioning in Directus\u003C/li>\n\u003Cli>Creating and managing different versions of content\u003C/li>\n\u003Cli>Promoting edited versions to replace the main published version\u003C/li>\n\u003Cli>Accessing specific versions via the API\u003C/li>\n\u003C/ul>\n\u003Cp>Perfect for content managers, developers, and anyone looking to streamline their content editing process. Discover how to make changes confidently and collaborate effectively using Directus's powerful versioning features.\u003C/p>","published",[136],{"people_id":137},{"id":138,"first_name":139,"last_name":140,"avatar":141,"bio":142,"links":143},"791e1503-1d88-463d-9347-0b9192933576","Bryant","Gillespie","9013afc8-e8d7-4182-9b18-44db08117bb9","Developer Advocate at Directus",[144,147],{"url":145,"service":146},"https://directus.io/team/bryant-gillespie","website",{"service":148,"url":149},"github","https://github.com/bryantgillespie",[],{"id":152,"number":153,"year":154,"episodes":155,"show":163},"a1886f5f-e5c4-4dd2-ac8a-d2e7c176f813",2,"2024",[156,157,158,159,160,161,122,162],"e82ffa88-91c1-4605-aefa-67bb8e20a9ed","1fb83779-28e9-4523-bcbc-57065d7177a1","f711e94f-14c1-48dd-b00c-70a340351412","fcb6f3f2-d6f3-4905-a3d9-b44aed7bb25c","2d192e76-378b-4540-9d41-2506460a50af","cc653542-7721-4b37-8978-60fee90081dc","0cbf2b23-545e-4ea7-ae45-47707292caec",{"title":164,"tile":165},"Short Hops","2166990a-8dbf-4956-8b25-11b72ad203d5",{"title":8,"meta_description":8},{"id":162,"slug":168,"season":152,"vimeo_id":169,"description":170,"tile":171,"length":172,"resources":8,"people":8,"episode_number":173,"published":129,"title":174,"video_transcript_html":175,"video_transcript_text":176,"content":177,"seo":178,"status":134,"episode_people":179,"recommendations":181},"complex-queries","983670600","Dive into the world of Directus REST API querying in this informative episode. Learn how to perform complex queries, filter results, and work with relational data using the Directus SDK. ","222a28d6-c2e4-43fc-a61f-dc57132bac26",9,8,"Complex Queries via API","\u003Cp>Speaker 0: Welcome back to yet another episode of Short Hops. I'm your host, Brian Gillespie. And today, I wanna cover, a tough topic for new comers to direct us, which can be setting up your queries via the REST API. So today we are going to query our hearts out, and kind of run through some complex queries more than just, yeah, you know, calling a standard endpoint, very simple. Alright.\u003C/p>\u003Cp>So, I've got a example project over here. I've got some pages that we're working with within a collection. And over here on the right, I've just set up a simple little node project and pulled in our SDK. If you are working with the Directus API, I highly recommend using the SDK, just because we've got some little convenience methods in here for you. It makes it much easier to work with your Directus API.\u003C/p>\u003Cp>So I have got, I've imported the create Directus function. We've got a a rest API, we're gonna read some items, so that's one of the methods we're gonna call. And then I'm just creating a client here, so the format's very simple. We pass the URL, we tag on, a rest function at the end, or with rest function at the end, and then we can call that client. So I'm just saying, hey, defining a constant.\u003C/p>\u003Cp>We'll await that request to pages, and I don't have anything in the filter here. I could actually comment this out if I wanted to. And then let's just run node index dotjs, and we could see I'm getting a bunch of pages here. So one of the first things that you might wanna do when working with the API, the REST API acts like GraphQL in that I can call the specific fields that I want. So I can add a parameter here for fields and we'll just say I want the ID, the title, and maybe the blocks for this specific page.\u003C/p>\u003Cp>So now if I call this again, we can see a Directus has given me just the information that I asked for. That's great. What if we wanted to filter this down though? Right? I'm getting a bunch of different pages.\u003C/p>\u003Cp>Some of these are published, some of them are not. Maybe we just wanna see only the published pages, right? So that's where our filter comes back in. And here, let's add a comma there. And now let's do a filter where the status, and we've got a couple of operators here.\u003C/p>\u003Cp>There's actually a lot of operators. You can find these on the documentation. And we want the status to be equal to published. Great. We can run that again.\u003C/p>\u003Cp>And now I shouldn't see, like, a test with new default because I'm seeing that over there. Great. Okay. I don't see that one in the list, But let's say I wanted to actually limit the number of results that I see, I could do something like this where I just add a limit parameter and we'll pass that too. And now I should only get back to pages.\u003C/p>\u003Cp>Right? So I see my home page. I'm getting the manifesto page here. And I can see the blocks. This is an ID.\u003C/p>\u003Cp>We'll go about fetching that in a moment. Now what if we have a more complex filter where we need to stack different conditions together? So for that, you have the and and or operators. So I could do something like this. And instead of an object, this is gonna be an array.\u003C/p>\u003Cp>So I'm gonna pass an array of objects like status is equal to published. Can I do formatting on this? I don't have Prettier or ESLint setup on this project. But So I want the status is equal to published and maybe the permalink let's just get the home page, right? So I'm gonna do equal to not home but slash because I can see that right here, this permalink.\u003C/p>\u003Cp>Great. And even though I've got a limit of 2, I should only get one back. Permalink is equal to, did I save that, or status is equal to publish. Oh, that's an or filter. So we want both of these conditions.\u003C/p>\u003Cp>Right? Let's do that. So we want to match both of those conditions. And now the only item I get back in my array of data is the home page. Great.\u003C/p>\u003Cp>So that's how we can stack filters together. Let's take this a step further and for our blocks, we want to get the content within those blocks. And, you can expand the relationships within a single API call within Directus which is again is super nice as well. So we'll do blocks, let's add, this is actually gonna be an object so we'll do blocks. We'll give it an array of fields that we want to give for the block.\u003C/p>\u003Cp>Let's get the block ID, maybe we want to get the collection for that block, This is set up using our many to any builder relationship and we'll do item dot star. So the star or asterisk is a wild card. That should return all the fields or all the root level fields for the item within the block. So let's run this and actually see what we get out of it. And now you can see I'm actually getting the data for my blocks.\u003C/p>\u003Cp>So I can see, you know, this is columns, we've got a title, we've got a headline, we've got the actual rows. So I could even drill further into those relationships via a single API call if I wanted. Now there's one other field that I want to pull within this and we'll do hide block. And do we have hide block? Okay.\u003C/p>\u003Cp>So now I've I've got this hide block on here. You know, within the page builder, maybe I wanna hide one of these individual blocks so that it doesn't show on a page. I can query that on my front end so that, you know, hey, we we don't have to remove this, maybe we want to show it at a later date, but I wanna hide this specific block and not render that when I consume that API on my front end. So how would I do something like that? This is a setup on the relational field, right?\u003C/p>\u003Cp>So at the top level here we can filter based on the pages, but there is a special parameter that you can use to filter the relational data in a single API call. So you'll see how powerful this is in just a moment. We'll go in and we'll do deep parameter. And we're going to look at our blocks. And now it's like we've got a whole another query within this, right?\u003C/p>\u003Cp>So I'm just going to preface this with a underscore or an underscore and we're gonna do a filter and now we are filtering on the block level. So the related blocks we wanna do hide block is equal to not equal to true. Alright so let's see what that returns. And I'm just gonna clear out my console here and I shouldn't see the first item as a quote because I have removed that or filtered it out. Forgot my comma at the end there.\u003C/p>\u003Cp>So we'll clear one more time, call this out. If I zoom back up to the top of this, you could see the first block in my array here is the form section. Right now if I go in and I just hide a lot of these blocks, right? I've hidden the first three blocks, the first section that I see in my API call should be this FAQ one. Let's clear this again.\u003C/p>\u003Cp>Just to make it easier we'll do node dot JS and, oh, I forgot to save the actual item over here. Let's try that one more time. Node. Js index dot JS, there we go. And now the first block that we see is the FAQ section.\u003C/p>\u003Cp>Right? If I wanted to see all the blocks that we hid, I could just change that to not equal to false or I could set it to equal to true, either way. But now I can see here's all the blocks that we hid within that specific page. So I hope this has been a great tutorial on just the sorts of things you could do with the, global parameters when you're calling the API. Stay tuned for more episodes of Short Hops.\u003C/p>\u003Cp>That's it. We'll see you.\u003C/p>","Welcome back to yet another episode of Short Hops. I'm your host, Brian Gillespie. And today, I wanna cover, a tough topic for new comers to direct us, which can be setting up your queries via the REST API. So today we are going to query our hearts out, and kind of run through some complex queries more than just, yeah, you know, calling a standard endpoint, very simple. Alright. So, I've got a example project over here. I've got some pages that we're working with within a collection. And over here on the right, I've just set up a simple little node project and pulled in our SDK. If you are working with the Directus API, I highly recommend using the SDK, just because we've got some little convenience methods in here for you. It makes it much easier to work with your Directus API. So I have got, I've imported the create Directus function. We've got a a rest API, we're gonna read some items, so that's one of the methods we're gonna call. And then I'm just creating a client here, so the format's very simple. We pass the URL, we tag on, a rest function at the end, or with rest function at the end, and then we can call that client. So I'm just saying, hey, defining a constant. We'll await that request to pages, and I don't have anything in the filter here. I could actually comment this out if I wanted to. And then let's just run node index dotjs, and we could see I'm getting a bunch of pages here. So one of the first things that you might wanna do when working with the API, the REST API acts like GraphQL in that I can call the specific fields that I want. So I can add a parameter here for fields and we'll just say I want the ID, the title, and maybe the blocks for this specific page. So now if I call this again, we can see a Directus has given me just the information that I asked for. That's great. What if we wanted to filter this down though? Right? I'm getting a bunch of different pages. Some of these are published, some of them are not. Maybe we just wanna see only the published pages, right? So that's where our filter comes back in. And here, let's add a comma there. And now let's do a filter where the status, and we've got a couple of operators here. There's actually a lot of operators. You can find these on the documentation. And we want the status to be equal to published. Great. We can run that again. And now I shouldn't see, like, a test with new default because I'm seeing that over there. Great. Okay. I don't see that one in the list, But let's say I wanted to actually limit the number of results that I see, I could do something like this where I just add a limit parameter and we'll pass that too. And now I should only get back to pages. Right? So I see my home page. I'm getting the manifesto page here. And I can see the blocks. This is an ID. We'll go about fetching that in a moment. Now what if we have a more complex filter where we need to stack different conditions together? So for that, you have the and and or operators. So I could do something like this. And instead of an object, this is gonna be an array. So I'm gonna pass an array of objects like status is equal to published. Can I do formatting on this? I don't have Prettier or ESLint setup on this project. But So I want the status is equal to published and maybe the permalink let's just get the home page, right? So I'm gonna do equal to not home but slash because I can see that right here, this permalink. Great. And even though I've got a limit of 2, I should only get one back. Permalink is equal to, did I save that, or status is equal to publish. Oh, that's an or filter. So we want both of these conditions. Right? Let's do that. So we want to match both of those conditions. And now the only item I get back in my array of data is the home page. Great. So that's how we can stack filters together. Let's take this a step further and for our blocks, we want to get the content within those blocks. And, you can expand the relationships within a single API call within Directus which is again is super nice as well. So we'll do blocks, let's add, this is actually gonna be an object so we'll do blocks. We'll give it an array of fields that we want to give for the block. Let's get the block ID, maybe we want to get the collection for that block, This is set up using our many to any builder relationship and we'll do item dot star. So the star or asterisk is a wild card. That should return all the fields or all the root level fields for the item within the block. So let's run this and actually see what we get out of it. And now you can see I'm actually getting the data for my blocks. So I can see, you know, this is columns, we've got a title, we've got a headline, we've got the actual rows. So I could even drill further into those relationships via a single API call if I wanted. Now there's one other field that I want to pull within this and we'll do hide block. And do we have hide block? Okay. So now I've I've got this hide block on here. You know, within the page builder, maybe I wanna hide one of these individual blocks so that it doesn't show on a page. I can query that on my front end so that, you know, hey, we we don't have to remove this, maybe we want to show it at a later date, but I wanna hide this specific block and not render that when I consume that API on my front end. So how would I do something like that? This is a setup on the relational field, right? So at the top level here we can filter based on the pages, but there is a special parameter that you can use to filter the relational data in a single API call. So you'll see how powerful this is in just a moment. We'll go in and we'll do deep parameter. And we're going to look at our blocks. And now it's like we've got a whole another query within this, right? So I'm just going to preface this with a underscore or an underscore and we're gonna do a filter and now we are filtering on the block level. So the related blocks we wanna do hide block is equal to not equal to true. Alright so let's see what that returns. And I'm just gonna clear out my console here and I shouldn't see the first item as a quote because I have removed that or filtered it out. Forgot my comma at the end there. So we'll clear one more time, call this out. If I zoom back up to the top of this, you could see the first block in my array here is the form section. Right now if I go in and I just hide a lot of these blocks, right? I've hidden the first three blocks, the first section that I see in my API call should be this FAQ one. Let's clear this again. Just to make it easier we'll do node dot JS and, oh, I forgot to save the actual item over here. Let's try that one more time. Node. Js index dot JS, there we go. And now the first block that we see is the FAQ section. Right? If I wanted to see all the blocks that we hid, I could just change that to not equal to false or I could set it to equal to true, either way. But now I can see here's all the blocks that we hid within that specific page. So I hope this has been a great tutorial on just the sorts of things you could do with the, global parameters when you're calling the API. Stay tuned for more episodes of Short Hops. That's it. We'll see you.","\u003Cp>Join host Bryant Gillespie in this in-depth episode of Short Hops as he tackles a challenging topic for Directus newcomers: setting up queries via the REST API. Bryant walks you through complex querying techniques using the Directus SDK, demonstrating how to efficiently interact with your Directus instance.\u003C/p>\n\u003Cp>In this episode, you'll learn:\u003C/p>\n\u003Cul>\n\u003Cli>How to set up a basic Node.js project with the Directus SDK\u003C/li>\n\u003Cli>Querying specific fields and limiting results\u003C/li>\n\u003Cli>Implementing filters for published content\u003C/li>\n\u003Cli>Using complex filters with AND/OR operators\u003C/li>\n\u003Cli>Expanding relationships within a single API call\u003C/li>\n\u003Cli>Filtering relational data using the deep parameter\u003C/li>\n\u003Cli>Practical examples of querying and filtering page builder blocks\u003C/li>\n\u003C/ul>\n\u003Cp>Whether you're new to Directus or looking to level up your API skills, this episode provides valuable insights into crafting powerful queries. Discover how to efficiently retrieve and filter your data, work with relational fields, and optimize your API calls for better performance.\u003C/p>","5c71b202-e026-4251-856d-20466be7a17e",[180],"20ccfe78-9e3e-449c-81ea-324f7e3b22de",[],{"reps":183},[184,240],{"name":185,"sdr":8,"link":186,"countries":187,"states":189},"John Daniels","https://meet.directus.io/meetings/john2144/john-contact-form-meeting",[188],"United States",[190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239],"Michigan","Indiana","Ohio","West Virginia","Kentucky","Virginia","Tennessee","North Carolina","South Carolina","Georgia","Florida","Alabama","Mississippi","New York","MI","IN","OH","WV","KY","VA","TN","NC","SC","GA","FL","AL","MS","NY","Connecticut","CT","Delaware","DE","Maine","ME","Maryland","MD","Massachusetts","MA","New Hampshire","NH","New Jersey","NJ","Pennsylvania","PA","Rhode Island","RI","Vermont","VT","Washington DC","DC",{"name":241,"link":242,"countries":243},"Michelle Riber","https://meetings.hubspot.com/mriber",[244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,221,432,433],"Albania","ALB","Algeria","DZA","Andorra","AND","Angola","AGO","Austria","AUT","Belgium","BEL","Benin","BEN","Bosnia and Herzegovina","BIH","Botswana","BWA","Bulgaria","BGR","Burkina Faso","BFA","Burundi","BDI","Cameroon","CMR","Cape Verde","CPV","Central African Republic","CAF","Chad","TCD","Comoros","COM","Côte d'Ivoire","CIV","Croatia","HRV","Czech Republic","CZE","Democratic Republic of Congo","COD","Denmark","DNK","Djibouti","DJI","Egypt","EGY","Equatorial Guinea","GNQ","Eritrea","ERI","Estonia","EST","Eswatini","SWZ","Ethiopia","ETH","Finland","FIN","France","FRA","Gabon","GAB","Gambia","GMB","Ghana","GHA","Greece","GRC","Guinea","GIN","Guinea-Bissau","GNB","Hungary","HUN","Iceland","ISL","Ireland","IRL","Italy","ITA","Kenya","KEN","Latvia","LVA","Lesotho","LSO","Liberia","LBR","Libya","LBY","Liechtenstein","LIE","Lithuania","LTU","Luxembourg","LUX","Madagascar","MDG","Malawi","MWI","Mali","MLI","Malta","MLT","Mauritania","MRT","Mauritius","MUS","Moldova","MDA","Monaco","MCO","Montenegro","MNE","Morocco","MAR","Mozambique","MOZ","Namibia","NAM","Niger","NER","Nigeria","NGA","North Macedonia","MKD","Norway","NOR","Poland","POL","Portugal","PRT","Republic of Congo","COG","Romania","ROU","Rwanda","RWA","San Marino","SMR","São Tomé and Príncipe","STP","Senegal","SEN","Serbia","SRB","Seychelles","SYC","Sierra Leone","SLE","Slovakia","SVK","Slovenia","SVN","Somalia","SOM","South Africa","ZAF","South Sudan","SSD","Spain","ESP","Sudan","SDN","Sweden","SWE","Tanzania","TZA","Togo","TGO","Tunisia","TUN","Uganda","UGA","United Kingdom","GBR","Vatican City","VAT","Zambia","ZMB","Zimbabwe","ZWE","UK","Germany","Netherlands","Switzerland","CH","NL",1773850447207]