Content Views
Reminder: All queries on this page require the
WORKSPACE-IDheader. See Getting Started for setup.
Content Views are saved filters in your Social Listening section. They let you quickly access a specific slice of your content — for example, “Influencer-Generated Content”, “High-Engagement UGC”, or custom views you’ve created like “Wedding” or “Unboxing”.
In the Archive UI, these appear under Social Listening → Content Views in the sidebar. Looking for Collections instead? See Collections — those are static groups of items you manually curate, while Content Views are dynamic filters that update automatically.
Learn more: Creating, Deleting, and Renaming Content Views
List your Content Views
The dedicated contentViews query returns every Content View in the workspace, including its full filter definition and sort order — everything you’d need to recreate or audit the view:
query ListContentViews {
contentViews {
id
name
filters
sort
showReportingStats
group { id name }
}
}Example response:
{
"data": {
"contentViews": [
{
"id": "c1d2e3f4-a5b6-7890-cdef-012345678901",
"name": "High-Engagement UGC",
"filters": { "engagement": [{ "range": { "from": 1000 }, "field": "like_count" }] },
"sort": [{ "field": "taken_at", "direction": "desc" }],
"showReportingStats": true,
"group": null
}
]
}
}| Field | Type | Description |
|---|---|---|
id | ID | View identifier — also valid as presetId in an items query. |
name | String | Display name, as shown in the sidebar. |
filters | JSON | The view’s filter definition. Same shape as the filter argument on items. |
sort | JSON | Default sort order applied in the UI. |
showReportingStats | Boolean | Whether the reporting header is shown in the UI. |
group | Object | The sidebar group the view belongs to, or null. |
Using with AI:
“List my Content Views with their filter definitions” “Which of my views filter by engagement?”
If you only need id + name, the lighter filterPresets query also returns Content Views, with accessor: MEDIA_DECK:
query ListContentViews {
filterPresets {
id
name
accessor
}
}Example response:
{
"data": {
"filterPresets": [
{ "id": "c1d2e3f4-a5b6-7890-cdef-012345678901", "name": "Influencer-Generated Content", "accessor": "MEDIA_DECK" },
{ "id": "d2e3f4a5-b6c7-8901-defa-123456789012", "name": "High-Engagement UGC", "accessor": "MEDIA_DECK" },
{ "id": "e3f4a5b6-c7d8-9012-efab-234567890123", "name": "Unboxing", "accessor": "MEDIA_DECK" }
]
}
}This query returns both Content Views (
MEDIA_DECK) and Collections (COLLECTIONS). Filter byaccessorto separate them.
Using with AI:
“List all my Content Views” “Show me only my saved views, not collections”
Get items from a Content View
Use the view’s id as presetId in an items query:
query ItemsFromView {
items(first: 20, presetId: "c1d2e3f4-a5b6-7890-cdef-012345678901") {
totalCount
nodes {
id
caption
type
provider
takenAt
currentEngagement { likes comments views }
socialProfile { accountName followers }
}
}
}Example response:
{
"data": {
"items": {
"totalCount": 1250,
"nodes": [
{
"id": "a4b1c2d3-e5f6-7890-abcd-ef1234567890",
"caption": "Summer linen set — obsessed with this look for travel",
"type": "REEL",
"provider": "INSTAGRAM",
"takenAt": "2026-03-28T14:30:00Z",
"currentEngagement": {
"likes": "8420",
"comments": "213",
"views": "94000"
},
"socialProfile": {
"accountName": "lauramendez",
"followers": 312000
}
}
]
}
}
}Using with AI:
“Show me all items in my ‘Unboxing’ view” “How many items are in my ‘High-Engagement UGC’ view?”
Sort items within a Content View
You can sort the results from a Content View using sorting:
query ViewMostLiked {
items(
first: 10
presetId: "c1d2e3f4-a5b6-7890-cdef-012345678901"
sorting: { sortKey: LIKE_COUNT, sortOrder: DESC }
) {
totalCount
nodes {
id type provider
currentEngagement { likes }
socialProfile { accountName }
}
}
}Example response:
{
"data": {
"items": {
"totalCount": 1250,
"nodes": [
{
"id": "a4b1c2d3-e5f6-7890-abcd-ef1234567890",
"type": "POST",
"provider": "INSTAGRAM",
"currentEngagement": { "likes": "21390" },
"socialProfile": { "accountName": "lauramendez" }
}
]
}
}
}Using with AI:
“Show me the most liked items in my ‘Unboxing’ view” “Rank content in my ‘Influencer-Generated Content’ view by EMV” “What are the top 10 most viewed posts in my ‘High-Engagement UGC’ view?”
Get a specific Content View by name
If you know the name of the view you want, list all presets and match by name:
query FindView {
filterPresets {
id
name
accessor
}
}Then use the id of the matching preset as presetId in your items query.
Using with AI:
“Find my Content View called ‘Unboxing’ and show me the items in it” “What’s the ID of my ‘High-Engagement UGC’ view?”
Count items in a Content View
A quick way to see how much content a view contains without fetching all items:
query ViewCount {
items(first: 1, presetId: "c1d2e3f4-a5b6-7890-cdef-012345678901") {
totalCount
}
}Example response:
{
"data": {
"items": {
"totalCount": 1250
}
}
}Using with AI:
“How many items are in each of my Content Views?” “Which of my views has the most content?”
Get engagement data from a Content View
Pull engagement metrics for the content in a view — useful for reports:
query ViewEngagement {
items(
first: 20
presetId: "c1d2e3f4-a5b6-7890-cdef-012345678901"
sorting: { sortKey: EARNED_MEDIA_VALUE, sortOrder: DESC }
) {
totalCount
nodes {
id
caption
type
provider
takenAt
currentEngagement {
likes
comments
shares
views
impressions
earnedMediaValue
}
socialProfile { accountName followers }
}
}
}Using with AI:
“Show me the EMV breakdown for my ‘Influencer-Generated Content’ view” “What’s the total engagement across all items in my ‘Unboxing’ view?” “Give me a performance summary of my ‘High-Engagement UGC’ view”
Create a Content View
The createContentView mutation saves a new view — the API equivalent of clicking + next to Content Views in the sidebar. filters takes the same shape as the filter argument on items, so any search you’ve already built can be saved as a view in one call:
mutation CreateView {
createContentView(input: {
name: "High-Engagement UGC"
filters: { engagement: [{ range: { from: 1000 }, field: "like_count" }] }
}) {
contentView { id name filters }
userErrors { field message }
}
}Example response:
{
"data": {
"createContentView": {
"contentView": {
"id": "f4a5b6c7-d8e9-0123-fabc-345678901234",
"name": "High-Engagement UGC",
"filters": { "engagement": [{ "range": { "from": 1000 }, "field": "like_count" }] }
},
"userErrors": []
}
}
}Both name and filters are required. The view appears in the Archive UI sidebar immediately, and its id works as presetId in items queries right away.
Using with AI:
“Save my current search as a view called ‘Q3 Micro-Influencers’” “Create a Content View for Reels with more than 10,000 likes”
Update a Content View
updateContentView edits an existing view. Partial updates are supported — any field you omit keeps its current value, so you can rename a view without re-sending its filters:
mutation RenameView {
updateContentView(
id: "f4a5b6c7-d8e9-0123-fabc-345678901234"
input: { name: "Q3 High-Engagement UGC" }
) {
contentView { id name filters }
userErrors { field message }
}
}The response echoes the full view — in this example, filters comes back unchanged even though the input only carried name.
Using with AI:
“Rename my ‘Unboxing’ view to ‘Unboxing 2026’” “Change the like threshold on my ‘High-Engagement UGC’ view to 5,000”
Delete a Content View
mutation DeleteView {
deleteContentView(id: "f4a5b6c7-d8e9-0123-fabc-345678901234") {
__typename
}
}Deletion only affects the view definition — the items it filtered stay in your workspace. Note that the payload carries no success field; the absence of errors in the response is the success signal.
Using with AI:
“Delete my ‘Old Campaign’ Content View”
View groups
Views can be organized into sidebar groups (the Groups header in Social Listening). The viewGroups query lists them:
query ListViewGroups {
viewGroups {
id
name
}
}Workspaces with no custom groups return an empty array. The group field on contentViews / socialProfileViews / creatorViews / collections links each entry to its group, and ViewGroup.collections lists the Collections inside a group.
Using with AI:
“List my view groups”
Move something into a group
Each view kind has its own move mutation, and Collections have one too — Collections live in groups by the same mechanism as views:
| Mutation | Moves | Id argument |
|---|---|---|
moveContentViewToGroup | a Content View | viewId |
moveSocialProfileViewToGroup | a Social Profile View | viewId |
moveCreatorViewToGroup | a Creator View | viewId |
moveCollectionToGroup | a Collection | collectionId |
mutation MoveCollectionIntoGroup {
moveCollectionToGroup(
collectionId: "3f7c1a92-5d84-4e63-b0a7-91f2c8e4d5b6"
groupId: "c18d64f0-2a3b-4c9e-8571-6be0d4a37f92"
) {
collection {
id
name
group { id name }
}
userErrors { field message }
}
}{
"data": {
"moveCollectionToGroup": {
"collection": {
"id": "3f7c1a92-5d84-4e63-b0a7-91f2c8e4d5b6",
"name": "Holiday UGC",
"group": { "id": "c18d64f0-2a3b-4c9e-8571-6be0d4a37f92", "name": "Q4 Campaigns" }
},
"userErrors": []
}
}
}Response fields
| Field | Description |
|---|---|
collection | The moved Collection, with group reflecting where it ended up. null when the move failed |
userErrors | Empty on success. On failure, field is a path array — ["collectionId"] or ["groupId"] — and the write did not happen |
Three things to know:
- One group at a time. Moving something into a group implicitly removes it from whatever group it was in — you don’t need to un-group it first.
- Omit
groupId(or passnull) to un-group. That takes the Collection out of any group and leaves it loose in the sidebar. - Use the right mutation for the entity. Passing a Content View id to
moveCollectionToGroupreturns anot_founderror on["collectionId"]rather than moving it. Unknown ids and ids from another workspace return that same error on purpose, so the API never reveals whether an id exists elsewhere.
Using with AI:
“Move the Holiday UGC collection into my Q4 Campaigns group” “Take that collection out of its group”
Important notes
Filters cannot be combined with presets. When you use
presetId, the view’s own filters are applied. Addingfilterparameters to the query will not narrow the results further. Usesortingto change the order instead.
Deleting a view never deletes content. Views are saved filters; removing one leaves every item in the workspace untouched.