Here are a few example use cases, these use cases combine filter with other parameters to make useful API queries. The syntax for any of this may change between now, implementation, and release - they're meant as illustrative examples :)
api.posts.browse({filter: "tags:[photo, video] + id:-5", limit="3"});
GET /api/posts?filter=tags%3A%5Bphoto%2Cvideo%5D%2Bid%3A-5&limit=3
{{#get "posts" filter="tags:[photo,video]+id:-5" limit="3"}}
api.posts.browse({filter: "tag:photo,featured:true,image:-null"})
GET /api/posts?filter=tag%3Aphoto%2Cfeatured%3Atrue%2Cimage%3A-null
{{#get "posts" filter="tag:photo,featured:true,image:-null"}}
api.tags.browse({filter: "post.count:>=1", order: "posts.count DESC", limit: "all"})
GET /api/tags?filter=post.count:>=1&order=posts.count%20DESC&limit=all
{{#get "tags" filter="post.count:>=1" order="posts.count DESC" limit="all"}}
api.posts.browse({filter: "author:hannah+featured:true"});
GET /api/posts?filter=author:hannah%2Bfeatured:true
{{#get "posts" filter="author:hannah+featured:true"}}
api.users.browse({filter: "posts.tags:photo", order: "posts.count DESC", limit: 3});
GET /api/users?filter=posts.tags:photo&order=posts.count%20DESC&limit=3
{{#get "users" filter="posts.tags:photo" order="posts.count DESC" limit="3"}}
api.posts.browse({filter: "published_at:>'2015-07-20'", limit: 5});
GET /api/posts?filter=published_at:%3E'2015-07-20'&limit=5
{{#get "posts" filter="published_at:>'2015-07-20'" limit="5"}}
Is there a way to fetch 3 posts that do not match certain tags?