Skip to content

Personal content

A Personal item belongs to the user who created it. It lives in their personal library, not in a channel, and is marked is_personal: true on every content-item response. Articles, videos and guides can be Personal today.

The owner can also hide a Personal item (is_hidden: true). Only the owner sees a hidden Personal item in a list; nobody else does, Admins included, unless they use the oversight option below.

This guide covers how Personal items show up in lists, and the three query parameters that control it.

Lists leave Personal items out by default

Every content list (/content-items/, /articles/, /videos/, /guides/, /courses/, /events/, /event-series/, /links/, /tracks/, /scheduled-tracks/, /collections/) returns shared content only, unless you ask for Personal items. On lists of types that cannot be Personal, the parameters are accepted and change nothing, so you can send the same query everywhere.

Reading a single item is different: GET /articles/{public_id}/ and the other single-item routes return a Personal item to anyone who has its public_id, hidden or not.

The three parameters

Parameter What it does Who may use it
include_personal_of=<user public_id or me> Adds one user's Personal items to the list. Anyone.
include_personal=true Adds every Personal item, hidden ones included. Admins and Organizers; anyone else gets 403.
is_personal=true or false Keeps only Personal items, or only shared ones. Anyone.

include_personal_of

Pass a user's public_id, or me for the user your token belongs to. The list becomes the normal list plus that user's Personal items:

  • Your own (me, or your own public_id): all of them, hidden ones included.
  • Someone else's: the visible ones only. This holds for Admins and Organizers too.

An unknown public_id adds nothing and is not an error, the same as any other reference filter: the list is simply the normal list.

include_personal

The oversight option: every Personal item in the account, hidden ones included, added to the list. Only Admins and Organizers may use it; anyone else gets 403 forbidden. When you pass both include_personal=true and include_personal_of, include_personal wins, since it already includes everything.

is_personal

A plain narrowing filter. is_personal=false keeps shared content only (the default list already does, so it matters only alongside one of the options above). is_personal=true keeps Personal items only, which needs include_personal_of or include_personal: without either the list holds no Personal items, so the request is refused with 400 validation_error.

Common queries

A user's library, the way their profile shows it:

GET /api/v2/content-items/?include_personal_of=8f3a…&is_personal=true

Your own library, hidden items included:

GET /api/v2/content-items/?include_personal_of=me&is_personal=true

A user's profile: what they facilitate, plus their visible Personal items:

GET /api/v2/content-items/?facilitator_id=8f3a…&include_personal_of=8f3a…

Every Personal article in the account (Admin or Organizer token):

GET /api/v2/articles/?include_personal=true&is_personal=true

Every visible Personal item in the account, leaving out the ones their owners hid (Admin or Organizer token):

GET /api/v2/content-items/?include_personal=true&is_personal=true&is_hidden=false

Assignments

GET /assignments/ leaves out assignments on Personal content by default. Admins and Organizers can add them with include_personal=true; anyone else gets 403. Each row marks them with content_item.is_personal.

Channels

Personal items never belong to a regular channel, so GET /channels/{public_id}/content-items/ never returns them and takes none of these parameters.