# Home Page Feed

These use cases show how to build a typical member experience home page with the Feeds API. A home page often contains multiple feed sections, such as Trending, Featured, and Latest.

Each example below shows:

- the UI outcome
- the API request used to generate it
- the response structure returned for that use case


**Example of a user's home page, showing their Featured feed as their main content landing**

homepageexfeeds.png
These examples focus on displaying content feeds on a user's home page. For other home page aspects, view our use case library for examples such as user shortcuts, notification center, search bar, user profile, etc.

## Trending Feed

This example shows how to generate a **Trending** content feed.

**Example UI**

Trending feed example UI
**Endpoint**

GET /v2/feed/posts
**Request parameters**

| Query | Value |
|  --- | --- |
| **name** string | `"trending"` |
| **visibility** string | `"public"` |
| **page.size** integer | `10` |
| **page.number** integer | `1` |


- `name=trending` returns the named feed preset for trending content.
- `filter.visibility=public` limits results to public content.
- `page.size=10` and `page.number=1` return the first 10 results.


### Request used in this example


```json
{
  "name": "trending",
  "filter.visibility": "public",
  "page.size": 10,
  "page.number": 1
}
```

### Response shown in this example


```json
{
  "data": [
    {
      "id": 1001,
      "title": "How managers can improve team communication",
      "content_type": "video",
      "visibility": "public",
      "featured": false
    },
    {
      "id": 1002,
      "title": "Building stronger culture across distributed teams",
      "content_type": "video",
      "visibility": "public",
      "featured": false
    },
    {
      "id": 1003,
      "title": "Training highlights from this quarter",
      "content_type": "video",
      "visibility": "public",
      "featured": false
    }
  ],
  "meta": {
    "filters": {
      "visibility": "public"
    },
    "feed_name": "trending",
    "pagination": {
      "page": 1,
      "size": 10
    }
  }
}
```

## Featured Feed

This example shows how to generate a **Featured** content feed.

If you are building a member experience home page and want to highlight priority content, you can use the named `featured` feed to display posts that have been marked as featured.

This is useful for surfacing important company campaigns, executive communications, or time-sensitive announcements.

To display featured content, the name query can be left to the default (myfeed). Use the featured query.

**Example UI**

Featured feed example UI
**Endpoint**

GET /v2/feed/posts
**Request parameters**

| Query | Value |
|  --- | --- |
| **featured** string | `"true"` |
| **visibility** string | `"public"` |
| **page.size** integer | `10` |
| **page.number** integer | `1` |


- `featured=true` returns the named feed preset for featured content.
- `filter.visibility=public` limits results to public content.
- `page.size=10` and `page.number=1` return the first 10 results.


### Request used in this example


```json
{
  "name": "featured",
  "filter.visibility": "public",
  "page.size": 10,
  "page.number": 1
}
```

### Response shown in this example


```json
{
  "data": [
    {
      "id": 2001,
      "title": "CEO town hall recap",
      "content_type": "article",
      "visibility": "public",
      "featured": true
    },
    {
      "id": 2002,
      "title": "Open enrollment reminder",
      "content_type": "image",
      "visibility": "public",
      "featured": true
    },
    {
      "id": 2003,
      "title": "Q2 business update",
      "content_type": "video",
      "visibility": "public",
      "featured": true
    }
  ],
  "meta": {
    "filters": {
      "visibility": "public"
    },
    "feed_name": "featured",
    "pagination": {
      "page": 1,
      "size": 10
    }
  }
}
```

## Latest Feed

This example shows how to generate a **Latest** content feed.

Use this feed when you want to display the most recently published content available to the authenticated user. This is helpful for creating a section that keeps users up to date with the newest company news and updates.

Endpoint note
The **Latest** feed uses a different **Feeds** endpoint.

**Example UI**

ee-home-latest.png
**Endpoint**

GET /v2/feed/channels/posts
**Request parameters**

| Query | Value |
|  --- | --- |
| **name** string | `"latest"` |
| **visibility** string | `"public"` |
| **page.size** integer | `10` |
| **page.number** integer | `1` |


- `name=latest` returns the named feed preset for the most recently published content.
- `filter.visibility=public` limits results to public content.
- `page.size=10` and `page.number=1` return the first 10 results.


### Request used in this example


```json
{
  "name": "latest",
  "filter.visibility": "public",
  "page.size": 10,
  "page.number": 1
}
```

### Response shown in this example


```json
{
  "data": [
    {
      "id": 3001,
      "title": "New benefits guide for employees",
      "content_type": "article",
      "visibility": "public",
      "featured": false
    },
    {
      "id": 3002,
      "title": "This week in company news",
      "content_type": "note",
      "visibility": "public",
      "featured": false
    },
    {
      "id": 3003,
      "title": "Leadership update video",
      "content_type": "video",
      "visibility": "public",
      "featured": false
    }
  ],
  "meta": {
    "filters": {
      "visibility": "public"
    },
    "feed_name": "latest",
    "pagination": {
      "page": 1,
      "size": 10
    }
  }
}
```

## Request schema

**Request schema**


```json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "enum": [
        "myfeed",
        "following",
        "resources",
        "trending",
        "icymi",
        "featured",
        "bookmarked",
        "community_images"
      ],
      "default": "myfeed",
      "description": "Use a specific named feed, which is a preset of filters for specific types of feeds."
    },
    "search": {
      "type": "string",
      "description": "Find content matching provided keywords. When specified, parameters other than pagination and the topics filter will be ignored."
    },
    "filter.user_behaviors": {
      "type": "array",
      "description": "Return content posts that users have interacted with in the provided ways.",
      "items": {
        "type": "string",
        "enum": [
          "liked",
          "bookmarked",
          "read",
          "unread"
        ]
      }
    },
    "filter.channels.id": {
      "type": "array",
      "description": "Build the feed from the given topics. Returns posts that are published to any of the topics.",
      "items": {
        "type": "integer"
      }
    },
    "filter.initiative_tags.id": {
      "type": "array",
      "description": "Build the feed from the given initiative tags. Returns posts that are published with any of the initiative tags.",
      "items": {
        "type": "integer"
      }
    },
    "filter.content_type": {
      "type": "array",
      "description": "Return only content matching the provided content types.",
      "items": {
        "type": "string",
        "enum": [
          "article",
          "link",
          "note",
          "image",
          "video"
        ]
      }
    },
    "filter.visibility": {
      "type": "string",
      "enum": [
        "public",
        "private",
        "any"
      ],
      "default": "any",
      "description": "Limit records to the value provided."
    },
    "filter.featured": {
      "type": "string",
      "enum": [
        "true",
        "false",
        "any"
      ],
      "default": "any",
      "description": "Limit records to the value provided."
    },
    "page.size": {
      "type": "integer",
      "description": "Number of records to return per page. Default is 10 and maximum is 100."
    },
    "page.number": {
      "type": "integer",
      "description": "Using classical pagination, the page number to return. Default is 1."
    }
  }
}
```

## Response schema


```json
{
  "$ref": "#/components/schemas/schema",
  "components": {
    "schemas": {
      "Content.Post.Resource.author": {
        "type": "object",
        "properties": {
          "avatar_url": {
            "description": "Path to an image representing the author.",
            "type": "string",
            "example": "https://example.com/avatar.png"
          },
          "display_name": {
            "description": "The name to display as the author.",
            "type": "string",
            "example": "Some User"
          },
          "user_id": {
            "description": "The Firstup user_id of the author.",
            "type": "integer",
            "example": 123
          }
        }
      },
      "Content.Image.Resource": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The unique identifier of this image record",
            "example": 678
          },
          "image_url": {
            "type": "string",
            "example": "https://cdn.example.com/acme/acmetimes/images/abc123"
          },
          "width": {
            "type": "integer",
            "description": "The width of the image in pixels",
            "example": 1024
          },
          "height": {
            "type": "integer",
            "description": "The height of the image in pixels",
            "example": 768
          }
        }
      },
      "Feeds.Post.Resource": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for this post",
            "example": 456
          },
          "uuid": {
            "type": "string",
            "format": "uuid",
            "example": "8b358e6b-11d4-4e89-bf7f-ec670e3398ed"
          },
          "version": {
            "type": "integer",
            "description": "The version of the content creation studio used to generate the content.\n- `1` - Legacy Studio\n- `2` - Creator Studio\n",
            "enum": [
              1,
              2
            ]
          },
          "content_type": {
            "type": "string",
            "description": "The type of content. One of: article, image, link, note, or video. The content_type can determine how the post should be presented. ",
            "example": "article"
          },
          "title": {
            "type": "string",
            "description": "The post title. Can also be considered the headline.",
            "example": "Example Post Title"
          },
          "summary": {
            "type": "string",
            "description": "Short summary of the post.",
            "example": "Example Post Summary"
          },
          "body": {
            "type": "string",
            "description": "The body of the post.",
            "example": "Example post body"
          },
          "accent_color": {
            "type": "string",
            "description": "The color of the post, currently only applicable to notes."
          },
          "author": {
            "$ref": "#/components/schemas/Content.Post.Resource.author"
          },
          "channels": {
            "type": "array",
            "description": "A list of the topics this post is published to.",
            "items": {
              "type": "object",
              "properties": {
                "channel_id": {
                  "type": "integer",
                  "example": 789,
                  "description": "Topic's unique identifier (GUID). <br/><br/> <b>NOTE:</b> Originally called \"id\" in this documentation.\n"
                },
                "name": {
                  "type": "string",
                  "example": "Name of Example Topic",
                  "description": "Topic's name. <br/><br/> <b>NOTE:</b> Originally called \"title\" in this documentation.\n"
                }
              }
            }
          },
          "engagement": {
            "type": "object",
            "properties": {
              "liked_at": {
                "type": "string",
                "format": "date-time",
                "description": "Date and time at which the user liked the post. If the user has not liked the post, this value will be null.",
                "example": "2000-01-01T00:00:00Z"
              },
              "bookmarked_at": {
                "type": "string",
                "format": "date-time",
                "description": "Date and time at which the user bookmarked the post. If the user has not bookmarked the post, this value will be null.",
                "example": "2000-01-01T00:00:00Z"
              },
              "viewed_at": {
                "type": "string",
                "format": "date-time",
                "description": "Date and time at which the user viewed the post. If the user has not viewed the post, this value will be null.",
                "example": "2000-01-01T00:00:00Z"
              },
              "total_likes_count": {
                "type": "integer",
                "format": "int64",
                "description": "The total likes of this post within the program by any user.",
                "example": 5
              },
              "total_shares_count": {
                "type": "integer",
                "format": "int64",
                "description": "The total number of shares of this post within the program by any user.",
                "example": 5
              },
              "total_bookmarks_count": {
                "type": "integer",
                "format": "int64",
                "description": "The total number of bookmarks this post has got within the program by any user.",
                "example": 5
              }
            }
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "When this content was last updated in ISO8601 format and UTC timezone.",
            "example": "2000-01-01T00:00:00Z"
          },
          "published_at": {
            "type": "string",
            "format": "date-time",
            "description": "When this content was published in ISO8601 format and UTC timezone.",
            "example": "2000-01-01T00:00:00Z"
          },
          "visibility": {
            "type": "string",
            "enum": [
              "private",
              "public",
              "any"
            ],
            "description": "An indication of the native availability of the post within the Firstup platform. If 'public', the post has a public_link_url and shares of the post should use that url as the canonical url. If 'private', the post requires user authentication to view.\n",
            "example": "public"
          },
          "featured": {
            "type": "boolean",
            "description": "Whether the post is featured.",
            "example": true
          },
          "featured_label": {
            "type": "string",
            "description": "The content's feature label",
            "example": "Save Pandora!"
          },
          "permalink_url": {
            "type": "string",
            "description": "The url of the post on the Firstup platform.",
            "example": "https://onfirstup.com/acme/acmetimes/sc4#contents/456"
          },
          "shareable_url": {
            "type": "string",
            "description": "The publicly shareable url of the post if it's visibility is public. Private visibility posts will have no shareable_url.\n",
            "example": "https://onfirstup.com/acme/acmetimes/sc4#contents/456"
          },
          "prepopulated_share_message": {
            "type": "string",
            "description": "The auto-generated string used when sharing the post.\n",
            "example": "Example Post Title https://onfirstup.com/acme/acmetimes/sc4#contents/456"
          },
          "appended_hashtag": {
            "type": "string",
            "description": "The hashtag configured to be included when sharing the posts. example: #YourBrand\n"
          },
          "language": {
            "type": "string",
            "description": "The language. For non-translatable posts, this value will be null.",
            "example": "en"
          },
          "is_translatable": {
            "type": "boolean",
            "description": "Whether the content is translatable.",
            "example": true
          },
          "is_commentable": {
            "type": "boolean",
            "description": "Whether the content allows comments.",
            "example": true
          },
          "comment_count": {
            "type": "integer",
            "description": "The number of comments on the content.",
            "example": 5
          },
          "poster_image_url": {
            "type": "string",
            "description": "The url of the primary image used for this post, if one exists. ",
            "example": "https://cdn.example.com/acme/acmetimes/images/abc123"
          },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "link_url": {
                  "type": "string",
                  "example": "https://google.com"
                }
              }
            }
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Content.Image.Resource"
            }
          },
          "videos": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "embed_html": {
                  "type": "string",
                  "description": "Html that can be used to embed the video in a page, wrapped in an iframe widget.\n",
                  "example": "<iframe href='https://onfirstup.com/acme/acmetimes/sc4#contents/456/videos/abc123'></iframe>\n"
                },
                "link_url": {
                  "type": "string",
                  "description": "A link to the video where it can be played",
                  "example": "https://onfirstup.com/acme/acmetimes/sc4#contents/456/videos/abc123"
                }
              }
            }
          }
        }
      },
      "Standard.Feed.Meta.PagePagination": {
        "type": "object",
        "properties": {
          "page": {
            "description": "The page returned. Defaults to `1`.",
            "example": 1
          },
          "page_size": {
            "description": "The max number of records requested with pagination applied. Is not necessarily an exact count of the current records returned. Defaults to `10`.\n",
            "example": 10
          }
        }
      },
      "schema": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Feeds.Post.Resource"
            }
          },
          "meta": {
            "properties": {
              "filters": {
                "description": "A list of the filters applied in the current request.",
                "example": {
                  "content_type": "article",
                  "visibility": "public"
                }
              },
              "feed_name": {
                "description": "The name of the current feed, if named.",
                "example": "myfeed"
              },
              "pagination": {
                "$ref": "#/components/schemas/Standard.Feed.Meta.PagePagination"
              }
            }
          }
        }
      }
    }
  }
}
```