{"id":2354,"date":"2025-04-24T10:30:00","date_gmt":"2025-04-24T00:30:00","guid":{"rendered":"https:\/\/digitalbbq.au\/?p=2354"},"modified":"2025-01-27T10:49:55","modified_gmt":"2025-01-27T00:49:55","slug":"too-many-filters-how-i-automated-the-cleanup-of-unused-view-filters-in-revit","status":"publish","type":"post","link":"https:\/\/digitalbbq.au\/index.php\/2025\/04\/24\/too-many-filters-how-i-automated-the-cleanup-of-unused-view-filters-in-revit\/","title":{"rendered":"Too Many Filters? How I Automated the Cleanup of Unused View Filters in Revit"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">At some point, every BIM manager or Revit user has encountered a messy model where someone has gone overboard with view filters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In one project I inherited, someone had created hundreds of view filters, many of which were completely unused\u2014just sitting there, cluttering up the model. Manually deleting them? Not an option.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So, I wrote a Revit API script to automatically detect and remove unused view filters, making cleanup quick and effortless.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How the Script Works<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The script starts by collecting all the filters in the model and checking which ones are actually being used in views. If a filter isn\u2019t being used, it gets added to a \u2018to-delete\u2019 list. Finally, the script removes all the unused filters in a single transaction.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The script follows these steps:<br>1\ufe0f\u20e3 <strong>Collect all views in the model<\/strong> \u2013 Filters out views that allow graphics overrides.<br>2\ufe0f\u20e3 <strong>Identify filters that are actually being used<\/strong> \u2013 Checks view settings to see which filters are applied.<br>3\ufe0f\u20e3 <strong>Find unused filters<\/strong> \u2013 Compares all filters against the list of used ones.<br>4\ufe0f\u20e3 <strong>Delete the unused filters<\/strong> \u2013 Uses a Revit transaction to remove them from the model.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Step 1: Get All Views and Identify Used Filters<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">First, we <strong>loop through all views<\/strong> and check which <strong>filters are actively in use.<\/strong><\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Click to expand source code<\/summary><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> void DeleteViewFilters()\n{\n    UIDocument uidoc = this.ActiveUIDocument;\n    Document doc = uidoc.Document;\n\n    int viewsFiltersDelete = <span class=\"hljs-number\">0<\/span>;\n    int viewsWithFilters = <span class=\"hljs-number\">0<\/span>;\n\n    IList&lt;ElementId&gt; usedFilters = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-keyword\">List<\/span>&lt;ElementId&gt;();\n\n    <span class=\"hljs-comment\">\/\/ Collect all views<\/span>\n    <span class=\"hljs-keyword\">var<\/span> views = <span class=\"hljs-keyword\">new<\/span> FilteredElementCollector(doc)\n        .OfClass(typeof(View))\n        .WhereElementIsNotElementType()\n        .Cast&lt;View&gt;();\n\n    <span class=\"hljs-keyword\">foreach<\/span> (View v in views)\n    {\n        <span class=\"hljs-keyword\">if<\/span> (v.AreGraphicsOverridesAllowed()) <span class=\"hljs-comment\">\/\/ Ignore views where overrides aren\u2019t allowed<\/span>\n        {\n            <span class=\"hljs-keyword\">foreach<\/span> (ElementId filterId in v.GetFilters())\n            {\n                <span class=\"hljs-keyword\">if<\/span> (filterId != <span class=\"hljs-keyword\">null<\/span>)\n                {\n                    usedFilters.Add(filterId);\n                    viewsWithFilters++;\n                }\n            }\n        }\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/details>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Step 2: Find Unused Filters<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Next, we collect all filter elements in the model and compare them against our list of used filters.<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Click to expand source code<\/summary><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ Collect all filters<\/span>\n<span class=\"hljs-keyword\">var<\/span> allFilters = <span class=\"hljs-keyword\">new<\/span> FilteredElementCollector(doc)\n    .OfClass(typeof(FilterElement))\n    .WhereElementIsNotElementType()\n    .Cast&lt;FilterElement&gt;();\n\nIList&lt;FilterElement&gt; filtersToDelete = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-keyword\">List<\/span>&lt;FilterElement&gt;();\n\n<span class=\"hljs-comment\">\/\/ Identify unused filters<\/span>\n<span class=\"hljs-keyword\">foreach<\/span> (FilterElement f in allFilters)\n{\n    <span class=\"hljs-keyword\">if<\/span> (!usedFilters.Contains(f.Id)) <span class=\"hljs-comment\">\/\/ If a filter is NOT in use, mark it for deletion<\/span>\n    {\n        filtersToDelete.Add(f);\n        viewsFiltersDelete++;\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/details>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Step 3: Delete Unused Filters<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Once the unused filters are identified, we <strong>start a Revit transaction<\/strong> and remove them.<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Click to expand source code<\/summary><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">using (Transaction t = <span class=\"hljs-keyword\">new<\/span> Transaction(doc, <span class=\"hljs-string\">\"Delete Unused View Filters\"<\/span>))\n{\n    t.Start();\n    int count = <span class=\"hljs-number\">0<\/span>;\n\n    <span class=\"hljs-keyword\">try<\/span>\n    {\n        <span class=\"hljs-keyword\">foreach<\/span> (FilterElement f in filtersToDelete)\n        {\n            <span class=\"hljs-keyword\">if<\/span> (f.Id != <span class=\"hljs-keyword\">null<\/span> &amp;&amp; f.IsValidObject)\n            {\n                doc.Delete(f.Id);\n                count++;\n            }\n        }\n    }\n    <span class=\"hljs-keyword\">catch<\/span> (<span class=\"hljs-keyword\">Exception<\/span> e)\n    {\n        TaskDialog.Show(<span class=\"hljs-string\">\"Error\"<\/span>, e.ToString());\n    }\n\n    t.Commit();\n\n    TaskDialog.Show(<span class=\"hljs-string\">\"Cleanup Complete\"<\/span>, <span class=\"hljs-string\">\"Filters in Use: \"<\/span> + viewsWithFilters.ToString() +\n        <span class=\"hljs-string\">\"\\nUnused Filters Removed: \"<\/span> + viewsFiltersDelete.ToString() +\n        <span class=\"hljs-string\">\"\\nTotal Deleted: \"<\/span> + count.ToString());\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/details>\n\n\n\n<p class=\"wp-block-paragraph\">Unused view filters might seem like a minor annoyance, but they can have a big impact. They slow down your model, make it harder to find the filters you actually need, and create unnecessary complexity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re dealing with a Revit model that\u2019s overrun with view filters, don\u2019t let them weigh you down.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u26a1 This script removed dozens of unnecessary view filters in seconds.<br>\u26a1 No more manually sifting through filters to figure out what\u2019s still in use.<br>\u26a1 Keeping models clean and optimized makes collaboration easier and performance better.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your Revit model is cluttered with unused filters, this automation will save you hours of manual cleanup.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>At some point, every BIM manager or Revit user has encountered a messy model where someone has gone overboard with view filters. In one project I inherited, someone had created hundreds of view filters, many of which were completely unused\u2014just sitting there, cluttering up the model. Manually deleting them? Not an option. So, I wrote a Revit API script to&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2355,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"Revit models get messy with unused view filters. This script automatically detects and deletes them, keeping your model clean and optimised.","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Messy Revit models often have dozens of unused view filters that slow things down. Here\u2019s a script that automatically detects and deletes unused filters\u2014cleaning up your model in seconds. #RevitAPI #BIM #Automation","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[77,73],"class_list":["post-2354","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital","tag-automation","tag-process"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/digitalbbq.au\/wp-content\/uploads\/2025\/01\/dandelion-with-water-drops-filtered.jpg","jetpack-related-posts":[{"id":2351,"url":"https:\/\/digitalbbq.au\/index.php\/2025\/03\/13\/cleaning-up-the-mess-automating-the-removal-of-unused-project-parameters-in-revit\/","url_meta":{"origin":2354,"position":0},"title":"Cleaning Up the Mess \u2013 Automating the Removal of Unused Project Parameters in Revit","author":"Ryan Lenihan","date":"13 March 2025","format":false,"excerpt":"I once took over a Revit project that was an absolute mess. The modelling practices were sloppy, content was pulled in from everywhere, and the result was a bloated model filled with hundreds of unused parameters. There were:\u2705 Parameters from other consultants\u2705 Random project parameters no one could explain\u2705 Parameters\u2026","rel":"","context":"In &quot;Digital&quot;","block_context":{"text":"Digital","link":"https:\/\/digitalbbq.au\/index.php\/category\/digital\/"},"img":{"alt_text":"Destroyed messy office desk","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/01\/destroyed-messy-office-desk.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/01\/destroyed-messy-office-desk.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/01\/destroyed-messy-office-desk.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/01\/destroyed-messy-office-desk.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/01\/destroyed-messy-office-desk.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/01\/destroyed-messy-office-desk.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2403,"url":"https:\/\/digitalbbq.au\/index.php\/2025\/07\/17\/why-your-pipe-fittings-are-missing-materials-in-ifc-exports-and-how-to-fix-it\/","url_meta":{"origin":2354,"position":1},"title":"Your Pipe Fittings Are Grey in IFC? Here&#8217;s Why (And How to Fix It)","author":"Ryan Lenihan","date":"17 July 2025","format":false,"excerpt":"You\u2019ve exported your model to IFC. Pipes look great. Fittings? Grey. Again. What\u2019s going on? This one trips up a lot of teams, because pipe fittings in Revit don\u2019t actually carry system data, even though they look like they do. So when you rely on system-assigned materials for your IFC\u2026","rel":"","context":"In &quot;How to guides&quot;","block_context":{"text":"How to guides","link":"https:\/\/digitalbbq.au\/index.php\/category\/how-to-guides\/"},"img":{"alt_text":"Set of blue PVC pipe fittings isolated on dark background. Blue plastic water pipe. PVC accessories","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2400,"url":"https:\/\/digitalbbq.au\/index.php\/2025\/09\/04\/optimising-ifc-files-in-python\/","url_meta":{"origin":2354,"position":2},"title":"Optimising IFC Files in Python","author":"Ryan Lenihan","date":"4 September 2025","format":false,"excerpt":"I came across a Python-based IFC optimiser built on top of IfcOpenShell. It was solid, removing unused spaces, orphaned entities, and redundant metadata, but I saw room to push it further. The original script handled: Removing empty attributes Cleaning up orphaned or unused relationships Removing tiny geometry Flattening the spatial\u2026","rel":"","context":"In &quot;Digital&quot;","block_context":{"text":"Digital","link":"https:\/\/digitalbbq.au\/index.php\/category\/digital\/"},"img":{"alt_text":"Big and small yellow rubber ducks on pink background","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/big-and-small-yellow-rubber-ducks-on-pink-background.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/big-and-small-yellow-rubber-ducks-on-pink-background.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/big-and-small-yellow-rubber-ducks-on-pink-background.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/big-and-small-yellow-rubber-ducks-on-pink-background.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/big-and-small-yellow-rubber-ducks-on-pink-background.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/big-and-small-yellow-rubber-ducks-on-pink-background.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2413,"url":"https:\/\/digitalbbq.au\/index.php\/2025\/08\/07\/setting-ifc-material-overrides-for-cable-tray-and-conduit\/","url_meta":{"origin":2354,"position":3},"title":"Setting IFC Material Overrides for Cable Tray and Conduit","author":"Ryan Lenihan","date":"7 August 2025","format":false,"excerpt":"In a previous post, we looked at how to set IFC material overrides for pipe fittings. But when it comes to cable tray and conduit, things get a bit trickier. Unlike pipe and duct, cable tray and conduit don\u2019t belong to a system in Revit, so there's no MEP System\u2026","rel":"","context":"In &quot;Digital&quot;","block_context":{"text":"Digital","link":"https:\/\/digitalbbq.au\/index.php\/category\/digital\/"},"img":{"alt_text":"Low angle view of steel network cable trunking box.","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2595,"url":"https:\/\/digitalbbq.au\/index.php\/2026\/03\/26\/revit-cloud-model-upgrades-part-3-the-pre-upgrade-checklist-that-actually-prevents-pain\/","url_meta":{"origin":2354,"position":4},"title":"Revit Cloud Model Upgrades Part 3 &#8211; The Pre\u2011Upgrade Checklist That Actually Prevents Pain","author":"Ryan Lenihan","date":"26 March 2026","format":false,"excerpt":"Most upgrade failures don\u2019t happen during the upgrade. They happen six months earlier when everyone was \u201cjust trying to get drawings out the door\u201d. By the time you hit Upgrade, the Revit upgrade process is simply showing you the consequences. This is the checklist I run before pushing a single\u2026","rel":"","context":"In &quot;Digital&quot;","block_context":{"text":"Digital","link":"https:\/\/digitalbbq.au\/index.php\/category\/digital\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/03\/checklist_sm.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/03\/checklist_sm.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/03\/checklist_sm.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/03\/checklist_sm.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/03\/checklist_sm.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/03\/checklist_sm.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":1765,"url":"https:\/\/digitalbbq.au\/index.php\/2024\/01\/18\/purging-material-assets-using-the-revit-api-the-right-way\/","url_meta":{"origin":2354,"position":5},"title":"Purging Material Assets Using the Revit API the Right Way","author":"Ryan Lenihan","date":"18 January 2024","format":false,"excerpt":"I was asked about a problematic Revit model with 57,000 purgeable material assets. \"Just purge them\", you say, but the problem is that even using a shift+click to select the assets locked up the user's Revit for around 30 minutes while Revit thought about its life choices. I had experience\u2026","rel":"","context":"In &quot;Digital&quot;","block_context":{"text":"Digital","link":"https:\/\/digitalbbq.au\/index.php\/category\/digital\/"},"img":{"alt_text":"cleaning","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/01\/cleaning.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/01\/cleaning.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/01\/cleaning.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/01\/cleaning.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/01\/cleaning.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/01\/cleaning.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/posts\/2354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/comments?post=2354"}],"version-history":[{"count":1,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/posts\/2354\/revisions"}],"predecessor-version":[{"id":2356,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/posts\/2354\/revisions\/2356"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/media\/2355"}],"wp:attachment":[{"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/media?parent=2354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/categories?post=2354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/tags?post=2354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}