ocelot.social GraphQL API

Reference documentation for the ocelot.social GraphQL API, generated from the backend schema. The endpoint and authentication depend on your deployment; the URL below is the local development default (configurable via GRAPHQL_URI).

API Endpoints
http://localhost:4000/

Authentication

Most operations require authentication. Send a token in the Authorization header as a Bearer token on every request:

Authorization: Bearer <token>

Two kinds of token are accepted, distinguished by prefix:

  • JWT — obtained from the login mutation; used by the web app.
  • Personal API key (prefix oak_) — for programmatic access, created with createApiKey when the apiKeysEnabled policy is on. The secret is shown only once, at creation.

Unauthenticated requests are allowed for public operations (e.g. Post, searchPosts, Category); everything else resolves the current user from the token.

Permissions & roles

Beyond being logged in, many operations require a specific permission. Each operation's description states what it needs — e.g. "Requires the content.moderate permission" or "Restricted to the author".

Permissions are granted through roles (dynamic, admin-managed). A caller's effective permissions can be read with myPermissions. Some rights are additionally gated by a runtime feature policy (e.g. apiKey.create only applies while apiKeysEnabled is on). Moderator- and owner-grade actions also respect an "act-on" hierarchy that prevents acting on higher-ranked users.

Errors

Responses follow the GraphQL convention: data carries the result and an errors array carries any problems, each with a message and a path. Authorization failures surface as a top-level error with the message Not Authorized!. A partial data payload alongside errors is normal when only some fields fail.

Real-time subscriptions

Live updates (new notifications, chat messages, room and policy changes) are delivered via GraphQL subscriptions over WebSocket using the graphql-ws protocol, on the same endpoint. Pass the same Authorization header in the connection parameters.

subscription {
  notificationAdded {
    id
    reason
    read
  }
}

File uploads

File and image uploads use the GraphQL multipart request spec via the Upload scalar. Avatars and post images take an ImageInput (upload field), chat attachments take a FileInput. Non-multipart clients may instead reference already-hosted assets by URL.

Federation

The schema carries ActivityPub identifiers (actorId, activityId, objectId, publicKey) on users, posts and comments for federation with other instances. Most clients can ignore these fields.

Examples

A few representative operations. Send variables alongside each query and the Authorization header (except for login).

Log in and obtain a JWT

mutation (: String!, : String!) {
  login(email: , password: )
}

The current user

query {
  currentUser {
    id
    slug
    name
    avatar { url }
  }
}

Create a post

mutation (: String!, : String!, : [ID]) {
  CreatePost(title: , content: , categoryIds: ) {
    id
    slug
  }
}

A page of the feed

query (: Int, : Int, : [_PostOrdering]) {
  Post(first: , offset: , orderBy: ) {
    id
    title
    createdAt
    author { id name }
    commentsCount
    shoutedCount
  }
}

Send a chat message

mutation (: ID, : String) {
  CreateMessage(roomId: , content: ) {
    id
    content
    createdAt
  }
}

Queries

Badge

Description

List all available badges. Public.

Response

Returns [Badge]

Example

Query
query Badge {
  Badge {
    createdAt
    description
    icon
    id
    isDefault
    rewarded {
      ...UserFragment
    }
    type
    verifies {
      ...UserFragment
    }
  }
}
Response
{
  "data": {
    "Badge": [
      {
        "createdAt": "xyz789",
        "description": "xyz789",
        "icon": "abc123",
        "id": 4,
        "isDefault": true,
        "rewarded": [User],
        "type": "trophy",
        "verifies": [User]
      }
    ]
  }
}

Category

Description

List categories. Public.

Response

Returns [Category]

Arguments
Name Description
createdAt - String
first - Int
icon - String
id - ID
name - String
offset - Int
orderBy - [_CategoryOrdering]
slug - String
updatedAt - String

Example

Query
query Category(
  $createdAt: String,
  $first: Int,
  $icon: String,
  $id: ID,
  $name: String,
  $offset: Int,
  $orderBy: [_CategoryOrdering],
  $slug: String,
  $updatedAt: String
) {
  Category(
    createdAt: $createdAt,
    first: $first,
    icon: $icon,
    id: $id,
    name: $name,
    offset: $offset,
    orderBy: $orderBy,
    slug: $slug,
    updatedAt: $updatedAt
  ) {
    createdAt
    icon
    id
    name
    postCount
    posts {
      ...PostFragment
    }
    slug
    updatedAt
  }
}
Variables
{
  "createdAt": "xyz789",
  "first": 123,
  "icon": "abc123",
  "id": "4",
  "name": "abc123",
  "offset": 123,
  "orderBy": ["createdAt_asc"],
  "slug": "abc123",
  "updatedAt": "abc123"
}
Response
{
  "data": {
    "Category": [
      {
        "createdAt": "xyz789",
        "icon": "xyz789",
        "id": "4",
        "name": "xyz789",
        "postCount": 987,
        "posts": [Post],
        "slug": "abc123",
        "updatedAt": "xyz789"
      }
    ]
  }
}

Comment

Description

List comments. Public.

Response

Returns [Comment]

Arguments
Name Description
content - String
createdAt - String
filter - _CommentFilter
first - Int
id - ID
offset - Int
orderBy - [_CommentOrdering]
updatedAt - String

Example

Query
query Comment(
  $content: String,
  $createdAt: String,
  $filter: _CommentFilter,
  $first: Int,
  $id: ID,
  $offset: Int,
  $orderBy: [_CommentOrdering],
  $updatedAt: String
) {
  Comment(
    content: $content,
    createdAt: $createdAt,
    filter: $filter,
    first: $first,
    id: $id,
    offset: $offset,
    orderBy: $orderBy,
    updatedAt: $updatedAt
  ) {
    activityId
    author {
      ...UserFragment
    }
    content
    createdAt
    deleted
    disabled
    id
    isPostObservedByMe
    post {
      ...PostFragment
    }
    postObservingUsersCount
    shoutedByCurrentUser
    shoutedCount
    updatedAt
  }
}
Variables
{
  "content": "abc123",
  "createdAt": "xyz789",
  "filter": _CommentFilter,
  "first": 987,
  "id": "4",
  "offset": 987,
  "orderBy": ["content_asc"],
  "updatedAt": "abc123"
}
Response
{
  "data": {
    "Comment": [
      {
        "activityId": "xyz789",
        "author": User,
        "content": "abc123",
        "createdAt": "xyz789",
        "deleted": true,
        "disabled": true,
        "id": 4,
        "isPostObservedByMe": false,
        "post": Post,
        "postObservingUsersCount": 123,
        "shoutedByCurrentUser": false,
        "shoutedCount": 987,
        "updatedAt": "xyz789"
      }
    ]
  }
}

Donations

Description

The current donation campaign state. Requires authentication.

Response

Returns a Donations

Example

Query
query Donations {
  Donations {
    createdAt
    goal
    id
    progress
    showDonations
    updatedAt
  }
}
Response
{
  "data": {
    "Donations": {
      "createdAt": "abc123",
      "goal": 123,
      "id": 4,
      "progress": 987,
      "showDonations": false,
      "updatedAt": "xyz789"
    }
  }
}

Group

Description

List groups. Requires authentication. Filter to the current user's memberships with isMember, or to located groups with hasLocation.

Response

Returns [Group]

Arguments
Name Description
first - Int
hasLocation - Boolean If true, only groups that have a location.
id - ID
isMember - Boolean Null/undefined returns all groups; true only the user's groups; false only groups they are not in.
offset - Int
slug - String

Example

Query
query Group(
  $first: Int,
  $hasLocation: Boolean,
  $id: ID,
  $isMember: Boolean,
  $offset: Int,
  $slug: String
) {
  Group(
    first: $first,
    hasLocation: $hasLocation,
    id: $id,
    isMember: $isMember,
    offset: $offset,
    slug: $slug
  ) {
    about
    actionRadius
    avatar {
      ...ImageFragment
    }
    categories {
      ...CategoryFragment
    }
    createdAt
    currentlyPinnedPostsCount
    deleted
    description
    disabled
    groupType
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    isMutedByMe
    location {
      ...LocationFragment
    }
    locationName
    membersCount
    myRole
    name
    posts {
      ...PostFragment
    }
    postsCount
    showMembers
    showOnProfile
    slug
    updatedAt
  }
}
Variables
{
  "first": 987,
  "hasLocation": true,
  "id": "4",
  "isMember": false,
  "offset": 123,
  "slug": "xyz789"
}
Response
{
  "data": {
    "Group": [
      {
        "about": "abc123",
        "actionRadius": "continental",
        "avatar": Image,
        "categories": [Category],
        "createdAt": "abc123",
        "currentlyPinnedPostsCount": 987,
        "deleted": false,
        "description": "abc123",
        "disabled": true,
        "groupType": "closed",
        "id": "4",
        "inviteCodes": [InviteCode],
        "isMutedByMe": false,
        "location": Location,
        "locationName": "xyz789",
        "membersCount": 987,
        "myRole": "admin",
        "name": "abc123",
        "posts": [Post],
        "postsCount": 123,
        "showMembers": true,
        "showOnProfile": true,
        "slug": "xyz789",
        "updatedAt": "abc123"
      }
    ]
  }
}

GroupCount

Description

Count groups, optionally restricted to the current user's memberships. Requires authentication.

Response

Returns an Int

Arguments
Name Description
isMember - Boolean

Example

Query
query GroupCount($isMember: Boolean) {
  GroupCount(isMember: $isMember)
}
Variables
{"isMember": true}
Response
{"data": {"GroupCount": 123}}

GroupMembers

Description

List a group's members. Visibility depends on the viewer's relation to the group. Set includePending to also return unapproved join requests (for admins/owners). Set nameFilter (min. 3 chars recommended) to search by display name.

Response

Returns [GroupMember]

Arguments
Name Description
first - Int
id - ID!
includePending - Boolean
nameFilter - String
offset - Int

Example

Query
query GroupMembers(
  $first: Int,
  $id: ID!,
  $includePending: Boolean,
  $nameFilter: String,
  $offset: Int
) {
  GroupMembers(
    first: $first,
    id: $id,
    includePending: $includePending,
    nameFilter: $nameFilter,
    offset: $offset
  ) {
    membership {
      ...MEMBER_OFFragment
    }
    user {
      ...UserFragment
    }
  }
}
Variables
{
  "first": 123,
  "id": "4",
  "includePending": true,
  "nameFilter": "xyz789",
  "offset": 987
}
Response
{
  "data": {
    "GroupMembers": [
      {
        "membership": MEMBER_OF,
        "user": User
      }
    ]
  }
}

Message

Description

List messages in a room, newest first, with index-based paging. Requires authentication.

Response

Returns [Message]

Arguments
Name Description
beforeIndex - Int
first - Int
offset - Int
orderBy - [_MessageOrdering]
roomId - ID!

Example

Query
query Message(
  $beforeIndex: Int,
  $first: Int,
  $offset: Int,
  $orderBy: [_MessageOrdering],
  $roomId: ID!
) {
  Message(
    beforeIndex: $beforeIndex,
    first: $first,
    offset: $offset,
    orderBy: $orderBy,
    roomId: $roomId
  ) {
    _id
    author {
      ...UserFragment
    }
    avatar
    content
    createdAt
    date
    distributed
    files {
      ...FileFragment
    }
    id
    indexId
    room {
      ...RoomFragment
    }
    saved
    seen
    senderId
    updatedAt
    username
  }
}
Variables
{
  "beforeIndex": 987,
  "first": 987,
  "offset": 987,
  "orderBy": ["indexId_desc"],
  "roomId": "4"
}
Response
{
  "data": {
    "Message": [
      {
        "_id": "xyz789",
        "author": User,
        "avatar": "abc123",
        "content": "abc123",
        "createdAt": "abc123",
        "date": "abc123",
        "distributed": true,
        "files": [File],
        "id": 4,
        "indexId": 123,
        "room": Room,
        "saved": false,
        "seen": false,
        "senderId": "xyz789",
        "updatedAt": "abc123",
        "username": "abc123"
      }
    ]
  }
}

Post

Description

List posts (the main feed query). Public. Combine with filter, orderBy and paging for feeds, profiles and groups.

Response

Returns [Post]

Arguments
Name Description
content - String
createdAt - String
filter - _PostFilter
first - Int
id - ID
imageAspectRatio - Float
imageBlurred - Boolean
language - String
offset - Int
orderBy - [_PostOrdering]
pinned - Boolean
slug - String
title - String
updatedAt - String
visibility - Visibility

Example

Query
query Post(
  $content: String,
  $createdAt: String,
  $filter: _PostFilter,
  $first: Int,
  $id: ID,
  $imageAspectRatio: Float,
  $imageBlurred: Boolean,
  $language: String,
  $offset: Int,
  $orderBy: [_PostOrdering],
  $pinned: Boolean,
  $slug: String,
  $title: String,
  $updatedAt: String,
  $visibility: Visibility
) {
  Post(
    content: $content,
    createdAt: $createdAt,
    filter: $filter,
    first: $first,
    id: $id,
    imageAspectRatio: $imageAspectRatio,
    imageBlurred: $imageBlurred,
    language: $language,
    offset: $offset,
    orderBy: $orderBy,
    pinned: $pinned,
    slug: $slug,
    title: $title,
    updatedAt: $updatedAt,
    visibility: $visibility
  ) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{
  "content": "xyz789",
  "createdAt": "abc123",
  "filter": _PostFilter,
  "first": 987,
  "id": "4",
  "imageAspectRatio": 123.45,
  "imageBlurred": false,
  "language": "xyz789",
  "offset": 987,
  "orderBy": ["content_asc"],
  "pinned": false,
  "slug": "abc123",
  "title": "xyz789",
  "updatedAt": "xyz789",
  "visibility": "friends"
}
Response
{
  "data": {
    "Post": [
      {
        "activityId": "abc123",
        "author": User,
        "categories": [Category],
        "clickedCount": 123,
        "comments": [Comment],
        "commentsCount": 987,
        "content": "xyz789",
        "createdAt": "xyz789",
        "deleted": true,
        "disabled": false,
        "emotions": [EMOTED],
        "emotionsCount": 987,
        "eventEnd": "xyz789",
        "eventIsOnline": false,
        "eventLocation": Location,
        "eventLocationName": "abc123",
        "eventStart": "abc123",
        "eventVenue": "abc123",
        "group": Group,
        "groupPinned": false,
        "id": "4",
        "image": Image,
        "isObservedByMe": false,
        "language": "xyz789",
        "lat": 123.45,
        "lng": 987.65,
        "objectId": "abc123",
        "observingUsersCount": 987,
        "pinned": false,
        "pinnedAt": "abc123",
        "pinnedBy": User,
        "postType": ["Article"],
        "relatedContributions": [Post],
        "shoutedBy": [User],
        "shoutedByCurrentUser": false,
        "shoutedCount": 987,
        "slug": "xyz789",
        "sortDate": "abc123",
        "tags": [Tag],
        "title": "abc123",
        "unreadCommentNotificationsByCurrentUser": [
          NOTIFIED
        ],
        "unreadNotificationByCurrentUser": NOTIFIED,
        "updatedAt": "abc123",
        "viewedTeaserByCurrentUser": true,
        "viewedTeaserCount": 987,
        "visibility": "friends"
      }
    ]
  }
}

PostsEmotionsByCurrentUser

Description

The emotions the current user has left on a post. Requires authentication.

Response

Returns [String]

Arguments
Name Description
postId - ID!

Example

Query
query PostsEmotionsByCurrentUser($postId: ID!) {
  PostsEmotionsByCurrentUser(postId: $postId)
}
Variables
{"postId": "4"}
Response
{
  "data": {
    "PostsEmotionsByCurrentUser": ["abc123"]
  }
}

PostsEmotionsCountByEmotion

Description

Count of a single emotion on a post. Public.

Response

Returns an Int!

Arguments
Name Description
data - _EMOTEDInput!
postId - ID!

Example

Query
query PostsEmotionsCountByEmotion(
  $data: _EMOTEDInput!,
  $postId: ID!
) {
  PostsEmotionsCountByEmotion(
    data: $data,
    postId: $postId
  )
}
Variables
{"data": _EMOTEDInput, "postId": 4}
Response
{"data": {"PostsEmotionsCountByEmotion": 987}}

PostsPinnedCounts

Description

Instance-wide pinned-post counts. Requires the post.pin permission.

Response

Returns a PinnedPostCounts!

Example

Query
query PostsPinnedCounts {
  PostsPinnedCounts {
    currentlyPinnedPosts
  }
}
Response
{"data": {"PostsPinnedCounts": {"currentlyPinnedPosts": 987}}}

Room

Description

List the current user's chat rooms. Direct rooms are looked up by userId, group rooms by groupId. Requires authentication.

Response

Returns [Room]

Arguments
Name Description
before - String
first - Int
groupId - ID
id - ID
orderBy - [_RoomOrdering]
search - String
userId - ID

Example

Query
query Room(
  $before: String,
  $first: Int,
  $groupId: ID,
  $id: ID,
  $orderBy: [_RoomOrdering],
  $search: String,
  $userId: ID
) {
  Room(
    before: $before,
    first: $first,
    groupId: $groupId,
    id: $id,
    orderBy: $orderBy,
    search: $search,
    userId: $userId
  ) {
    _id
    avatar
    createdAt
    group {
      ...GroupFragment
    }
    id
    isGroupRoom
    lastMessage {
      ...MessageFragment
    }
    lastMessageAt
    roomId
    roomName
    unreadCount
    updatedAt
    users {
      ...UserFragment
    }
  }
}
Variables
{
  "before": "abc123",
  "first": 123,
  "groupId": "4",
  "id": 4,
  "orderBy": ["createdAt_desc"],
  "search": "abc123",
  "userId": 4
}
Response
{
  "data": {
    "Room": [
      {
        "_id": "abc123",
        "avatar": "xyz789",
        "createdAt": "xyz789",
        "group": Group,
        "id": 4,
        "isGroupRoom": true,
        "lastMessage": Message,
        "lastMessageAt": "xyz789",
        "roomId": "abc123",
        "roomName": "abc123",
        "unreadCount": 987,
        "updatedAt": "xyz789",
        "users": [User]
      }
    ]
  }
}

Tag

Description

List hashtags, e.g. for a trending-tags widget. Public.

Response

Returns [Tag]

Arguments
Name Description
filter - _TagFilter
first - Int
id - ID
offset - Int
orderBy - [_TagOrdering]

Example

Query
query Tag(
  $filter: _TagFilter,
  $first: Int,
  $id: ID,
  $offset: Int,
  $orderBy: [_TagOrdering]
) {
  Tag(
    filter: $filter,
    first: $first,
    id: $id,
    offset: $offset,
    orderBy: $orderBy
  ) {
    deleted
    disabled
    id
    taggedCount
    taggedCountUnique
    taggedPosts {
      ...PostFragment
    }
  }
}
Variables
{
  "filter": _TagFilter,
  "first": 123,
  "id": 4,
  "offset": 123,
  "orderBy": ["id_asc"]
}
Response
{
  "data": {
    "Tag": [
      {
        "deleted": false,
        "disabled": false,
        "id": "4",
        "taggedCount": 123,
        "taggedCountUnique": 123,
        "taggedPosts": [Post]
      }
    ]
  }
}

UnreadRooms

Description

Number of the current user's rooms with unread messages. Requires authentication.

Response

Returns an Int

Example

Query
query UnreadRooms {
  UnreadRooms
}
Response
{"data": {"UnreadRooms": 123}}

User

Description

Look up users. Requires authentication; filtering by email additionally requires the user.email.readAny permission (used for admin user search).

Response

Returns [User]

Arguments
Name Description
about - String
createdAt - String
email - String
filter - _UserFilter
first - Int
id - ID
locationName - String
name - String
offset - Int
orderBy - [_UserOrdering]
roleName - String Admin user search: filter by single role (HAS_ROLE) and/or a free-text term (name/slug/about/email). Combinable; requires role.manage.
search - String Free-text search over name/slug/about (and email for admins).
slug - String
updatedAt - String

Example

Query
query User(
  $about: String,
  $createdAt: String,
  $email: String,
  $filter: _UserFilter,
  $first: Int,
  $id: ID,
  $locationName: String,
  $name: String,
  $offset: Int,
  $orderBy: [_UserOrdering],
  $roleName: String,
  $search: String,
  $slug: String,
  $updatedAt: String
) {
  User(
    about: $about,
    createdAt: $createdAt,
    email: $email,
    filter: $filter,
    first: $first,
    id: $id,
    locationName: $locationName,
    name: $name,
    offset: $offset,
    orderBy: $orderBy,
    roleName: $roleName,
    search: $search,
    slug: $slug,
    updatedAt: $updatedAt
  ) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{
  "about": "xyz789",
  "createdAt": "xyz789",
  "email": "abc123",
  "filter": _UserFilter,
  "first": 123,
  "id": 4,
  "locationName": "xyz789",
  "name": "abc123",
  "offset": 123,
  "orderBy": ["about_asc"],
  "roleName": "abc123",
  "search": "xyz789",
  "slug": "abc123",
  "updatedAt": "xyz789"
}
Response
{
  "data": {
    "User": [
      {
        "_id": "xyz789",
        "about": "abc123",
        "activeCategories": ["abc123"],
        "actorId": "abc123",
        "allowEmbedIframes": false,
        "avatar": Image,
        "badgeTrophies": [Badge],
        "badgeTrophiesCount": 123,
        "badgeTrophiesSelected": [Badge],
        "badgeTrophiesUnused": [Badge],
        "badgeTrophiesUnusedCount": 987,
        "badgeVerification": Badge,
        "blocked": false,
        "categories": [Category],
        "commentedCount": 123,
        "comments": [Comment],
        "contributions": [Post],
        "contributionsCount": 123,
        "createdAt": "xyz789",
        "deleted": false,
        "disabled": false,
        "email": "xyz789",
        "emailNotificationSettings": [
          EmailNotificationSettings
        ],
        "emotions": [EMOTED],
        "followedBy": [User],
        "followedByCount": 987,
        "followedByCurrentUser": false,
        "following": [User],
        "followingCount": 123,
        "friends": [User],
        "friendsCount": 987,
        "groups": [Group],
        "id": 4,
        "inviteCodes": [InviteCode],
        "invited": [User],
        "invitedBy": User,
        "isBlocked": false,
        "isMuted": true,
        "locale": "xyz789",
        "location": Location,
        "locationName": "abc123",
        "name": "xyz789",
        "publicKey": "abc123",
        "redeemedInviteCode": InviteCode,
        "roleName": "xyz789",
        "shouted": [Post],
        "shoutedCount": 987,
        "showClosedGroupsOnProfile": false,
        "showHiddenGroupsOnProfile": false,
        "showPublicGroupsOnProfile": false,
        "showShoutsPublicly": true,
        "slug": "abc123",
        "socialMedia": [SocialMedia],
        "termsAndConditionsAgreedAt": "abc123",
        "termsAndConditionsAgreedVersion": "xyz789",
        "updatedAt": "xyz789"
      }
    ]
  }
}

VerifyNonce

Description

Check whether a signup/verification nonce is valid for the given email. Public.

Response

Returns a Boolean!

Arguments
Name Description
email - String!
nonce - String!

Example

Query
query VerifyNonce(
  $email: String!,
  $nonce: String!
) {
  VerifyNonce(
    email: $email,
    nonce: $nonce
  )
}
Variables
{
  "email": "abc123",
  "nonce": "xyz789"
}
Response
{"data": {"VerifyNonce": true}}

apiKeyUsers

Description

Administration overview of API-key usage per user. Requires the apiKey.administer permission.

Response

Returns [ApiKeyUserSummary!]!

Arguments
Name Description
first - Int
offset - Int

Example

Query
query apiKeyUsers(
  $first: Int,
  $offset: Int
) {
  apiKeyUsers(
    first: $first,
    offset: $offset
  ) {
    activeCount
    commentsCount
    lastActivity
    postsCount
    revokedCount
    user {
      ...UserFragment
    }
  }
}
Variables
{"first": 987, "offset": 123}
Response
{
  "data": {
    "apiKeyUsers": [
      {
        "activeCount": 123,
        "commentsCount": 123,
        "lastActivity": "abc123",
        "postsCount": 987,
        "revokedCount": 987,
        "user": User
      }
    ]
  }
}

apiKeysForUser

Description

All API keys belonging to a given user. Requires the apiKey.administer permission.

Response

Returns [ApiKey!]!

Arguments
Name Description
userId - ID!

Example

Query
query apiKeysForUser($userId: ID!) {
  apiKeysForUser(userId: $userId) {
    createdAt
    disabled
    disabledAt
    expiresAt
    id
    keyPrefix
    lastUsedAt
    name
    owner {
      ...UserFragment
    }
  }
}
Variables
{"userId": "4"}
Response
{
  "data": {
    "apiKeysForUser": [
      {
        "createdAt": "xyz789",
        "disabled": false,
        "disabledAt": "abc123",
        "expiresAt": "abc123",
        "id": "4",
        "keyPrefix": "xyz789",
        "lastUsedAt": "xyz789",
        "name": "abc123",
        "owner": User
      }
    ]
  }
}

blockedUsers

Description

Users the current user has blocked. Requires authentication.

Response

Returns [User]

Example

Query
query blockedUsers {
  blockedUsers {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Response
{
  "data": {
    "blockedUsers": [
      {
        "_id": "xyz789",
        "about": "abc123",
        "activeCategories": ["xyz789"],
        "actorId": "abc123",
        "allowEmbedIframes": true,
        "avatar": Image,
        "badgeTrophies": [Badge],
        "badgeTrophiesCount": 123,
        "badgeTrophiesSelected": [Badge],
        "badgeTrophiesUnused": [Badge],
        "badgeTrophiesUnusedCount": 987,
        "badgeVerification": Badge,
        "blocked": false,
        "categories": [Category],
        "commentedCount": 123,
        "comments": [Comment],
        "contributions": [Post],
        "contributionsCount": 987,
        "createdAt": "xyz789",
        "deleted": false,
        "disabled": false,
        "email": "xyz789",
        "emailNotificationSettings": [
          EmailNotificationSettings
        ],
        "emotions": [EMOTED],
        "followedBy": [User],
        "followedByCount": 987,
        "followedByCurrentUser": false,
        "following": [User],
        "followingCount": 987,
        "friends": [User],
        "friendsCount": 123,
        "groups": [Group],
        "id": 4,
        "inviteCodes": [InviteCode],
        "invited": [User],
        "invitedBy": User,
        "isBlocked": true,
        "isMuted": false,
        "locale": "xyz789",
        "location": Location,
        "locationName": "xyz789",
        "name": "abc123",
        "publicKey": "abc123",
        "redeemedInviteCode": InviteCode,
        "roleName": "abc123",
        "shouted": [Post],
        "shoutedCount": 987,
        "showClosedGroupsOnProfile": false,
        "showHiddenGroupsOnProfile": true,
        "showPublicGroupsOnProfile": true,
        "showShoutsPublicly": true,
        "slug": "abc123",
        "socialMedia": [SocialMedia],
        "termsAndConditionsAgreedAt": "xyz789",
        "termsAndConditionsAgreedVersion": "abc123",
        "updatedAt": "xyz789"
      }
    ]
  }
}

currentUser

Description

The currently authenticated user. Requires authentication.

Response

Returns a User!

Example

Query
query currentUser {
  currentUser {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Response
{
  "data": {
    "currentUser": {
      "_id": "abc123",
      "about": "abc123",
      "activeCategories": ["abc123"],
      "actorId": "abc123",
      "allowEmbedIframes": false,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 987,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 987,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 987,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "xyz789",
      "deleted": true,
      "disabled": true,
      "email": "abc123",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 987,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 123,
      "friends": [User],
      "friendsCount": 123,
      "groups": [Group],
      "id": "4",
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": false,
      "isMuted": false,
      "locale": "xyz789",
      "location": Location,
      "locationName": "abc123",
      "name": "abc123",
      "publicKey": "xyz789",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 987,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": false,
      "showPublicGroupsOnProfile": false,
      "showShoutsPublicly": false,
      "slug": "abc123",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "abc123",
      "termsAndConditionsAgreedVersion": "xyz789",
      "updatedAt": "xyz789"
    }
  }
}

embed

Description

Fetch link-preview metadata for a URL. Public.

Response

Returns an Embed

Arguments
Name Description
url - String!

Example

Query
query embed($url: String!) {
  embed(url: $url) {
    audio
    author
    date
    description
    html
    image
    lang
    publisher
    sources
    title
    type
    url
    video
  }
}
Variables
{"url": "abc123"}
Response
{
  "data": {
    "embed": {
      "audio": "xyz789",
      "author": "xyz789",
      "date": "xyz789",
      "description": "xyz789",
      "html": "abc123",
      "image": "xyz789",
      "lang": "xyz789",
      "publisher": "abc123",
      "sources": ["xyz789"],
      "title": "abc123",
      "type": "xyz789",
      "url": "abc123",
      "video": "xyz789"
    }
  }
}

embedProviders

Description

The oEmbed providers this instance resolves link previews for. Public.

Response

Returns [EmbedProvider!]!

Example

Query
query embedProviders {
  embedProviders {
    name
    url
  }
}
Response
{
  "data": {
    "embedProviders": [
      {
        "name": "xyz789",
        "url": "abc123"
      }
    ]
  }
}

mutedUsers

Description

Users the current user has muted. Requires authentication.

Response

Returns [User]

Example

Query
query mutedUsers {
  mutedUsers {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Response
{
  "data": {
    "mutedUsers": [
      {
        "_id": "abc123",
        "about": "abc123",
        "activeCategories": ["abc123"],
        "actorId": "abc123",
        "allowEmbedIframes": false,
        "avatar": Image,
        "badgeTrophies": [Badge],
        "badgeTrophiesCount": 987,
        "badgeTrophiesSelected": [Badge],
        "badgeTrophiesUnused": [Badge],
        "badgeTrophiesUnusedCount": 123,
        "badgeVerification": Badge,
        "blocked": false,
        "categories": [Category],
        "commentedCount": 987,
        "comments": [Comment],
        "contributions": [Post],
        "contributionsCount": 987,
        "createdAt": "abc123",
        "deleted": false,
        "disabled": true,
        "email": "abc123",
        "emailNotificationSettings": [
          EmailNotificationSettings
        ],
        "emotions": [EMOTED],
        "followedBy": [User],
        "followedByCount": 987,
        "followedByCurrentUser": true,
        "following": [User],
        "followingCount": 123,
        "friends": [User],
        "friendsCount": 987,
        "groups": [Group],
        "id": "4",
        "inviteCodes": [InviteCode],
        "invited": [User],
        "invitedBy": User,
        "isBlocked": false,
        "isMuted": true,
        "locale": "xyz789",
        "location": Location,
        "locationName": "xyz789",
        "name": "abc123",
        "publicKey": "abc123",
        "redeemedInviteCode": InviteCode,
        "roleName": "abc123",
        "shouted": [Post],
        "shoutedCount": 987,
        "showClosedGroupsOnProfile": false,
        "showHiddenGroupsOnProfile": true,
        "showPublicGroupsOnProfile": true,
        "showShoutsPublicly": false,
        "slug": "abc123",
        "socialMedia": [SocialMedia],
        "termsAndConditionsAgreedAt": "xyz789",
        "termsAndConditionsAgreedVersion": "abc123",
        "updatedAt": "xyz789"
      }
    ]
  }
}

myApiKeys

Description

The requesting user's own API keys. Requires authentication and the apiKeysEnabled policy.

Response

Returns [ApiKey!]!

Example

Query
query myApiKeys {
  myApiKeys {
    createdAt
    disabled
    disabledAt
    expiresAt
    id
    keyPrefix
    lastUsedAt
    name
    owner {
      ...UserFragment
    }
  }
}
Response
{
  "data": {
    "myApiKeys": [
      {
        "createdAt": "abc123",
        "disabled": false,
        "disabledAt": "xyz789",
        "expiresAt": "xyz789",
        "id": "4",
        "keyPrefix": "abc123",
        "lastUsedAt": "xyz789",
        "name": "xyz789",
        "owner": User
      }
    ]
  }
}

myPermissions

Description

The current viewer's effective permissions, each carrying its catalog group — drives the webapp can() and group-based area gating.

Response

Returns [EffectivePermission!]!

Example

Query
query myPermissions {
  myPermissions {
    group
    key
  }
}
Response
{
  "data": {
    "myPermissions": [
      {
        "group": "abc123",
        "key": "abc123"
      }
    ]
  }
}

notifications

Description

The current user's notifications. Requires authentication.

Response

Returns [NOTIFIED]

Arguments
Name Description
first - Int
offset - Int
orderBy - NotificationOrdering
read - Boolean

Example

Query
query notifications(
  $first: Int,
  $offset: Int,
  $orderBy: NotificationOrdering,
  $read: Boolean
) {
  notifications(
    first: $first,
    offset: $offset,
    orderBy: $orderBy,
    read: $read
  ) {
    createdAt
    from {
      ... on Comment {
        ...CommentFragment
      }
      ... on Group {
        ...GroupFragment
      }
      ... on Post {
        ...PostFragment
      }
    }
    id
    read
    reason
    relatedUser {
      ...UserFragment
    }
    to {
      ...UserFragment
    }
    updatedAt
  }
}
Variables
{"first": 987, "offset": 987, "orderBy": "createdAt_asc", "read": true}
Response
{
  "data": {
    "notifications": [
      {
        "createdAt": "xyz789",
        "from": Comment,
        "id": 4,
        "read": true,
        "reason": "changed_group_member_role",
        "relatedUser": User,
        "to": User,
        "updatedAt": "xyz789"
      }
    ]
  }
}

permissionCatalog

Description

The closed permission catalog (admin / role.manage).

Response

Returns [Permission!]!

Example

Query
query permissionCatalog {
  permissionCatalog {
    available
    description
    gatedBy
    group
    key
  }
}
Response
{
  "data": {
    "permissionCatalog": [
      {
        "available": true,
        "description": "xyz789",
        "gatedBy": "abc123",
        "group": "abc123",
        "key": "abc123"
      }
    ]
  }
}

policy

Description

The instance's network policy as a key/value list — every recognised policy key, so a client needs no per-key field selection and the set stays in sync with the backend automatically. Public — anonymous viewers (login/register screen) need it. Per-key visibility is enforced in the resolver: a key the viewer may not see carries a null value.

Response

Returns [PolicyEntry!]!

Example

Query
query policy {
  policy {
    key
    requiresPolicy
    value
  }
}
Response
{
  "data": {
    "policy": [
      {
        "key": "activeBranding",
        "requiresPolicy": ["activeBranding"],
        "value": "xyz789"
      }
    ]
  }
}

policyConfig

Description

Per-policy configuration with its software/env-seed/effective value layers and hard env requirements (policy.manage). Secret values are never returned — only env presence state.

Response

Returns [PolicyConfigEntry!]!

Example

Query
query policyConfig {
  policyConfig {
    available
    category
    configuredDefault
    effective
    envSeed
    envSeedState
    key
    requiresEnv {
      ...EnvKeyStatusFragment
    }
    softwareDefault
    type
  }
}
Response
{
  "data": {
    "policyConfig": [
      {
        "available": false,
        "category": "abc123",
        "configuredDefault": "xyz789",
        "effective": "xyz789",
        "envSeed": "xyz789",
        "envSeedState": "empty",
        "key": "xyz789",
        "requiresEnv": [EnvKeyStatus],
        "softwareDefault": "abc123",
        "type": "xyz789"
      }
    ]
  }
}

policyDefaults

Description

The configured policy defaults plus last-change audit info. Requires the policy.manage permission.

Response

Returns a PolicyDefaults!

Example

Query
query policyDefaults {
  policyDefaults {
    defaults {
      ...PolicyEntryFragment
    }
    lastChange {
      ...PolicyLastChangeFragment
    }
  }
}
Response
{
  "data": {
    "policyDefaults": {
      "defaults": [PolicyEntry],
      "lastChange": PolicyLastChange
    }
  }
}

profilePagePosts

Description

Posts for a user's profile page. Public.

Response

Returns [Post]

Arguments
Name Description
filter - _PostFilter
first - Int
offset - Int
orderBy - [_PostOrdering]

Example

Query
query profilePagePosts(
  $filter: _PostFilter,
  $first: Int,
  $offset: Int,
  $orderBy: [_PostOrdering]
) {
  profilePagePosts(
    filter: $filter,
    first: $first,
    offset: $offset,
    orderBy: $orderBy
  ) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{
  "filter": _PostFilter,
  "first": 123,
  "offset": 987,
  "orderBy": ["content_asc"]
}
Response
{
  "data": {
    "profilePagePosts": [
      {
        "activityId": "abc123",
        "author": User,
        "categories": [Category],
        "clickedCount": 123,
        "comments": [Comment],
        "commentsCount": 987,
        "content": "xyz789",
        "createdAt": "abc123",
        "deleted": true,
        "disabled": true,
        "emotions": [EMOTED],
        "emotionsCount": 987,
        "eventEnd": "abc123",
        "eventIsOnline": true,
        "eventLocation": Location,
        "eventLocationName": "abc123",
        "eventStart": "abc123",
        "eventVenue": "xyz789",
        "group": Group,
        "groupPinned": true,
        "id": "4",
        "image": Image,
        "isObservedByMe": false,
        "language": "abc123",
        "lat": 987.65,
        "lng": 123.45,
        "objectId": "abc123",
        "observingUsersCount": 987,
        "pinned": true,
        "pinnedAt": "xyz789",
        "pinnedBy": User,
        "postType": ["Article"],
        "relatedContributions": [Post],
        "shoutedBy": [User],
        "shoutedByCurrentUser": true,
        "shoutedCount": 123,
        "slug": "abc123",
        "sortDate": "abc123",
        "tags": [Tag],
        "title": "xyz789",
        "unreadCommentNotificationsByCurrentUser": [
          NOTIFIED
        ],
        "unreadNotificationByCurrentUser": NOTIFIED,
        "updatedAt": "xyz789",
        "viewedTeaserByCurrentUser": true,
        "viewedTeaserCount": 987,
        "visibility": "friends"
      }
    ]
  }
}

queryLocations

Description

Search for places via the MapBox geocoder, to attach a location to a profile, group or event. Public.

Response

Returns [LocationMapBox]!

Arguments
Name Description
lang - String!
place - String!
proximity - String
types - String

Example

Query
query queryLocations(
  $lang: String!,
  $place: String!,
  $proximity: String,
  $types: String
) {
  queryLocations(
    lang: $lang,
    place: $place,
    proximity: $proximity,
    types: $types
  ) {
    id
    lat
    lng
    place_name
  }
}
Variables
{
  "lang": "abc123",
  "place": "xyz789",
  "proximity": "abc123",
  "types": "xyz789"
}
Response
{
  "data": {
    "queryLocations": [
      {
        "id": 4,
        "lat": 987.65,
        "lng": 123.45,
        "place_name": "xyz789"
      }
    ]
  }
}

reports

Description

List moderation reports for the moderation queue. Requires the content.moderate permission.

Response

Returns [Report]

Arguments
Name Description
closed - Boolean Filter by whether the report is closed.
first - Int
offset - Int
orderBy - ReportOrdering
reviewed - Boolean Filter by whether the report has been reviewed.

Example

Query
query reports(
  $closed: Boolean,
  $first: Int,
  $offset: Int,
  $orderBy: ReportOrdering,
  $reviewed: Boolean
) {
  reports(
    closed: $closed,
    first: $first,
    offset: $offset,
    orderBy: $orderBy,
    reviewed: $reviewed
  ) {
    closed
    createdAt
    disable
    filed {
      ...FILEDFragment
    }
    id
    resource {
      ... on Comment {
        ...CommentFragment
      }
      ... on Post {
        ...PostFragment
      }
      ... on User {
        ...UserFragment
      }
    }
    reviewed {
      ...REVIEWEDFragment
    }
    rule
    updatedAt
  }
}
Variables
{
  "closed": true,
  "first": 987,
  "offset": 987,
  "orderBy": "createdAt_asc",
  "reviewed": false
}
Response
{
  "data": {
    "reports": [
      {
        "closed": true,
        "createdAt": "xyz789",
        "disable": false,
        "filed": [FILED],
        "id": "4",
        "resource": Comment,
        "reviewed": [REVIEWED],
        "rule": "latestReviewUpdatedAtRules",
        "updatedAt": "xyz789"
      }
    ]
  }
}

roles

Description

All roles with their permission bundles and member counts (role.manage).

Response

Returns [Role!]!

Example

Query
query roles {
  roles {
    memberCount
    name
    permissions
    protected
  }
}
Response
{
  "data": {
    "roles": [
      {
        "memberCount": 123,
        "name": "abc123",
        "permissions": ["abc123"],
        "protected": true
      }
    ]
  }
}

searchChatTargets

Description

Search for users and groups to start a chat with. Requires authentication.

Response

Returns [ChatTarget]!

Arguments
Name Description
limit - Int Default = 10
query - String!

Example

Query
query searchChatTargets(
  $limit: Int,
  $query: String!
) {
  searchChatTargets(
    limit: $limit,
    query: $query
  ) {
    ... on Group {
      ...GroupFragment
    }
    ... on User {
      ...UserFragment
    }
  }
}
Variables
{"limit": 10, "query": "xyz789"}
Response
{"data": {"searchChatTargets": [Group]}}

searchGroups

Description

Search groups by name/description. Public.

Response

Returns a groupSearchResults!

Arguments
Name Description
firstGroups - Int
groupsOffset - Int
query - String!

Example

Query
query searchGroups(
  $firstGroups: Int,
  $groupsOffset: Int,
  $query: String!
) {
  searchGroups(
    firstGroups: $firstGroups,
    groupsOffset: $groupsOffset,
    query: $query
  ) {
    groupCount
    groups {
      ...GroupFragment
    }
  }
}
Variables
{
  "firstGroups": 987,
  "groupsOffset": 987,
  "query": "abc123"
}
Response
{
  "data": {
    "searchGroups": {"groupCount": 987, "groups": [Group]}
  }
}

searchHashtags

Description

Search hashtags. Public.

Response

Returns a hashtagSearchResults!

Arguments
Name Description
firstHashtags - Int
hashtagsOffset - Int
query - String!

Example

Query
query searchHashtags(
  $firstHashtags: Int,
  $hashtagsOffset: Int,
  $query: String!
) {
  searchHashtags(
    firstHashtags: $firstHashtags,
    hashtagsOffset: $hashtagsOffset,
    query: $query
  ) {
    hashtagCount
    hashtags {
      ...TagFragment
    }
  }
}
Variables
{
  "firstHashtags": 987,
  "hashtagsOffset": 987,
  "query": "abc123"
}
Response
{
  "data": {
    "searchHashtags": {
      "hashtagCount": 123,
      "hashtags": [Tag]
    }
  }
}

searchPosts

Description

Search posts by title/content. Public.

Response

Returns a postSearchResults!

Arguments
Name Description
firstPosts - Int
postsOffset - Int
query - String!

Example

Query
query searchPosts(
  $firstPosts: Int,
  $postsOffset: Int,
  $query: String!
) {
  searchPosts(
    firstPosts: $firstPosts,
    postsOffset: $postsOffset,
    query: $query
  ) {
    postCount
    posts {
      ...PostFragment
    }
  }
}
Variables
{
  "firstPosts": 987,
  "postsOffset": 123,
  "query": "xyz789"
}
Response
{
  "data": {
    "searchPosts": {"postCount": 987, "posts": [Post]}
  }
}

searchResults

Description

Combined search across posts, users, tags and groups, for the global search box. Public.

Response

Returns [SearchResult]!

Arguments
Name Description
limit - Int Default = 5
query - String!

Example

Query
query searchResults(
  $limit: Int,
  $query: String!
) {
  searchResults(
    limit: $limit,
    query: $query
  ) {
    ... on Group {
      ...GroupFragment
    }
    ... on Post {
      ...PostFragment
    }
    ... on Tag {
      ...TagFragment
    }
    ... on User {
      ...UserFragment
    }
  }
}
Variables
{"limit": 5, "query": "xyz789"}
Response
{"data": {"searchResults": [Group]}}

searchUsers

Description

Search users by name/slug. Public.

Response

Returns a userSearchResults!

Arguments
Name Description
firstUsers - Int
query - String!
usersOffset - Int

Example

Query
query searchUsers(
  $firstUsers: Int,
  $query: String!,
  $usersOffset: Int
) {
  searchUsers(
    firstUsers: $firstUsers,
    query: $query,
    usersOffset: $usersOffset
  ) {
    userCount
    users {
      ...UserFragment
    }
  }
}
Variables
{
  "firstUsers": 123,
  "query": "xyz789",
  "usersOffset": 987
}
Response
{
  "data": {
    "searchUsers": {"userCount": 123, "users": [User]}
  }
}

statistics

Description

Instance-wide usage counters. Requires the network.statistics.read permission.

Response

Returns a Statistics!

Example

Query
query statistics {
  statistics {
    badgesDisplayed
    badgesRewarded
    chatMessages
    chatRooms
    comments
    emails
    follows
    groups
    inviteCodes
    inviteCodesExpired
    inviteCodesRedeemed
    invites
    locations
    notifications
    posts
    reports
    shouts
    tags
    users
    usersDeleted
    usersVerified
  }
}
Response
{
  "data": {
    "statistics": {
      "badgesDisplayed": 123,
      "badgesRewarded": 123,
      "chatMessages": 123,
      "chatRooms": 123,
      "comments": 123,
      "emails": 987,
      "follows": 987,
      "groups": 987,
      "inviteCodes": 987,
      "inviteCodesExpired": 987,
      "inviteCodesRedeemed": 123,
      "invites": 987,
      "locations": 987,
      "notifications": 987,
      "posts": 987,
      "reports": 123,
      "shouts": 123,
      "tags": 987,
      "users": 987,
      "usersDeleted": 123,
      "usersVerified": 987
    }
  }
}

systemConfig

Description

Every environment variable the deployment recognises, with its effective/override/env-value/software-default layers and presence state (policy.manage). Secret values are never returned — only presence state.

Response

Returns [SystemConfigEntry!]!

Example

Query
query systemConfig {
  systemConfig {
    blocking
    category
    effective
    envKey
    envValue
    overridable
    override
    policyKey
    secret
    softwareDefault
    state
  }
}
Response
{
  "data": {
    "systemConfig": [
      {
        "blocking": false,
        "category": "auth",
        "effective": "abc123",
        "envKey": "abc123",
        "envValue": "xyz789",
        "overridable": true,
        "override": "abc123",
        "policyKey": "xyz789",
        "secret": false,
        "softwareDefault": "xyz789",
        "state": "empty"
      }
    ]
  }
}

userData

Description

Fetch a user together with their posts. Defaults to the current user when no id is given. Requires authentication.

Response

Returns a UserData

Arguments
Name Description
id - ID

Example

Query
query userData($id: ID) {
  userData(id: $id) {
    posts {
      ...PostFragment
    }
    user {
      ...UserFragment
    }
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "userData": {
      "posts": [Post],
      "user": User
    }
  }
}

userRoles

Description

The roles assigned to a specific user (role.manage) — for the admin UI.

Response

Returns [Role!]!

Arguments
Name Description
userId - ID!

Example

Query
query userRoles($userId: ID!) {
  userRoles(userId: $userId) {
    memberCount
    name
    permissions
    protected
  }
}
Variables
{"userId": "4"}
Response
{
  "data": {
    "userRoles": [
      {
        "memberCount": 987,
        "name": "xyz789",
        "permissions": ["abc123"],
        "protected": false
      }
    ]
  }
}

validateInviteCode

Description

Look up an invite code and its validity, e.g. on the registration screen. Public.

Response

Returns an InviteCode

Arguments
Name Description
code - String!

Example

Query
query validateInviteCode($code: String!) {
  validateInviteCode(code: $code) {
    code
    comment
    createdAt
    expiresAt
    generatedBy {
      ...UserFragment
    }
    invitedTo {
      ...GroupFragment
    }
    isValid
    redeemedBy {
      ...UserFragment
    }
    redeemedByCount
  }
}
Variables
{"code": "xyz789"}
Response
{
  "data": {
    "validateInviteCode": {
      "code": "4",
      "comment": "abc123",
      "createdAt": "abc123",
      "expiresAt": "abc123",
      "generatedBy": User,
      "invitedTo": Group,
      "isValid": true,
      "redeemedBy": [User],
      "redeemedByCount": 987
    }
  }
}

videoCallConfig

Description

Whether video calls are enabled on this instance. Public.

Response

Returns a VideoCallConfig!

Example

Query
query videoCallConfig {
  videoCallConfig {
    enabled
  }
}
Response
{"data": {"videoCallConfig": {"enabled": false}}}

videoCallParticipantCount

Description

Current number of participants in a group's video call. Requires authentication.

Response

Returns an Int!

Arguments
Name Description
groupId - ID!

Example

Query
query videoCallParticipantCount($groupId: ID!) {
  videoCallParticipantCount(groupId: $groupId)
}
Variables
{"groupId": 4}
Response
{"data": {"videoCallParticipantCount": 123}}

Mutations

AddEmailAddress

Description

Add a further email address to the current account, sending a verification nonce. Requires authentication.

Response

Returns an EmailAddress

Arguments
Name Description
email - String!

Example

Query
mutation AddEmailAddress($email: String!) {
  AddEmailAddress(email: $email) {
    createdAt
    email
    verifiedAt
  }
}
Variables
{"email": "xyz789"}
Response
{
  "data": {
    "AddEmailAddress": {
      "createdAt": "abc123",
      "email": "4",
      "verifiedAt": "abc123"
    }
  }
}

AddPostEmotions

Description

Add the current user's emotional reaction to a post. Requires authentication.

Response

Returns an EMOTED

Arguments
Name Description
data - _EMOTEDInput!
to - _PostInput!

Example

Query
mutation AddPostEmotions(
  $data: _EMOTEDInput!,
  $to: _PostInput!
) {
  AddPostEmotions(
    data: $data,
    to: $to
  ) {
    createdAt
    emotion
    from {
      ...UserFragment
    }
    to {
      ...PostFragment
    }
    updatedAt
  }
}
Variables
{
  "data": _EMOTEDInput,
  "to": _PostInput
}
Response
{
  "data": {
    "AddPostEmotions": {
      "createdAt": "abc123",
      "emotion": "angry",
      "from": User,
      "to": Post,
      "updatedAt": "xyz789"
    }
  }
}

ChangeGroupMemberRole

Description

Change a member's role in a group. Restricted to admins/owners, subject to the role hierarchy.

Response

Returns a GroupMember

Arguments
Name Description
groupId - ID!
roleInGroup - GroupMemberRole!
userId - ID!

Example

Query
mutation ChangeGroupMemberRole(
  $groupId: ID!,
  $roleInGroup: GroupMemberRole!,
  $userId: ID!
) {
  ChangeGroupMemberRole(
    groupId: $groupId,
    roleInGroup: $roleInGroup,
    userId: $userId
  ) {
    membership {
      ...MEMBER_OFFragment
    }
    user {
      ...UserFragment
    }
  }
}
Variables
{"groupId": 4, "roleInGroup": "admin", "userId": 4}
Response
{
  "data": {
    "ChangeGroupMemberRole": {
      "membership": MEMBER_OF,
      "user": User
    }
  }
}

CreateComment

Description

Write a comment on a post. Requires authentication, the comment.create permission, and permission to comment on that post.

Response

Returns a Comment

Arguments
Name Description
content - String!
id - ID
postId - ID!

Example

Query
mutation CreateComment(
  $content: String!,
  $id: ID,
  $postId: ID!
) {
  CreateComment(
    content: $content,
    id: $id,
    postId: $postId
  ) {
    activityId
    author {
      ...UserFragment
    }
    content
    createdAt
    deleted
    disabled
    id
    isPostObservedByMe
    post {
      ...PostFragment
    }
    postObservingUsersCount
    shoutedByCurrentUser
    shoutedCount
    updatedAt
  }
}
Variables
{
  "content": "abc123",
  "id": "4",
  "postId": 4
}
Response
{
  "data": {
    "CreateComment": {
      "activityId": "abc123",
      "author": User,
      "content": "abc123",
      "createdAt": "xyz789",
      "deleted": true,
      "disabled": true,
      "id": "4",
      "isPostObservedByMe": true,
      "post": Post,
      "postObservingUsersCount": 987,
      "shoutedByCurrentUser": false,
      "shoutedCount": 123,
      "updatedAt": "abc123"
    }
  }
}

CreateGroup

Description

Create a group. Requires authentication and the group.create_<type> permission matching the chosen groupType.

Response

Returns a Group

Arguments
Name Description
about - String
actionRadius - GroupActionRadius!
categoryIds - [ID]
description - String!
groupType - GroupType!
id - ID
locationName - String Empty string '' clears the location (sets it to null).
name - String!
showMembers - Boolean
slug - String

Example

Query
mutation CreateGroup(
  $about: String,
  $actionRadius: GroupActionRadius!,
  $categoryIds: [ID],
  $description: String!,
  $groupType: GroupType!,
  $id: ID,
  $locationName: String,
  $name: String!,
  $showMembers: Boolean,
  $slug: String
) {
  CreateGroup(
    about: $about,
    actionRadius: $actionRadius,
    categoryIds: $categoryIds,
    description: $description,
    groupType: $groupType,
    id: $id,
    locationName: $locationName,
    name: $name,
    showMembers: $showMembers,
    slug: $slug
  ) {
    about
    actionRadius
    avatar {
      ...ImageFragment
    }
    categories {
      ...CategoryFragment
    }
    createdAt
    currentlyPinnedPostsCount
    deleted
    description
    disabled
    groupType
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    isMutedByMe
    location {
      ...LocationFragment
    }
    locationName
    membersCount
    myRole
    name
    posts {
      ...PostFragment
    }
    postsCount
    showMembers
    showOnProfile
    slug
    updatedAt
  }
}
Variables
{
  "about": "abc123",
  "actionRadius": "continental",
  "categoryIds": ["4"],
  "description": "abc123",
  "groupType": "closed",
  "id": 4,
  "locationName": "abc123",
  "name": "abc123",
  "showMembers": false,
  "slug": "abc123"
}
Response
{
  "data": {
    "CreateGroup": {
      "about": "xyz789",
      "actionRadius": "continental",
      "avatar": Image,
      "categories": [Category],
      "createdAt": "abc123",
      "currentlyPinnedPostsCount": 123,
      "deleted": false,
      "description": "xyz789",
      "disabled": true,
      "groupType": "closed",
      "id": "4",
      "inviteCodes": [InviteCode],
      "isMutedByMe": false,
      "location": Location,
      "locationName": "xyz789",
      "membersCount": 123,
      "myRole": "admin",
      "name": "xyz789",
      "posts": [Post],
      "postsCount": 123,
      "showMembers": true,
      "showOnProfile": false,
      "slug": "abc123",
      "updatedAt": "xyz789"
    }
  }
}

CreateGroupRoom

Description

Create (or fetch) the chat room for a group. Requires authentication.

Response

Returns a Room

Arguments
Name Description
groupId - ID!

Example

Query
mutation CreateGroupRoom($groupId: ID!) {
  CreateGroupRoom(groupId: $groupId) {
    _id
    avatar
    createdAt
    group {
      ...GroupFragment
    }
    id
    isGroupRoom
    lastMessage {
      ...MessageFragment
    }
    lastMessageAt
    roomId
    roomName
    unreadCount
    updatedAt
    users {
      ...UserFragment
    }
  }
}
Variables
{"groupId": 4}
Response
{
  "data": {
    "CreateGroupRoom": {
      "_id": "xyz789",
      "avatar": "abc123",
      "createdAt": "xyz789",
      "group": Group,
      "id": 4,
      "isGroupRoom": false,
      "lastMessage": Message,
      "lastMessageAt": "xyz789",
      "roomId": "xyz789",
      "roomName": "abc123",
      "unreadCount": 987,
      "updatedAt": "xyz789",
      "users": [User]
    }
  }
}

CreateMessage

Description

Send a message to a room (by roomId) or to a user (by userId, opening a direct room). Requires authentication.

Response

Returns a Message

Arguments
Name Description
content - String
files - [FileInput]
roomId - ID
userId - ID

Example

Query
mutation CreateMessage(
  $content: String,
  $files: [FileInput],
  $roomId: ID,
  $userId: ID
) {
  CreateMessage(
    content: $content,
    files: $files,
    roomId: $roomId,
    userId: $userId
  ) {
    _id
    author {
      ...UserFragment
    }
    avatar
    content
    createdAt
    date
    distributed
    files {
      ...FileFragment
    }
    id
    indexId
    room {
      ...RoomFragment
    }
    saved
    seen
    senderId
    updatedAt
    username
  }
}
Variables
{
  "content": "abc123",
  "files": [FileInput],
  "roomId": "4",
  "userId": "4"
}
Response
{
  "data": {
    "CreateMessage": {
      "_id": "abc123",
      "author": User,
      "avatar": "abc123",
      "content": "abc123",
      "createdAt": "abc123",
      "date": "abc123",
      "distributed": false,
      "files": [File],
      "id": "4",
      "indexId": 123,
      "room": Room,
      "saved": false,
      "seen": true,
      "senderId": "abc123",
      "updatedAt": "xyz789",
      "username": "abc123"
    }
  }
}

CreatePost

Description

Create a post. Requires authentication and the post.create permission; posting into a group additionally requires membership of that group.

Response

Returns a Post

Arguments
Name Description
categoryIds - [ID]
content - String!
eventInput - _EventInput Event details; required when postType is Event.
groupId - ID Post into this group; omit for a public/timeline post.
id - ID
image - ImageInput
language - String
postType - PostType Default = Article
slug - String
title - String!
visibility - Visibility

Example

Query
mutation CreatePost(
  $categoryIds: [ID],
  $content: String!,
  $eventInput: _EventInput,
  $groupId: ID,
  $id: ID,
  $image: ImageInput,
  $language: String,
  $postType: PostType,
  $slug: String,
  $title: String!,
  $visibility: Visibility
) {
  CreatePost(
    categoryIds: $categoryIds,
    content: $content,
    eventInput: $eventInput,
    groupId: $groupId,
    id: $id,
    image: $image,
    language: $language,
    postType: $postType,
    slug: $slug,
    title: $title,
    visibility: $visibility
  ) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{
  "categoryIds": [4],
  "content": "abc123",
  "eventInput": _EventInput,
  "groupId": 4,
  "id": "4",
  "image": ImageInput,
  "language": "xyz789",
  "postType": "Article",
  "slug": "abc123",
  "title": "xyz789",
  "visibility": "friends"
}
Response
{
  "data": {
    "CreatePost": {
      "activityId": "xyz789",
      "author": User,
      "categories": [Category],
      "clickedCount": 123,
      "comments": [Comment],
      "commentsCount": 123,
      "content": "abc123",
      "createdAt": "xyz789",
      "deleted": false,
      "disabled": true,
      "emotions": [EMOTED],
      "emotionsCount": 123,
      "eventEnd": "xyz789",
      "eventIsOnline": false,
      "eventLocation": Location,
      "eventLocationName": "abc123",
      "eventStart": "abc123",
      "eventVenue": "abc123",
      "group": Group,
      "groupPinned": true,
      "id": "4",
      "image": Image,
      "isObservedByMe": true,
      "language": "xyz789",
      "lat": 123.45,
      "lng": 987.65,
      "objectId": "xyz789",
      "observingUsersCount": 123,
      "pinned": true,
      "pinnedAt": "xyz789",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": false,
      "shoutedCount": 987,
      "slug": "abc123",
      "sortDate": "xyz789",
      "tags": [Tag],
      "title": "abc123",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "abc123",
      "viewedTeaserByCurrentUser": true,
      "viewedTeaserCount": 123,
      "visibility": "friends"
    }
  }
}

CreateSocialMedia

Description

Add a social-media link to your profile. Requires the socialMedia.create permission.

Response

Returns a SocialMedia

Arguments
Name Description
id - ID
url - String!

Example

Query
mutation CreateSocialMedia(
  $id: ID,
  $url: String!
) {
  CreateSocialMedia(
    id: $id,
    url: $url
  ) {
    id
    ownedBy {
      ...UserFragment
    }
    url
  }
}
Variables
{
  "id": "4",
  "url": "abc123"
}
Response
{
  "data": {
    "CreateSocialMedia": {
      "id": 4,
      "ownedBy": User,
      "url": "abc123"
    }
  }
}

DeleteComment

Description

Delete one of your own comments. Restricted to the author.

Response

Returns a Comment

Arguments
Name Description
id - ID!

Example

Query
mutation DeleteComment($id: ID!) {
  DeleteComment(id: $id) {
    activityId
    author {
      ...UserFragment
    }
    content
    createdAt
    deleted
    disabled
    id
    isPostObservedByMe
    post {
      ...PostFragment
    }
    postObservingUsersCount
    shoutedByCurrentUser
    shoutedCount
    updatedAt
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "DeleteComment": {
      "activityId": "abc123",
      "author": User,
      "content": "xyz789",
      "createdAt": "xyz789",
      "deleted": true,
      "disabled": false,
      "id": 4,
      "isPostObservedByMe": true,
      "post": Post,
      "postObservingUsersCount": 987,
      "shoutedByCurrentUser": true,
      "shoutedCount": 987,
      "updatedAt": "abc123"
    }
  }
}

DeletePost

Description

Delete one of your own posts. Restricted to the author.

Response

Returns a Post

Arguments
Name Description
id - ID!

Example

Query
mutation DeletePost($id: ID!) {
  DeletePost(id: $id) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "DeletePost": {
      "activityId": "xyz789",
      "author": User,
      "categories": [Category],
      "clickedCount": 987,
      "comments": [Comment],
      "commentsCount": 987,
      "content": "xyz789",
      "createdAt": "abc123",
      "deleted": true,
      "disabled": false,
      "emotions": [EMOTED],
      "emotionsCount": 123,
      "eventEnd": "abc123",
      "eventIsOnline": true,
      "eventLocation": Location,
      "eventLocationName": "abc123",
      "eventStart": "xyz789",
      "eventVenue": "abc123",
      "group": Group,
      "groupPinned": true,
      "id": "4",
      "image": Image,
      "isObservedByMe": false,
      "language": "xyz789",
      "lat": 123.45,
      "lng": 987.65,
      "objectId": "xyz789",
      "observingUsersCount": 987,
      "pinned": false,
      "pinnedAt": "xyz789",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": true,
      "shoutedCount": 987,
      "slug": "abc123",
      "sortDate": "abc123",
      "tags": [Tag],
      "title": "abc123",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "abc123",
      "viewedTeaserByCurrentUser": false,
      "viewedTeaserCount": 987,
      "visibility": "friends"
    }
  }
}

DeleteSocialMedia

Description

Remove one of your own social-media links. Restricted to the owner.

Response

Returns a SocialMedia

Arguments
Name Description
id - ID!

Example

Query
mutation DeleteSocialMedia($id: ID!) {
  DeleteSocialMedia(id: $id) {
    id
    ownedBy {
      ...UserFragment
    }
    url
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "DeleteSocialMedia": {
      "id": 4,
      "ownedBy": User,
      "url": "xyz789"
    }
  }
}

DeleteUser

Description

Delete a user account. Allowed for the account owner, or with user.delete.any subject to the act-on hierarchy. Optionally also delete the user's posts and/or comments via resource.

Response

Returns a User

Arguments
Name Description
id - ID!
resource - [Deletable]

Example

Query
mutation DeleteUser(
  $id: ID!,
  $resource: [Deletable]
) {
  DeleteUser(
    id: $id,
    resource: $resource
  ) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"id": "4", "resource": ["Comment"]}
Response
{
  "data": {
    "DeleteUser": {
      "_id": "xyz789",
      "about": "abc123",
      "activeCategories": ["abc123"],
      "actorId": "xyz789",
      "allowEmbedIframes": true,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 123,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 123,
      "badgeVerification": Badge,
      "blocked": true,
      "categories": [Category],
      "commentedCount": 987,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 987,
      "createdAt": "abc123",
      "deleted": false,
      "disabled": false,
      "email": "xyz789",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 123,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 987,
      "friends": [User],
      "friendsCount": 123,
      "groups": [Group],
      "id": "4",
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": true,
      "isMuted": false,
      "locale": "abc123",
      "location": Location,
      "locationName": "xyz789",
      "name": "xyz789",
      "publicKey": "xyz789",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": false,
      "showHiddenGroupsOnProfile": true,
      "showPublicGroupsOnProfile": false,
      "showShoutsPublicly": true,
      "slug": "xyz789",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "abc123",
      "termsAndConditionsAgreedVersion": "abc123",
      "updatedAt": "xyz789"
    }
  }
}

JoinGroup

Description

Join a group, or accept/approve a pending membership. Allowed per the group's join rules; joining on behalf of another user requires the appropriate rights.

Response

Returns a GroupMember

Arguments
Name Description
groupId - ID!
userId - ID!

Example

Query
mutation JoinGroup(
  $groupId: ID!,
  $userId: ID!
) {
  JoinGroup(
    groupId: $groupId,
    userId: $userId
  ) {
    membership {
      ...MEMBER_OFFragment
    }
    user {
      ...UserFragment
    }
  }
}
Variables
{"groupId": "4", "userId": 4}
Response
{
  "data": {
    "JoinGroup": {
      "membership": MEMBER_OF,
      "user": User
    }
  }
}

LeaveGroup

Description

Leave a group, or (for admins/owners) let a member leave.

Response

Returns a GroupMember

Arguments
Name Description
groupId - ID!
userId - ID!

Example

Query
mutation LeaveGroup(
  $groupId: ID!,
  $userId: ID!
) {
  LeaveGroup(
    groupId: $groupId,
    userId: $userId
  ) {
    membership {
      ...MEMBER_OFFragment
    }
    user {
      ...UserFragment
    }
  }
}
Variables
{"groupId": 4, "userId": "4"}
Response
{
  "data": {
    "LeaveGroup": {
      "membership": MEMBER_OF,
      "user": User
    }
  }
}

MarkMessagesAsSeen

Description

Mark the given messages as seen by the current user. Requires authentication.

Response

Returns a Boolean

Arguments
Name Description
messageIds - [String!]

Example

Query
mutation MarkMessagesAsSeen($messageIds: [String!]) {
  MarkMessagesAsSeen(messageIds: $messageIds)
}
Variables
{"messageIds": ["abc123"]}
Response
{"data": {"MarkMessagesAsSeen": true}}

RemovePostEmotions

Description

Remove the current user's emotional reaction from a post. Requires authentication.

Response

Returns an EMOTED

Arguments
Name Description
data - _EMOTEDInput!
to - _PostInput!

Example

Query
mutation RemovePostEmotions(
  $data: _EMOTEDInput!,
  $to: _PostInput!
) {
  RemovePostEmotions(
    data: $data,
    to: $to
  ) {
    createdAt
    emotion
    from {
      ...UserFragment
    }
    to {
      ...PostFragment
    }
    updatedAt
  }
}
Variables
{
  "data": _EMOTEDInput,
  "to": _PostInput
}
Response
{
  "data": {
    "RemovePostEmotions": {
      "createdAt": "xyz789",
      "emotion": "angry",
      "from": User,
      "to": Post,
      "updatedAt": "abc123"
    }
  }
}

RemoveUserFromGroup

Description

Remove a user from a group. Restricted to those allowed to manage the group's members.

Response

Returns a GroupMember

Arguments
Name Description
groupId - ID!
userId - ID!

Example

Query
mutation RemoveUserFromGroup(
  $groupId: ID!,
  $userId: ID!
) {
  RemoveUserFromGroup(
    groupId: $groupId,
    userId: $userId
  ) {
    membership {
      ...MEMBER_OFFragment
    }
    user {
      ...UserFragment
    }
  }
}
Variables
{"groupId": 4, "userId": 4}
Response
{
  "data": {
    "RemoveUserFromGroup": {
      "membership": MEMBER_OF,
      "user": User
    }
  }
}

Signup

Description

Begin registration for an email address, sending a verification nonce. Allowed when public or invite registration is enabled (or by an admin with role.manage); an inviteCode is required for invite-only registration.

Response

Returns an EmailAddress

Arguments
Name Description
email - String!
inviteCode - String Default = null
locale - String!

Example

Query
mutation Signup(
  $email: String!,
  $inviteCode: String,
  $locale: String!
) {
  Signup(
    email: $email,
    inviteCode: $inviteCode,
    locale: $locale
  ) {
    createdAt
    email
    verifiedAt
  }
}
Variables
{
  "email": "abc123",
  "inviteCode": null,
  "locale": "abc123"
}
Response
{
  "data": {
    "Signup": {
      "createdAt": "abc123",
      "email": 4,
      "verifiedAt": "abc123"
    }
  }
}

SignupVerification

Description

Complete registration by confirming the nonce and creating the user account. Public.

Response

Returns a User

Arguments
Name Description
about - String
email - String!
inviteCode - String Default = null
locale - String
locationName - String Default = null
name - String!
nonce - String!
password - String!
slug - String
termsAndConditionsAgreedVersion - String!

Example

Query
mutation SignupVerification(
  $about: String,
  $email: String!,
  $inviteCode: String,
  $locale: String,
  $locationName: String,
  $name: String!,
  $nonce: String!,
  $password: String!,
  $slug: String,
  $termsAndConditionsAgreedVersion: String!
) {
  SignupVerification(
    about: $about,
    email: $email,
    inviteCode: $inviteCode,
    locale: $locale,
    locationName: $locationName,
    name: $name,
    nonce: $nonce,
    password: $password,
    slug: $slug,
    termsAndConditionsAgreedVersion: $termsAndConditionsAgreedVersion
  ) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{
  "about": "abc123",
  "email": "xyz789",
  "inviteCode": null,
  "locale": "abc123",
  "locationName": null,
  "name": "abc123",
  "nonce": "abc123",
  "password": "xyz789",
  "slug": "abc123",
  "termsAndConditionsAgreedVersion": "xyz789"
}
Response
{
  "data": {
    "SignupVerification": {
      "_id": "abc123",
      "about": "xyz789",
      "activeCategories": ["abc123"],
      "actorId": "xyz789",
      "allowEmbedIframes": true,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 123,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 987,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 123,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 987,
      "createdAt": "xyz789",
      "deleted": true,
      "disabled": false,
      "email": "abc123",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 987,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 123,
      "friends": [User],
      "friendsCount": 987,
      "groups": [Group],
      "id": "4",
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": false,
      "isMuted": true,
      "locale": "xyz789",
      "location": Location,
      "locationName": "xyz789",
      "name": "abc123",
      "publicKey": "xyz789",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": true,
      "showPublicGroupsOnProfile": true,
      "showShoutsPublicly": false,
      "slug": "abc123",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "abc123",
      "termsAndConditionsAgreedVersion": "xyz789",
      "updatedAt": "abc123"
    }
  }
}

UpdateComment

Description

Edit one of your own comments. Restricted to the author.

Response

Returns a Comment

Arguments
Name Description
content - String!
id - ID!

Example

Query
mutation UpdateComment(
  $content: String!,
  $id: ID!
) {
  UpdateComment(
    content: $content,
    id: $id
  ) {
    activityId
    author {
      ...UserFragment
    }
    content
    createdAt
    deleted
    disabled
    id
    isPostObservedByMe
    post {
      ...PostFragment
    }
    postObservingUsersCount
    shoutedByCurrentUser
    shoutedCount
    updatedAt
  }
}
Variables
{"content": "abc123", "id": 4}
Response
{
  "data": {
    "UpdateComment": {
      "activityId": "abc123",
      "author": User,
      "content": "abc123",
      "createdAt": "abc123",
      "deleted": false,
      "disabled": true,
      "id": 4,
      "isPostObservedByMe": true,
      "post": Post,
      "postObservingUsersCount": 123,
      "shoutedByCurrentUser": true,
      "shoutedCount": 123,
      "updatedAt": "abc123"
    }
  }
}

UpdateDonations

Description

Update the donation campaign settings. Requires the donation.manage permission.

Response

Returns a Donations

Arguments
Name Description
goal - Int
progress - Int
showDonations - Boolean

Example

Query
mutation UpdateDonations(
  $goal: Int,
  $progress: Int,
  $showDonations: Boolean
) {
  UpdateDonations(
    goal: $goal,
    progress: $progress,
    showDonations: $showDonations
  ) {
    createdAt
    goal
    id
    progress
    showDonations
    updatedAt
  }
}
Variables
{"goal": 987, "progress": 123, "showDonations": false}
Response
{
  "data": {
    "UpdateDonations": {
      "createdAt": "xyz789",
      "goal": 123,
      "id": "4",
      "progress": 123,
      "showDonations": true,
      "updatedAt": "xyz789"
    }
  }
}

UpdateGroup

Description

Update a group's settings. Restricted to admins/owners of the group.

Response

Returns a Group

Arguments
Name Description
about - String
actionRadius - GroupActionRadius
avatar - ImageInput
categoryIds - [ID]
description - String
groupType - GroupType
id - ID!
locationName - String Empty string '' clears the location (sets it to null).
name - String
showMembers - Boolean
slug - String

Example

Query
mutation UpdateGroup(
  $about: String,
  $actionRadius: GroupActionRadius,
  $avatar: ImageInput,
  $categoryIds: [ID],
  $description: String,
  $groupType: GroupType,
  $id: ID!,
  $locationName: String,
  $name: String,
  $showMembers: Boolean,
  $slug: String
) {
  UpdateGroup(
    about: $about,
    actionRadius: $actionRadius,
    avatar: $avatar,
    categoryIds: $categoryIds,
    description: $description,
    groupType: $groupType,
    id: $id,
    locationName: $locationName,
    name: $name,
    showMembers: $showMembers,
    slug: $slug
  ) {
    about
    actionRadius
    avatar {
      ...ImageFragment
    }
    categories {
      ...CategoryFragment
    }
    createdAt
    currentlyPinnedPostsCount
    deleted
    description
    disabled
    groupType
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    isMutedByMe
    location {
      ...LocationFragment
    }
    locationName
    membersCount
    myRole
    name
    posts {
      ...PostFragment
    }
    postsCount
    showMembers
    showOnProfile
    slug
    updatedAt
  }
}
Variables
{
  "about": "abc123",
  "actionRadius": "continental",
  "avatar": ImageInput,
  "categoryIds": [4],
  "description": "xyz789",
  "groupType": "closed",
  "id": "4",
  "locationName": "xyz789",
  "name": "xyz789",
  "showMembers": false,
  "slug": "xyz789"
}
Response
{
  "data": {
    "UpdateGroup": {
      "about": "xyz789",
      "actionRadius": "continental",
      "avatar": Image,
      "categories": [Category],
      "createdAt": "xyz789",
      "currentlyPinnedPostsCount": 123,
      "deleted": true,
      "description": "abc123",
      "disabled": true,
      "groupType": "closed",
      "id": "4",
      "inviteCodes": [InviteCode],
      "isMutedByMe": true,
      "location": Location,
      "locationName": "xyz789",
      "membersCount": 987,
      "myRole": "admin",
      "name": "abc123",
      "posts": [Post],
      "postsCount": 123,
      "showMembers": false,
      "showOnProfile": false,
      "slug": "abc123",
      "updatedAt": "abc123"
    }
  }
}

UpdatePost

Description

Update one of your own posts. Restricted to the author.

Response

Returns a Post

Arguments
Name Description
categoryIds - [ID]
content - String!
eventInput - _EventInput
id - ID!
image - ImageInput
language - String
postType - PostType
slug - String
title - String!
visibility - Visibility

Example

Query
mutation UpdatePost(
  $categoryIds: [ID],
  $content: String!,
  $eventInput: _EventInput,
  $id: ID!,
  $image: ImageInput,
  $language: String,
  $postType: PostType,
  $slug: String,
  $title: String!,
  $visibility: Visibility
) {
  UpdatePost(
    categoryIds: $categoryIds,
    content: $content,
    eventInput: $eventInput,
    id: $id,
    image: $image,
    language: $language,
    postType: $postType,
    slug: $slug,
    title: $title,
    visibility: $visibility
  ) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{
  "categoryIds": [4],
  "content": "abc123",
  "eventInput": _EventInput,
  "id": "4",
  "image": ImageInput,
  "language": "abc123",
  "postType": "Article",
  "slug": "xyz789",
  "title": "abc123",
  "visibility": "friends"
}
Response
{
  "data": {
    "UpdatePost": {
      "activityId": "abc123",
      "author": User,
      "categories": [Category],
      "clickedCount": 987,
      "comments": [Comment],
      "commentsCount": 123,
      "content": "xyz789",
      "createdAt": "abc123",
      "deleted": false,
      "disabled": true,
      "emotions": [EMOTED],
      "emotionsCount": 987,
      "eventEnd": "xyz789",
      "eventIsOnline": false,
      "eventLocation": Location,
      "eventLocationName": "xyz789",
      "eventStart": "xyz789",
      "eventVenue": "abc123",
      "group": Group,
      "groupPinned": true,
      "id": 4,
      "image": Image,
      "isObservedByMe": false,
      "language": "abc123",
      "lat": 987.65,
      "lng": 987.65,
      "objectId": "abc123",
      "observingUsersCount": 123,
      "pinned": true,
      "pinnedAt": "xyz789",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": true,
      "shoutedCount": 987,
      "slug": "xyz789",
      "sortDate": "abc123",
      "tags": [Tag],
      "title": "abc123",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "xyz789",
      "viewedTeaserByCurrentUser": true,
      "viewedTeaserCount": 987,
      "visibility": "friends"
    }
  }
}

UpdateSocialMedia

Description

Update one of your own social-media links. Restricted to the owner.

Response

Returns a SocialMedia

Arguments
Name Description
id - ID!
url - String!

Example

Query
mutation UpdateSocialMedia(
  $id: ID!,
  $url: String!
) {
  UpdateSocialMedia(
    id: $id,
    url: $url
  ) {
    id
    ownedBy {
      ...UserFragment
    }
    url
  }
}
Variables
{
  "id": "4",
  "url": "abc123"
}
Response
{
  "data": {
    "UpdateSocialMedia": {
      "id": 4,
      "ownedBy": User,
      "url": "abc123"
    }
  }
}

UpdateUser

Description

Update your own profile. Restricted to the account owner.

Response

Returns a User

Arguments
Name Description
about - String
allowEmbedIframes - Boolean
avatar - ImageInput
email - String
emailNotificationSettings - [EmailNotificationSettingsInput]
id - ID!
locale - String
locationName - String Empty string '' clears the location (sets it to null).
name - String
showClosedGroupsOnProfile - Boolean
showHiddenGroupsOnProfile - Boolean
showPublicGroupsOnProfile - Boolean
showShoutsPublicly - Boolean
slug - String
termsAndConditionsAgreedAt - String
termsAndConditionsAgreedVersion - String

Example

Query
mutation UpdateUser(
  $about: String,
  $allowEmbedIframes: Boolean,
  $avatar: ImageInput,
  $email: String,
  $emailNotificationSettings: [EmailNotificationSettingsInput],
  $id: ID!,
  $locale: String,
  $locationName: String,
  $name: String,
  $showClosedGroupsOnProfile: Boolean,
  $showHiddenGroupsOnProfile: Boolean,
  $showPublicGroupsOnProfile: Boolean,
  $showShoutsPublicly: Boolean,
  $slug: String,
  $termsAndConditionsAgreedAt: String,
  $termsAndConditionsAgreedVersion: String
) {
  UpdateUser(
    about: $about,
    allowEmbedIframes: $allowEmbedIframes,
    avatar: $avatar,
    email: $email,
    emailNotificationSettings: $emailNotificationSettings,
    id: $id,
    locale: $locale,
    locationName: $locationName,
    name: $name,
    showClosedGroupsOnProfile: $showClosedGroupsOnProfile,
    showHiddenGroupsOnProfile: $showHiddenGroupsOnProfile,
    showPublicGroupsOnProfile: $showPublicGroupsOnProfile,
    showShoutsPublicly: $showShoutsPublicly,
    slug: $slug,
    termsAndConditionsAgreedAt: $termsAndConditionsAgreedAt,
    termsAndConditionsAgreedVersion: $termsAndConditionsAgreedVersion
  ) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{
  "about": "xyz789",
  "allowEmbedIframes": true,
  "avatar": ImageInput,
  "email": "xyz789",
  "emailNotificationSettings": [
    EmailNotificationSettingsInput
  ],
  "id": "4",
  "locale": "xyz789",
  "locationName": "xyz789",
  "name": "abc123",
  "showClosedGroupsOnProfile": false,
  "showHiddenGroupsOnProfile": true,
  "showPublicGroupsOnProfile": false,
  "showShoutsPublicly": false,
  "slug": "abc123",
  "termsAndConditionsAgreedAt": "xyz789",
  "termsAndConditionsAgreedVersion": "xyz789"
}
Response
{
  "data": {
    "UpdateUser": {
      "_id": "xyz789",
      "about": "xyz789",
      "activeCategories": ["xyz789"],
      "actorId": "xyz789",
      "allowEmbedIframes": false,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 987,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 123,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 987,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "abc123",
      "deleted": false,
      "disabled": false,
      "email": "abc123",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 123,
      "followedByCurrentUser": true,
      "following": [User],
      "followingCount": 987,
      "friends": [User],
      "friendsCount": 987,
      "groups": [Group],
      "id": 4,
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": false,
      "isMuted": true,
      "locale": "abc123",
      "location": Location,
      "locationName": "abc123",
      "name": "abc123",
      "publicKey": "xyz789",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 987,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": false,
      "showPublicGroupsOnProfile": true,
      "showShoutsPublicly": true,
      "slug": "xyz789",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "xyz789",
      "termsAndConditionsAgreedVersion": "xyz789",
      "updatedAt": "xyz789"
    }
  }
}

VerifyEmailAddress

Description

Confirm a pending email address via its nonce. Requires authentication.

Response

Returns an EmailAddress

Arguments
Name Description
email - String!
nonce - String!

Example

Query
mutation VerifyEmailAddress(
  $email: String!,
  $nonce: String!
) {
  VerifyEmailAddress(
    email: $email,
    nonce: $nonce
  ) {
    createdAt
    email
    verifiedAt
  }
}
Variables
{
  "email": "xyz789",
  "nonce": "xyz789"
}
Response
{
  "data": {
    "VerifyEmailAddress": {
      "createdAt": "xyz789",
      "email": 4,
      "verifiedAt": "xyz789"
    }
  }
}

adminRevokeApiKey

Description

Revoke any user's API key (administration). Requires the apiKey.administer permission.

Response

Returns a Boolean!

Arguments
Name Description
id - ID!

Example

Query
mutation adminRevokeApiKey($id: ID!) {
  adminRevokeApiKey(id: $id)
}
Variables
{"id": 4}
Response
{"data": {"adminRevokeApiKey": false}}

adminRevokeUserApiKeys

Description

Revoke all of a user's API keys and return how many were revoked. Requires the apiKey.administer permission.

Response

Returns an Int!

Arguments
Name Description
userId - ID!

Example

Query
mutation adminRevokeUserApiKeys($userId: ID!) {
  adminRevokeUserApiKeys(userId: $userId)
}
Variables
{"userId": 4}
Response
{"data": {"adminRevokeUserApiKeys": 123}}

blockUser

Description

Block a user, cutting off interaction in both directions. Requires authentication.

Response

Returns a User

Arguments
Name Description
id - ID!

Example

Query
mutation blockUser($id: ID!) {
  blockUser(id: $id) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "blockUser": {
      "_id": "xyz789",
      "about": "abc123",
      "activeCategories": ["abc123"],
      "actorId": "xyz789",
      "allowEmbedIframes": false,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 987,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 123,
      "badgeVerification": Badge,
      "blocked": true,
      "categories": [Category],
      "commentedCount": 987,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "xyz789",
      "deleted": false,
      "disabled": false,
      "email": "xyz789",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 987,
      "followedByCurrentUser": true,
      "following": [User],
      "followingCount": 123,
      "friends": [User],
      "friendsCount": 987,
      "groups": [Group],
      "id": 4,
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": true,
      "isMuted": true,
      "locale": "abc123",
      "location": Location,
      "locationName": "xyz789",
      "name": "xyz789",
      "publicKey": "xyz789",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": true,
      "showPublicGroupsOnProfile": false,
      "showShoutsPublicly": true,
      "slug": "abc123",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "abc123",
      "termsAndConditionsAgreedVersion": "abc123",
      "updatedAt": "abc123"
    }
  }
}

changePassword

Description

Change the current user's password. Requires authentication.

Response

Returns a String!

Arguments
Name Description
newPassword - String!
oldPassword - String!

Example

Query
mutation changePassword(
  $newPassword: String!,
  $oldPassword: String!
) {
  changePassword(
    newPassword: $newPassword,
    oldPassword: $oldPassword
  )
}
Variables
{
  "newPassword": "xyz789",
  "oldPassword": "abc123"
}
Response
{"data": {"changePassword": "xyz789"}}

createApiKey

Description

Create a new API key and return its secret (shown only here). Requires the apiKey.create permission (gated by the apiKeysEnabled policy).

Response

Returns an ApiKeyWithSecret!

Arguments
Name Description
expiresInDays - Int
name - String!

Example

Query
mutation createApiKey(
  $expiresInDays: Int,
  $name: String!
) {
  createApiKey(
    expiresInDays: $expiresInDays,
    name: $name
  ) {
    apiKey {
      ...ApiKeyFragment
    }
    secret
  }
}
Variables
{"expiresInDays": 123, "name": "abc123"}
Response
{
  "data": {
    "createApiKey": {
      "apiKey": ApiKey,
      "secret": "xyz789"
    }
  }
}

createRole

Description

Create a new role with the given permission bundle. Requires the role.manage permission.

Response

Returns a Role!

Arguments
Name Description
name - String!
permissions - [String!]!

Example

Query
mutation createRole(
  $name: String!,
  $permissions: [String!]!
) {
  createRole(
    name: $name,
    permissions: $permissions
  ) {
    memberCount
    name
    permissions
    protected
  }
}
Variables
{
  "name": "xyz789",
  "permissions": ["xyz789"]
}
Response
{
  "data": {
    "createRole": {
      "memberCount": 123,
      "name": "abc123",
      "permissions": ["abc123"],
      "protected": false
    }
  }
}

deleteRole

Description

Delete a role. Returns the deleted role's name (the input name echoed back on success). Requires the role.manage permission.

Response

Returns a String!

Arguments
Name Description
name - String!

Example

Query
mutation deleteRole($name: String!) {
  deleteRole(name: $name)
}
Variables
{"name": "xyz789"}
Response
{"data": {"deleteRole": "abc123"}}

disableUser

Description

Reversibly deactivate (disable: true) or reactivate (disable: false) a user account. Moderator-grade, subject to the act-on hierarchy.

Response

Returns a User

Arguments
Name Description
disable - Boolean!
id - ID!

Example

Query
mutation disableUser(
  $disable: Boolean!,
  $id: ID!
) {
  disableUser(
    disable: $disable,
    id: $id
  ) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"disable": false, "id": "4"}
Response
{
  "data": {
    "disableUser": {
      "_id": "xyz789",
      "about": "abc123",
      "activeCategories": ["abc123"],
      "actorId": "xyz789",
      "allowEmbedIframes": false,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 987,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 123,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 987,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 987,
      "createdAt": "xyz789",
      "deleted": false,
      "disabled": false,
      "email": "xyz789",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 123,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 123,
      "friends": [User],
      "friendsCount": 123,
      "groups": [Group],
      "id": 4,
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": true,
      "isMuted": false,
      "locale": "xyz789",
      "location": Location,
      "locationName": "xyz789",
      "name": "abc123",
      "publicKey": "abc123",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 987,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": false,
      "showPublicGroupsOnProfile": false,
      "showShoutsPublicly": true,
      "slug": "abc123",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "abc123",
      "termsAndConditionsAgreedVersion": "abc123",
      "updatedAt": "xyz789"
    }
  }
}

fileReport

Description

File a moderation report against a user, post or comment. Requires authentication.

Response

Returns a FiledReport

Arguments
Name Description
reasonCategory - ReasonCategory!
reasonDescription - String!
resourceId - ID!

Example

Query
mutation fileReport(
  $reasonCategory: ReasonCategory!,
  $reasonDescription: String!,
  $resourceId: ID!
) {
  fileReport(
    reasonCategory: $reasonCategory,
    reasonDescription: $reasonDescription,
    resourceId: $resourceId
  ) {
    createdAt
    reasonCategory
    reasonDescription
    reportId
    resource {
      ... on Comment {
        ...CommentFragment
      }
      ... on Post {
        ...PostFragment
      }
      ... on User {
        ...UserFragment
      }
    }
  }
}
Variables
{
  "reasonCategory": "advert_products_services_commercial",
  "reasonDescription": "abc123",
  "resourceId": 4
}
Response
{
  "data": {
    "fileReport": {
      "createdAt": "xyz789",
      "reasonCategory": "advert_products_services_commercial",
      "reasonDescription": "abc123",
      "reportId": "4",
      "resource": Comment
    }
  }
}

followUser

Description

Follow a user. Requires authentication.

Response

Returns a User

Arguments
Name Description
id - ID!

Example

Query
mutation followUser($id: ID!) {
  followUser(id: $id) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "followUser": {
      "_id": "xyz789",
      "about": "xyz789",
      "activeCategories": ["xyz789"],
      "actorId": "xyz789",
      "allowEmbedIframes": false,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 123,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 123,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 987,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "abc123",
      "deleted": false,
      "disabled": true,
      "email": "abc123",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 123,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 987,
      "friends": [User],
      "friendsCount": 123,
      "groups": [Group],
      "id": 4,
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": false,
      "isMuted": false,
      "locale": "abc123",
      "location": Location,
      "locationName": "xyz789",
      "name": "abc123",
      "publicKey": "abc123",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 987,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": false,
      "showPublicGroupsOnProfile": false,
      "showShoutsPublicly": false,
      "slug": "xyz789",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "abc123",
      "termsAndConditionsAgreedVersion": "xyz789",
      "updatedAt": "abc123"
    }
  }
}

generateGroupInviteCode

Description

Issue an invite code granting membership in a group. Restricted to admins/owners of that group.

Response

Returns an InviteCode!

Arguments
Name Description
comment - String Default = null
expiresAt - String Default = null
groupId - ID!

Example

Query
mutation generateGroupInviteCode(
  $comment: String,
  $expiresAt: String,
  $groupId: ID!
) {
  generateGroupInviteCode(
    comment: $comment,
    expiresAt: $expiresAt,
    groupId: $groupId
  ) {
    code
    comment
    createdAt
    expiresAt
    generatedBy {
      ...UserFragment
    }
    invitedTo {
      ...GroupFragment
    }
    isValid
    redeemedBy {
      ...UserFragment
    }
    redeemedByCount
  }
}
Variables
{"comment": null, "expiresAt": null, "groupId": 4}
Response
{
  "data": {
    "generateGroupInviteCode": {
      "code": "4",
      "comment": "abc123",
      "createdAt": "abc123",
      "expiresAt": "xyz789",
      "generatedBy": User,
      "invitedTo": Group,
      "isValid": true,
      "redeemedBy": [User],
      "redeemedByCount": 987
    }
  }
}

generatePersonalInviteCode

Description

Issue a personal invite code for registering new users. Requires authentication and the user.invite permission.

Response

Returns an InviteCode!

Arguments
Name Description
comment - String Default = null
expiresAt - String Default = null

Example

Query
mutation generatePersonalInviteCode(
  $comment: String,
  $expiresAt: String
) {
  generatePersonalInviteCode(
    comment: $comment,
    expiresAt: $expiresAt
  ) {
    code
    comment
    createdAt
    expiresAt
    generatedBy {
      ...UserFragment
    }
    invitedTo {
      ...GroupFragment
    }
    isValid
    redeemedBy {
      ...UserFragment
    }
    redeemedByCount
  }
}
Variables
{"comment": null, "expiresAt": null}
Response
{
  "data": {
    "generatePersonalInviteCode": {
      "code": 4,
      "comment": "xyz789",
      "createdAt": "xyz789",
      "expiresAt": "xyz789",
      "generatedBy": User,
      "invitedTo": Group,
      "isValid": true,
      "redeemedBy": [User],
      "redeemedByCount": 123
    }
  }
}

invalidateInviteCode

Description

Invalidate one of your invite codes so it can no longer be redeemed. Requires authentication.

Response

Returns an InviteCode

Arguments
Name Description
code - String!

Example

Query
mutation invalidateInviteCode($code: String!) {
  invalidateInviteCode(code: $code) {
    code
    comment
    createdAt
    expiresAt
    generatedBy {
      ...UserFragment
    }
    invitedTo {
      ...GroupFragment
    }
    isValid
    redeemedBy {
      ...UserFragment
    }
    redeemedByCount
  }
}
Variables
{"code": "abc123"}
Response
{
  "data": {
    "invalidateInviteCode": {
      "code": "4",
      "comment": "xyz789",
      "createdAt": "xyz789",
      "expiresAt": "abc123",
      "generatedBy": User,
      "invitedTo": Group,
      "isValid": true,
      "redeemedBy": [User],
      "redeemedByCount": 987
    }
  }
}

joinGroupVideoCall

Description

Join a group's video call, returning the credentials to connect. Requires authentication.

Response

Returns a VideoCallJoinPayload!

Arguments
Name Description
groupId - ID!

Example

Query
mutation joinGroupVideoCall($groupId: ID!) {
  joinGroupVideoCall(groupId: $groupId) {
    roomName
    token
    url
  }
}
Variables
{"groupId": 4}
Response
{
  "data": {
    "joinGroupVideoCall": {
      "roomName": "abc123",
      "token": "xyz789",
      "url": "abc123"
    }
  }
}

login

Description

Get a JWT Token for the given Email and password

Response

Returns a String!

Arguments
Name Description
email - String!
password - String!

Example

Query
mutation login(
  $email: String!,
  $password: String!
) {
  login(
    email: $email,
    password: $password
  )
}
Variables
{
  "email": "abc123",
  "password": "abc123"
}
Response
{"data": {"login": "xyz789"}}

markAllAsRead

Description

Mark all of the current user's notifications as read. Requires authentication.

Response

Returns [NOTIFIED]

Example

Query
mutation markAllAsRead {
  markAllAsRead {
    createdAt
    from {
      ... on Comment {
        ...CommentFragment
      }
      ... on Group {
        ...GroupFragment
      }
      ... on Post {
        ...PostFragment
      }
    }
    id
    read
    reason
    relatedUser {
      ...UserFragment
    }
    to {
      ...UserFragment
    }
    updatedAt
  }
}
Response
{
  "data": {
    "markAllAsRead": [
      {
        "createdAt": "xyz789",
        "from": Comment,
        "id": 4,
        "read": false,
        "reason": "changed_group_member_role",
        "relatedUser": User,
        "to": User,
        "updatedAt": "xyz789"
      }
    ]
  }
}

markAsRead

Description

Mark a notification as read. Requires authentication.

Response

Returns an NOTIFIED

Arguments
Name Description
id - ID!

Example

Query
mutation markAsRead($id: ID!) {
  markAsRead(id: $id) {
    createdAt
    from {
      ... on Comment {
        ...CommentFragment
      }
      ... on Group {
        ...GroupFragment
      }
      ... on Post {
        ...PostFragment
      }
    }
    id
    read
    reason
    relatedUser {
      ...UserFragment
    }
    to {
      ...UserFragment
    }
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "markAsRead": {
      "createdAt": "xyz789",
      "from": Comment,
      "id": "4",
      "read": true,
      "reason": "changed_group_member_role",
      "relatedUser": User,
      "to": User,
      "updatedAt": "abc123"
    }
  }
}

markAsUnread

Description

Mark a notification as unread. Requires authentication.

Response

Returns an NOTIFIED

Arguments
Name Description
id - ID!

Example

Query
mutation markAsUnread($id: ID!) {
  markAsUnread(id: $id) {
    createdAt
    from {
      ... on Comment {
        ...CommentFragment
      }
      ... on Group {
        ...GroupFragment
      }
      ... on Post {
        ...PostFragment
      }
    }
    id
    read
    reason
    relatedUser {
      ...UserFragment
    }
    to {
      ...UserFragment
    }
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "markAsUnread": {
      "createdAt": "xyz789",
      "from": Comment,
      "id": 4,
      "read": true,
      "reason": "changed_group_member_role",
      "relatedUser": User,
      "to": User,
      "updatedAt": "abc123"
    }
  }
}

markTeaserAsViewed

Description

Mark a post's teaser as viewed by the current user. Public.

Response

Returns a Post

Arguments
Name Description
id - ID!

Example

Query
mutation markTeaserAsViewed($id: ID!) {
  markTeaserAsViewed(id: $id) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "markTeaserAsViewed": {
      "activityId": "abc123",
      "author": User,
      "categories": [Category],
      "clickedCount": 123,
      "comments": [Comment],
      "commentsCount": 123,
      "content": "abc123",
      "createdAt": "abc123",
      "deleted": false,
      "disabled": false,
      "emotions": [EMOTED],
      "emotionsCount": 123,
      "eventEnd": "abc123",
      "eventIsOnline": false,
      "eventLocation": Location,
      "eventLocationName": "xyz789",
      "eventStart": "abc123",
      "eventVenue": "abc123",
      "group": Group,
      "groupPinned": false,
      "id": "4",
      "image": Image,
      "isObservedByMe": false,
      "language": "abc123",
      "lat": 123.45,
      "lng": 987.65,
      "objectId": "xyz789",
      "observingUsersCount": 987,
      "pinned": false,
      "pinnedAt": "abc123",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": false,
      "shoutedCount": 987,
      "slug": "xyz789",
      "sortDate": "abc123",
      "tags": [Tag],
      "title": "abc123",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "abc123",
      "viewedTeaserByCurrentUser": true,
      "viewedTeaserCount": 987,
      "visibility": "friends"
    }
  }
}

muteGroup

Description

Mute a group so its posts no longer appear in the current user's feed. Requires membership.

Response

Returns a Group

Arguments
Name Description
groupId - ID!

Example

Query
mutation muteGroup($groupId: ID!) {
  muteGroup(groupId: $groupId) {
    about
    actionRadius
    avatar {
      ...ImageFragment
    }
    categories {
      ...CategoryFragment
    }
    createdAt
    currentlyPinnedPostsCount
    deleted
    description
    disabled
    groupType
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    isMutedByMe
    location {
      ...LocationFragment
    }
    locationName
    membersCount
    myRole
    name
    posts {
      ...PostFragment
    }
    postsCount
    showMembers
    showOnProfile
    slug
    updatedAt
  }
}
Variables
{"groupId": "4"}
Response
{
  "data": {
    "muteGroup": {
      "about": "xyz789",
      "actionRadius": "continental",
      "avatar": Image,
      "categories": [Category],
      "createdAt": "xyz789",
      "currentlyPinnedPostsCount": 123,
      "deleted": true,
      "description": "xyz789",
      "disabled": true,
      "groupType": "closed",
      "id": "4",
      "inviteCodes": [InviteCode],
      "isMutedByMe": false,
      "location": Location,
      "locationName": "abc123",
      "membersCount": 987,
      "myRole": "admin",
      "name": "abc123",
      "posts": [Post],
      "postsCount": 123,
      "showMembers": false,
      "showOnProfile": false,
      "slug": "xyz789",
      "updatedAt": "abc123"
    }
  }
}

muteUser

Description

Mute a user, hiding their content from the current user. Requires authentication.

Response

Returns a User

Arguments
Name Description
id - ID!

Example

Query
mutation muteUser($id: ID!) {
  muteUser(id: $id) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "muteUser": {
      "_id": "abc123",
      "about": "xyz789",
      "activeCategories": ["abc123"],
      "actorId": "abc123",
      "allowEmbedIframes": true,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 987,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 987,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 987,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 987,
      "createdAt": "abc123",
      "deleted": false,
      "disabled": true,
      "email": "abc123",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 123,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 123,
      "friends": [User],
      "friendsCount": 123,
      "groups": [Group],
      "id": 4,
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": true,
      "isMuted": false,
      "locale": "xyz789",
      "location": Location,
      "locationName": "xyz789",
      "name": "xyz789",
      "publicKey": "abc123",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": false,
      "showHiddenGroupsOnProfile": false,
      "showPublicGroupsOnProfile": false,
      "showShoutsPublicly": false,
      "slug": "xyz789",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "xyz789",
      "termsAndConditionsAgreedVersion": "abc123",
      "updatedAt": "abc123"
    }
  }
}

pinGroupPost

Description

Pin a post within its group. Restricted to those allowed to pin in that group.

Response

Returns a Post

Arguments
Name Description
id - ID!

Example

Query
mutation pinGroupPost($id: ID!) {
  pinGroupPost(id: $id) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "pinGroupPost": {
      "activityId": "xyz789",
      "author": User,
      "categories": [Category],
      "clickedCount": 987,
      "comments": [Comment],
      "commentsCount": 123,
      "content": "abc123",
      "createdAt": "abc123",
      "deleted": false,
      "disabled": false,
      "emotions": [EMOTED],
      "emotionsCount": 987,
      "eventEnd": "xyz789",
      "eventIsOnline": true,
      "eventLocation": Location,
      "eventLocationName": "xyz789",
      "eventStart": "xyz789",
      "eventVenue": "abc123",
      "group": Group,
      "groupPinned": true,
      "id": 4,
      "image": Image,
      "isObservedByMe": true,
      "language": "abc123",
      "lat": 987.65,
      "lng": 123.45,
      "objectId": "xyz789",
      "observingUsersCount": 987,
      "pinned": false,
      "pinnedAt": "abc123",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": true,
      "shoutedCount": 123,
      "slug": "abc123",
      "sortDate": "xyz789",
      "tags": [Tag],
      "title": "abc123",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "abc123",
      "viewedTeaserByCurrentUser": false,
      "viewedTeaserCount": 987,
      "visibility": "friends"
    }
  }
}

pinPost

Description

Pin a post instance-wide. Requires the post.pin permission.

Response

Returns a Post

Arguments
Name Description
id - ID!

Example

Query
mutation pinPost($id: ID!) {
  pinPost(id: $id) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "pinPost": {
      "activityId": "abc123",
      "author": User,
      "categories": [Category],
      "clickedCount": 123,
      "comments": [Comment],
      "commentsCount": 123,
      "content": "xyz789",
      "createdAt": "abc123",
      "deleted": false,
      "disabled": true,
      "emotions": [EMOTED],
      "emotionsCount": 987,
      "eventEnd": "xyz789",
      "eventIsOnline": true,
      "eventLocation": Location,
      "eventLocationName": "xyz789",
      "eventStart": "abc123",
      "eventVenue": "abc123",
      "group": Group,
      "groupPinned": true,
      "id": "4",
      "image": Image,
      "isObservedByMe": true,
      "language": "xyz789",
      "lat": 987.65,
      "lng": 123.45,
      "objectId": "abc123",
      "observingUsersCount": 123,
      "pinned": false,
      "pinnedAt": "abc123",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": true,
      "shoutedCount": 987,
      "slug": "abc123",
      "sortDate": "xyz789",
      "tags": [Tag],
      "title": "xyz789",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "xyz789",
      "viewedTeaserByCurrentUser": true,
      "viewedTeaserCount": 123,
      "visibility": "friends"
    }
  }
}

pushPost

Description

Push (boost) a post to the top of feeds. Requires the post.push permission.

Response

Returns a Post!

Arguments
Name Description
id - ID!

Example

Query
mutation pushPost($id: ID!) {
  pushPost(id: $id) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "pushPost": {
      "activityId": "xyz789",
      "author": User,
      "categories": [Category],
      "clickedCount": 987,
      "comments": [Comment],
      "commentsCount": 123,
      "content": "xyz789",
      "createdAt": "xyz789",
      "deleted": false,
      "disabled": true,
      "emotions": [EMOTED],
      "emotionsCount": 987,
      "eventEnd": "xyz789",
      "eventIsOnline": false,
      "eventLocation": Location,
      "eventLocationName": "abc123",
      "eventStart": "xyz789",
      "eventVenue": "abc123",
      "group": Group,
      "groupPinned": false,
      "id": "4",
      "image": Image,
      "isObservedByMe": true,
      "language": "xyz789",
      "lat": 987.65,
      "lng": 987.65,
      "objectId": "xyz789",
      "observingUsersCount": 123,
      "pinned": false,
      "pinnedAt": "abc123",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": true,
      "shoutedCount": 987,
      "slug": "abc123",
      "sortDate": "abc123",
      "tags": [Tag],
      "title": "xyz789",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "xyz789",
      "viewedTeaserByCurrentUser": true,
      "viewedTeaserCount": 987,
      "visibility": "friends"
    }
  }
}

redeemInviteCode

Description

Redeem an invite code for the current user (registration and/or group membership). Requires authentication.

Response

Returns a Boolean!

Arguments
Name Description
code - String!

Example

Query
mutation redeemInviteCode($code: String!) {
  redeemInviteCode(code: $code)
}
Variables
{"code": "xyz789"}
Response
{"data": {"redeemInviteCode": false}}

renameRole

Description

Rename a role, keeping its permission bundle and all its members (its HAS_ROLE edges are preserved). The mandatory owner and user roles cannot be renamed. Requires the role.manage permission.

Response

Returns a Role!

Arguments
Name Description
name - String!
newName - String!

Example

Query
mutation renameRole(
  $name: String!,
  $newName: String!
) {
  renameRole(
    name: $name,
    newName: $newName
  ) {
    memberCount
    name
    permissions
    protected
  }
}
Variables
{
  "name": "abc123",
  "newName": "xyz789"
}
Response
{
  "data": {
    "renameRole": {
      "memberCount": 123,
      "name": "xyz789",
      "permissions": ["abc123"],
      "protected": false
    }
  }
}

requestPasswordReset

Description

Request a password-reset email for the given address. Public.

Response

Returns a Boolean!

Arguments
Name Description
email - String!
locale - String!

Example

Query
mutation requestPasswordReset(
  $email: String!,
  $locale: String!
) {
  requestPasswordReset(
    email: $email,
    locale: $locale
  )
}
Variables
{
  "email": "xyz789",
  "locale": "xyz789"
}
Response
{"data": {"requestPasswordReset": false}}

resetPassword

Description

Reset a password using the nonce from the reset email. Public.

Response

Returns a Boolean!

Arguments
Name Description
email - String!
newPassword - String!
nonce - String!

Example

Query
mutation resetPassword(
  $email: String!,
  $newPassword: String!,
  $nonce: String!
) {
  resetPassword(
    email: $email,
    newPassword: $newPassword,
    nonce: $nonce
  )
}
Variables
{
  "email": "abc123",
  "newPassword": "abc123",
  "nonce": "abc123"
}
Response
{"data": {"resetPassword": false}}

resetPolicies

Description

Reset several policy keys to their configured defaults in one request (only keys that diverge actually change). Requires the policy.manage permission.

Response

Returns [PolicyChangeEvent!]!

Arguments
Name Description
keys - [PolicyKey!]!

Example

Query
mutation resetPolicies($keys: [PolicyKey!]!) {
  resetPolicies(keys: $keys) {
    actor
    key
    timestamp
    value
  }
}
Variables
{"keys": ["activeBranding"]}
Response
{
  "data": {
    "resetPolicies": [
      {
        "actor": "abc123",
        "key": "activeBranding",
        "timestamp": "abc123",
        "value": "abc123"
      }
    ]
  }
}

resetPolicy

Description

Reset a single policy key to its configured default. Requires the policy.manage permission.

Response

Returns a PolicyChangeEvent!

Arguments
Name Description
key - PolicyKey!

Example

Query
mutation resetPolicy($key: PolicyKey!) {
  resetPolicy(key: $key) {
    actor
    key
    timestamp
    value
  }
}
Variables
{"key": "activeBranding"}
Response
{
  "data": {
    "resetPolicy": {
      "actor": "xyz789",
      "key": "activeBranding",
      "timestamp": "xyz789",
      "value": "abc123"
    }
  }
}

resetTrophyBadgesSelected

Description

Clear all displayed trophy badges. Requires authentication.

Response

Returns a User

Example

Query
mutation resetTrophyBadgesSelected {
  resetTrophyBadgesSelected {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Response
{
  "data": {
    "resetTrophyBadgesSelected": {
      "_id": "abc123",
      "about": "abc123",
      "activeCategories": ["xyz789"],
      "actorId": "abc123",
      "allowEmbedIframes": true,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 987,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 123,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 987,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 987,
      "createdAt": "abc123",
      "deleted": true,
      "disabled": true,
      "email": "xyz789",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 123,
      "followedByCurrentUser": true,
      "following": [User],
      "followingCount": 123,
      "friends": [User],
      "friendsCount": 987,
      "groups": [Group],
      "id": "4",
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": true,
      "isMuted": false,
      "locale": "abc123",
      "location": Location,
      "locationName": "xyz789",
      "name": "xyz789",
      "publicKey": "abc123",
      "redeemedInviteCode": InviteCode,
      "roleName": "abc123",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": false,
      "showPublicGroupsOnProfile": true,
      "showShoutsPublicly": true,
      "slug": "abc123",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "xyz789",
      "termsAndConditionsAgreedVersion": "abc123",
      "updatedAt": "abc123"
    }
  }
}

resyncCaches

Description

Resynchronise the in-memory role & policy caches from the database. Dev/test-only recovery hook for when an out-of-process change (db:reset / db:seed, the e2e harness) leaves a running server's caches stale; it needs no auth outside production so it works even when no users exist yet (right after a wipe). Disabled in production — there a rolling restart re-reads the DB on each instance's boot.

Response

Returns a Boolean!

Example

Query
mutation resyncCaches {
  resyncCaches
}
Response
{"data": {"resyncCaches": false}}

review

Description

Record a moderation decision on a reported resource: optionally disable (hide) it and/or close the report. Requires the content.moderate permission and must respect the act-on hierarchy for the target user.

Response

Returns an REVIEWED

Arguments
Name Description
closed - Boolean
disable - Boolean
resourceId - ID!

Example

Query
mutation review(
  $closed: Boolean,
  $disable: Boolean,
  $resourceId: ID!
) {
  review(
    closed: $closed,
    disable: $disable,
    resourceId: $resourceId
  ) {
    closed
    createdAt
    disable
    moderator {
      ...UserFragment
    }
    report {
      ...ReportFragment
    }
    resource {
      ... on Comment {
        ...CommentFragment
      }
      ... on Post {
        ...PostFragment
      }
      ... on User {
        ...UserFragment
      }
    }
    updatedAt
  }
}
Variables
{"closed": true, "disable": true, "resourceId": 4}
Response
{
  "data": {
    "review": {
      "closed": false,
      "createdAt": "xyz789",
      "disable": false,
      "moderator": User,
      "report": Report,
      "resource": Comment,
      "updatedAt": "xyz789"
    }
  }
}

revokeApiKey

Description

Revoke one of your own API keys. Requires authentication.

Response

Returns a Boolean!

Arguments
Name Description
id - ID!

Example

Query
mutation revokeApiKey($id: ID!) {
  revokeApiKey(id: $id)
}
Variables
{"id": "4"}
Response
{"data": {"revokeApiKey": true}}

revokeBadge

Description

Remove a badge from a user. Requires the badge.manage permission.

Response

Returns a User

Arguments
Name Description
badgeId - ID!
userId - ID!

Example

Query
mutation revokeBadge(
  $badgeId: ID!,
  $userId: ID!
) {
  revokeBadge(
    badgeId: $badgeId,
    userId: $userId
  ) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"badgeId": 4, "userId": "4"}
Response
{
  "data": {
    "revokeBadge": {
      "_id": "abc123",
      "about": "abc123",
      "activeCategories": ["abc123"],
      "actorId": "abc123",
      "allowEmbedIframes": true,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 987,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 987,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 987,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "xyz789",
      "deleted": false,
      "disabled": true,
      "email": "xyz789",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 123,
      "followedByCurrentUser": true,
      "following": [User],
      "followingCount": 987,
      "friends": [User],
      "friendsCount": 987,
      "groups": [Group],
      "id": 4,
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": false,
      "isMuted": false,
      "locale": "abc123",
      "location": Location,
      "locationName": "abc123",
      "name": "xyz789",
      "publicKey": "xyz789",
      "redeemedInviteCode": InviteCode,
      "roleName": "abc123",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": false,
      "showHiddenGroupsOnProfile": true,
      "showPublicGroupsOnProfile": true,
      "showShoutsPublicly": false,
      "slug": "xyz789",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "xyz789",
      "termsAndConditionsAgreedVersion": "xyz789",
      "updatedAt": "abc123"
    }
  }
}

rewardTrophyBadge

Description

Award a trophy badge to a user. Requires the badge.manage permission.

Response

Returns a User

Arguments
Name Description
badgeId - ID!
userId - ID!

Example

Query
mutation rewardTrophyBadge(
  $badgeId: ID!,
  $userId: ID!
) {
  rewardTrophyBadge(
    badgeId: $badgeId,
    userId: $userId
  ) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"badgeId": 4, "userId": "4"}
Response
{
  "data": {
    "rewardTrophyBadge": {
      "_id": "xyz789",
      "about": "abc123",
      "activeCategories": ["xyz789"],
      "actorId": "xyz789",
      "allowEmbedIframes": true,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 987,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 123,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 123,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "xyz789",
      "deleted": false,
      "disabled": true,
      "email": "abc123",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 123,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 987,
      "friends": [User],
      "friendsCount": 123,
      "groups": [Group],
      "id": "4",
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": false,
      "isMuted": false,
      "locale": "abc123",
      "location": Location,
      "locationName": "abc123",
      "name": "xyz789",
      "publicKey": "abc123",
      "redeemedInviteCode": InviteCode,
      "roleName": "abc123",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": true,
      "showPublicGroupsOnProfile": false,
      "showShoutsPublicly": false,
      "slug": "xyz789",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "xyz789",
      "termsAndConditionsAgreedVersion": "xyz789",
      "updatedAt": "abc123"
    }
  }
}

saveCategorySettings

Description

Set the current user's active content-filter categories. Requires authentication.

Response

Returns a Boolean

Arguments
Name Description
activeCategories - [String]

Example

Query
mutation saveCategorySettings($activeCategories: [String]) {
  saveCategorySettings(activeCategories: $activeCategories)
}
Variables
{"activeCategories": ["xyz789"]}
Response
{"data": {"saveCategorySettings": true}}

setActiveBranding

Description

Switch the live network branding to the given baked-in brand id (one of /branding/manifest.json), or the empty string for framework defaults. Persisted as the activeBranding policy value and broadcast live via the policyChanged subscription, so every client reloads the new brand's config without a redeploy. Requires the branding.manage permission. Returns the applied id.

Response

Returns a String!

Arguments
Name Description
id - String!

Example

Query
mutation setActiveBranding($id: String!) {
  setActiveBranding(id: $id)
}
Variables
{"id": "abc123"}
Response
{"data": {"setActiveBranding": "xyz789"}}

setBrandingComposition

Description

Set the per-bucket branding composition — a JSON-encoded object mapping a bucket slot (theme/identity/logos/legal/navigation/behavior) to a source 'id[@version][/instance]', layered over activeBranding. The empty string clears all per-slot overrides. Persisted as the brandingComposition policy value and broadcast live via policyChanged, so clients reload the recomposed branding. Requires the branding.manage permission. Returns the applied JSON string.

Response

Returns a String!

Arguments
Name Description
composition - String!

Example

Query
mutation setBrandingComposition($composition: String!) {
  setBrandingComposition(composition: $composition)
}
Variables
{"composition": "abc123"}
Response
{
  "data": {
    "setBrandingComposition": "xyz789"
  }
}

setGroupMembershipVisibility

Description

Toggle whether a group membership is shown on the current user's profile.

Response

Returns an MEMBER_OF

Arguments
Name Description
groupId - ID!
showOnProfile - Boolean!

Example

Query
mutation setGroupMembershipVisibility(
  $groupId: ID!,
  $showOnProfile: Boolean!
) {
  setGroupMembershipVisibility(
    groupId: $groupId,
    showOnProfile: $showOnProfile
  ) {
    createdAt
    role
    showOnProfile
    updatedAt
  }
}
Variables
{"groupId": "4", "showOnProfile": true}
Response
{
  "data": {
    "setGroupMembershipVisibility": {
      "createdAt": "abc123",
      "role": "admin",
      "showOnProfile": false,
      "updatedAt": "abc123"
    }
  }
}

setPolicy

Description

Set a single policy key to a value. Requires the policy.manage permission.

Response

Returns a PolicyChangeEvent!

Arguments
Name Description
key - PolicyKey!
value - String!

Example

Query
mutation setPolicy(
  $key: PolicyKey!,
  $value: String!
) {
  setPolicy(
    key: $key,
    value: $value
  ) {
    actor
    key
    timestamp
    value
  }
}
Variables
{"key": "activeBranding", "value": "xyz789"}
Response
{
  "data": {
    "setPolicy": {
      "actor": "abc123",
      "key": "activeBranding",
      "timestamp": "xyz789",
      "value": "abc123"
    }
  }
}

setTrophyBadgeSelected

Description

Choose which trophy badge to display in a given slot (null clears the slot). Requires authentication.

Response

Returns a User

Arguments
Name Description
badgeId - ID
slot - Int!

Example

Query
mutation setTrophyBadgeSelected(
  $badgeId: ID,
  $slot: Int!
) {
  setTrophyBadgeSelected(
    badgeId: $badgeId,
    slot: $slot
  ) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"badgeId": "4", "slot": 987}
Response
{
  "data": {
    "setTrophyBadgeSelected": {
      "_id": "xyz789",
      "about": "abc123",
      "activeCategories": ["abc123"],
      "actorId": "xyz789",
      "allowEmbedIframes": true,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 123,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 123,
      "badgeVerification": Badge,
      "blocked": true,
      "categories": [Category],
      "commentedCount": 123,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "xyz789",
      "deleted": false,
      "disabled": false,
      "email": "abc123",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 987,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 987,
      "friends": [User],
      "friendsCount": 987,
      "groups": [Group],
      "id": "4",
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": false,
      "isMuted": false,
      "locale": "xyz789",
      "location": Location,
      "locationName": "xyz789",
      "name": "abc123",
      "publicKey": "abc123",
      "redeemedInviteCode": InviteCode,
      "roleName": "abc123",
      "shouted": [Post],
      "shoutedCount": 987,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": false,
      "showPublicGroupsOnProfile": false,
      "showShoutsPublicly": false,
      "slug": "xyz789",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "xyz789",
      "termsAndConditionsAgreedVersion": "xyz789",
      "updatedAt": "xyz789"
    }
  }
}

setUserRole

Description

Set a user's single role (replaces their current role). Requires the role.manage permission.

Response

Returns a User!

Arguments
Name Description
roleName - String!
userId - ID!

Example

Query
mutation setUserRole(
  $roleName: String!,
  $userId: ID!
) {
  setUserRole(
    roleName: $roleName,
    userId: $userId
  ) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"roleName": "abc123", "userId": 4}
Response
{
  "data": {
    "setUserRole": {
      "_id": "abc123",
      "about": "abc123",
      "activeCategories": ["abc123"],
      "actorId": "abc123",
      "allowEmbedIframes": true,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 123,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 987,
      "badgeVerification": Badge,
      "blocked": true,
      "categories": [Category],
      "commentedCount": 123,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "abc123",
      "deleted": true,
      "disabled": false,
      "email": "xyz789",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 123,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 123,
      "friends": [User],
      "friendsCount": 123,
      "groups": [Group],
      "id": 4,
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": false,
      "isMuted": false,
      "locale": "abc123",
      "location": Location,
      "locationName": "abc123",
      "name": "abc123",
      "publicKey": "xyz789",
      "redeemedInviteCode": InviteCode,
      "roleName": "abc123",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": false,
      "showHiddenGroupsOnProfile": true,
      "showPublicGroupsOnProfile": false,
      "showShoutsPublicly": false,
      "slug": "abc123",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "xyz789",
      "termsAndConditionsAgreedVersion": "xyz789",
      "updatedAt": "abc123"
    }
  }
}

setVerificationBadge

Description

Assign a verification badge to a user. Requires the badge.manage permission.

Response

Returns a User

Arguments
Name Description
badgeId - ID!
userId - ID!

Example

Query
mutation setVerificationBadge(
  $badgeId: ID!,
  $userId: ID!
) {
  setVerificationBadge(
    badgeId: $badgeId,
    userId: $userId
  ) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"badgeId": 4, "userId": "4"}
Response
{
  "data": {
    "setVerificationBadge": {
      "_id": "xyz789",
      "about": "xyz789",
      "activeCategories": ["abc123"],
      "actorId": "abc123",
      "allowEmbedIframes": false,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 123,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 987,
      "badgeVerification": Badge,
      "blocked": true,
      "categories": [Category],
      "commentedCount": 123,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 987,
      "createdAt": "abc123",
      "deleted": false,
      "disabled": true,
      "email": "abc123",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 987,
      "followedByCurrentUser": true,
      "following": [User],
      "followingCount": 123,
      "friends": [User],
      "friendsCount": 987,
      "groups": [Group],
      "id": 4,
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": true,
      "isMuted": true,
      "locale": "xyz789",
      "location": Location,
      "locationName": "abc123",
      "name": "xyz789",
      "publicKey": "xyz789",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": false,
      "showPublicGroupsOnProfile": true,
      "showShoutsPublicly": true,
      "slug": "abc123",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "abc123",
      "termsAndConditionsAgreedVersion": "xyz789",
      "updatedAt": "xyz789"
    }
  }
}

shout

Description

Shout (endorse) the given post or comment. Requires authentication.

Response

Returns a Boolean!

Arguments
Name Description
id - ID!
type - ShoutTypeEnum!

Example

Query
mutation shout(
  $id: ID!,
  $type: ShoutTypeEnum!
) {
  shout(
    id: $id,
    type: $type
  )
}
Variables
{"id": "4", "type": "Comment"}
Response
{"data": {"shout": false}}

toggleObservePost

Description

Start or stop observing a post (to receive notifications about its comments). Requires authentication.

Response

Returns a Post!

Arguments
Name Description
id - ID!
value - Boolean!

Example

Query
mutation toggleObservePost(
  $id: ID!,
  $value: Boolean!
) {
  toggleObservePost(
    id: $id,
    value: $value
  ) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{"id": 4, "value": false}
Response
{
  "data": {
    "toggleObservePost": {
      "activityId": "abc123",
      "author": User,
      "categories": [Category],
      "clickedCount": 987,
      "comments": [Comment],
      "commentsCount": 987,
      "content": "abc123",
      "createdAt": "xyz789",
      "deleted": true,
      "disabled": true,
      "emotions": [EMOTED],
      "emotionsCount": 123,
      "eventEnd": "xyz789",
      "eventIsOnline": false,
      "eventLocation": Location,
      "eventLocationName": "abc123",
      "eventStart": "abc123",
      "eventVenue": "xyz789",
      "group": Group,
      "groupPinned": false,
      "id": 4,
      "image": Image,
      "isObservedByMe": true,
      "language": "xyz789",
      "lat": 123.45,
      "lng": 123.45,
      "objectId": "abc123",
      "observingUsersCount": 123,
      "pinned": true,
      "pinnedAt": "abc123",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": false,
      "shoutedCount": 987,
      "slug": "xyz789",
      "sortDate": "abc123",
      "tags": [Tag],
      "title": "abc123",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "xyz789",
      "viewedTeaserByCurrentUser": true,
      "viewedTeaserCount": 987,
      "visibility": "friends"
    }
  }
}

unblockUser

Description

Unblock a previously blocked user. Requires authentication.

Response

Returns a User

Arguments
Name Description
id - ID!

Example

Query
mutation unblockUser($id: ID!) {
  unblockUser(id: $id) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "unblockUser": {
      "_id": "abc123",
      "about": "abc123",
      "activeCategories": ["abc123"],
      "actorId": "xyz789",
      "allowEmbedIframes": true,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 123,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 123,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 123,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "abc123",
      "deleted": false,
      "disabled": true,
      "email": "abc123",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 987,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 987,
      "friends": [User],
      "friendsCount": 987,
      "groups": [Group],
      "id": 4,
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": true,
      "isMuted": true,
      "locale": "xyz789",
      "location": Location,
      "locationName": "abc123",
      "name": "xyz789",
      "publicKey": "xyz789",
      "redeemedInviteCode": InviteCode,
      "roleName": "abc123",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": false,
      "showHiddenGroupsOnProfile": false,
      "showPublicGroupsOnProfile": true,
      "showShoutsPublicly": true,
      "slug": "xyz789",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "abc123",
      "termsAndConditionsAgreedVersion": "abc123",
      "updatedAt": "xyz789"
    }
  }
}

unfollowUser

Description

Unfollow a user. Requires authentication.

Response

Returns a User

Arguments
Name Description
id - ID!

Example

Query
mutation unfollowUser($id: ID!) {
  unfollowUser(id: $id) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "unfollowUser": {
      "_id": "xyz789",
      "about": "xyz789",
      "activeCategories": ["abc123"],
      "actorId": "xyz789",
      "allowEmbedIframes": false,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 123,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 987,
      "badgeVerification": Badge,
      "blocked": false,
      "categories": [Category],
      "commentedCount": 123,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "abc123",
      "deleted": false,
      "disabled": false,
      "email": "xyz789",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 123,
      "followedByCurrentUser": false,
      "following": [User],
      "followingCount": 987,
      "friends": [User],
      "friendsCount": 987,
      "groups": [Group],
      "id": "4",
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": true,
      "isMuted": true,
      "locale": "abc123",
      "location": Location,
      "locationName": "abc123",
      "name": "abc123",
      "publicKey": "abc123",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": false,
      "showPublicGroupsOnProfile": true,
      "showShoutsPublicly": true,
      "slug": "xyz789",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "xyz789",
      "termsAndConditionsAgreedVersion": "xyz789",
      "updatedAt": "abc123"
    }
  }
}

unmuteGroup

Description

Unmute a previously muted group. Requires membership.

Response

Returns a Group

Arguments
Name Description
groupId - ID!

Example

Query
mutation unmuteGroup($groupId: ID!) {
  unmuteGroup(groupId: $groupId) {
    about
    actionRadius
    avatar {
      ...ImageFragment
    }
    categories {
      ...CategoryFragment
    }
    createdAt
    currentlyPinnedPostsCount
    deleted
    description
    disabled
    groupType
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    isMutedByMe
    location {
      ...LocationFragment
    }
    locationName
    membersCount
    myRole
    name
    posts {
      ...PostFragment
    }
    postsCount
    showMembers
    showOnProfile
    slug
    updatedAt
  }
}
Variables
{"groupId": 4}
Response
{
  "data": {
    "unmuteGroup": {
      "about": "xyz789",
      "actionRadius": "continental",
      "avatar": Image,
      "categories": [Category],
      "createdAt": "abc123",
      "currentlyPinnedPostsCount": 987,
      "deleted": true,
      "description": "abc123",
      "disabled": true,
      "groupType": "closed",
      "id": "4",
      "inviteCodes": [InviteCode],
      "isMutedByMe": false,
      "location": Location,
      "locationName": "xyz789",
      "membersCount": 123,
      "myRole": "admin",
      "name": "abc123",
      "posts": [Post],
      "postsCount": 987,
      "showMembers": false,
      "showOnProfile": false,
      "slug": "abc123",
      "updatedAt": "abc123"
    }
  }
}

unmuteUser

Description

Unmute a previously muted user. Requires authentication.

Response

Returns a User

Arguments
Name Description
id - ID!

Example

Query
mutation unmuteUser($id: ID!) {
  unmuteUser(id: $id) {
    _id
    about
    activeCategories
    actorId
    allowEmbedIframes
    avatar {
      ...ImageFragment
    }
    badgeTrophies {
      ...BadgeFragment
    }
    badgeTrophiesCount
    badgeTrophiesSelected {
      ...BadgeFragment
    }
    badgeTrophiesUnused {
      ...BadgeFragment
    }
    badgeTrophiesUnusedCount
    badgeVerification {
      ...BadgeFragment
    }
    blocked
    categories {
      ...CategoryFragment
    }
    commentedCount
    comments {
      ...CommentFragment
    }
    contributions {
      ...PostFragment
    }
    contributionsCount
    createdAt
    deleted
    disabled
    email
    emailNotificationSettings {
      ...EmailNotificationSettingsFragment
    }
    emotions {
      ...EMOTEDFragment
    }
    followedBy {
      ...UserFragment
    }
    followedByCount
    followedByCurrentUser
    following {
      ...UserFragment
    }
    followingCount
    friends {
      ...UserFragment
    }
    friendsCount
    groups {
      ...GroupFragment
    }
    id
    inviteCodes {
      ...InviteCodeFragment
    }
    invited {
      ...UserFragment
    }
    invitedBy {
      ...UserFragment
    }
    isBlocked
    isMuted
    locale
    location {
      ...LocationFragment
    }
    locationName
    name
    publicKey
    redeemedInviteCode {
      ...InviteCodeFragment
    }
    roleName
    shouted {
      ...PostFragment
    }
    shoutedCount
    showClosedGroupsOnProfile
    showHiddenGroupsOnProfile
    showPublicGroupsOnProfile
    showShoutsPublicly
    slug
    socialMedia {
      ...SocialMediaFragment
    }
    termsAndConditionsAgreedAt
    termsAndConditionsAgreedVersion
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "unmuteUser": {
      "_id": "abc123",
      "about": "abc123",
      "activeCategories": ["xyz789"],
      "actorId": "abc123",
      "allowEmbedIframes": false,
      "avatar": Image,
      "badgeTrophies": [Badge],
      "badgeTrophiesCount": 123,
      "badgeTrophiesSelected": [Badge],
      "badgeTrophiesUnused": [Badge],
      "badgeTrophiesUnusedCount": 987,
      "badgeVerification": Badge,
      "blocked": true,
      "categories": [Category],
      "commentedCount": 987,
      "comments": [Comment],
      "contributions": [Post],
      "contributionsCount": 123,
      "createdAt": "xyz789",
      "deleted": false,
      "disabled": true,
      "email": "xyz789",
      "emailNotificationSettings": [
        EmailNotificationSettings
      ],
      "emotions": [EMOTED],
      "followedBy": [User],
      "followedByCount": 987,
      "followedByCurrentUser": true,
      "following": [User],
      "followingCount": 987,
      "friends": [User],
      "friendsCount": 123,
      "groups": [Group],
      "id": "4",
      "inviteCodes": [InviteCode],
      "invited": [User],
      "invitedBy": User,
      "isBlocked": true,
      "isMuted": false,
      "locale": "abc123",
      "location": Location,
      "locationName": "abc123",
      "name": "xyz789",
      "publicKey": "xyz789",
      "redeemedInviteCode": InviteCode,
      "roleName": "xyz789",
      "shouted": [Post],
      "shoutedCount": 123,
      "showClosedGroupsOnProfile": true,
      "showHiddenGroupsOnProfile": true,
      "showPublicGroupsOnProfile": true,
      "showShoutsPublicly": true,
      "slug": "abc123",
      "socialMedia": [SocialMedia],
      "termsAndConditionsAgreedAt": "abc123",
      "termsAndConditionsAgreedVersion": "abc123",
      "updatedAt": "xyz789"
    }
  }
}

unpinGroupPost

Description

Remove a group pin. Restricted to those allowed to pin in that group.

Response

Returns a Post

Arguments
Name Description
id - ID!

Example

Query
mutation unpinGroupPost($id: ID!) {
  unpinGroupPost(id: $id) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "unpinGroupPost": {
      "activityId": "xyz789",
      "author": User,
      "categories": [Category],
      "clickedCount": 987,
      "comments": [Comment],
      "commentsCount": 123,
      "content": "xyz789",
      "createdAt": "abc123",
      "deleted": false,
      "disabled": false,
      "emotions": [EMOTED],
      "emotionsCount": 987,
      "eventEnd": "xyz789",
      "eventIsOnline": false,
      "eventLocation": Location,
      "eventLocationName": "xyz789",
      "eventStart": "xyz789",
      "eventVenue": "abc123",
      "group": Group,
      "groupPinned": true,
      "id": "4",
      "image": Image,
      "isObservedByMe": true,
      "language": "xyz789",
      "lat": 987.65,
      "lng": 123.45,
      "objectId": "xyz789",
      "observingUsersCount": 123,
      "pinned": false,
      "pinnedAt": "abc123",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": false,
      "shoutedCount": 987,
      "slug": "abc123",
      "sortDate": "xyz789",
      "tags": [Tag],
      "title": "abc123",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "abc123",
      "viewedTeaserByCurrentUser": false,
      "viewedTeaserCount": 123,
      "visibility": "friends"
    }
  }
}

unpinPost

Description

Remove an instance-wide pin. Requires the post.pin permission.

Response

Returns a Post

Arguments
Name Description
id - ID!

Example

Query
mutation unpinPost($id: ID!) {
  unpinPost(id: $id) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "unpinPost": {
      "activityId": "abc123",
      "author": User,
      "categories": [Category],
      "clickedCount": 123,
      "comments": [Comment],
      "commentsCount": 987,
      "content": "abc123",
      "createdAt": "xyz789",
      "deleted": false,
      "disabled": true,
      "emotions": [EMOTED],
      "emotionsCount": 123,
      "eventEnd": "xyz789",
      "eventIsOnline": true,
      "eventLocation": Location,
      "eventLocationName": "xyz789",
      "eventStart": "abc123",
      "eventVenue": "abc123",
      "group": Group,
      "groupPinned": true,
      "id": "4",
      "image": Image,
      "isObservedByMe": false,
      "language": "abc123",
      "lat": 987.65,
      "lng": 123.45,
      "objectId": "xyz789",
      "observingUsersCount": 987,
      "pinned": false,
      "pinnedAt": "abc123",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": true,
      "shoutedCount": 987,
      "slug": "xyz789",
      "sortDate": "xyz789",
      "tags": [Tag],
      "title": "abc123",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "abc123",
      "viewedTeaserByCurrentUser": false,
      "viewedTeaserCount": 123,
      "visibility": "friends"
    }
  }
}

unpushPost

Description

Remove a post's push/boost. Requires the post.push permission.

Response

Returns a Post!

Arguments
Name Description
id - ID!

Example

Query
mutation unpushPost($id: ID!) {
  unpushPost(id: $id) {
    activityId
    author {
      ...UserFragment
    }
    categories {
      ...CategoryFragment
    }
    clickedCount
    comments {
      ...CommentFragment
    }
    commentsCount
    content
    createdAt
    deleted
    disabled
    emotions {
      ...EMOTEDFragment
    }
    emotionsCount
    eventEnd
    eventIsOnline
    eventLocation {
      ...LocationFragment
    }
    eventLocationName
    eventStart
    eventVenue
    group {
      ...GroupFragment
    }
    groupPinned
    id
    image {
      ...ImageFragment
    }
    isObservedByMe
    language
    lat
    lng
    objectId
    observingUsersCount
    pinned
    pinnedAt
    pinnedBy {
      ...UserFragment
    }
    postType
    relatedContributions {
      ...PostFragment
    }
    shoutedBy {
      ...UserFragment
    }
    shoutedByCurrentUser
    shoutedCount
    slug
    sortDate
    tags {
      ...TagFragment
    }
    title
    unreadCommentNotificationsByCurrentUser {
      ...NOTIFIEDFragment
    }
    unreadNotificationByCurrentUser {
      ...NOTIFIEDFragment
    }
    updatedAt
    viewedTeaserByCurrentUser
    viewedTeaserCount
    visibility
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "unpushPost": {
      "activityId": "xyz789",
      "author": User,
      "categories": [Category],
      "clickedCount": 123,
      "comments": [Comment],
      "commentsCount": 987,
      "content": "xyz789",
      "createdAt": "abc123",
      "deleted": true,
      "disabled": true,
      "emotions": [EMOTED],
      "emotionsCount": 987,
      "eventEnd": "xyz789",
      "eventIsOnline": false,
      "eventLocation": Location,
      "eventLocationName": "xyz789",
      "eventStart": "xyz789",
      "eventVenue": "abc123",
      "group": Group,
      "groupPinned": true,
      "id": 4,
      "image": Image,
      "isObservedByMe": false,
      "language": "abc123",
      "lat": 987.65,
      "lng": 123.45,
      "objectId": "abc123",
      "observingUsersCount": 123,
      "pinned": true,
      "pinnedAt": "xyz789",
      "pinnedBy": User,
      "postType": ["Article"],
      "relatedContributions": [Post],
      "shoutedBy": [User],
      "shoutedByCurrentUser": false,
      "shoutedCount": 987,
      "slug": "xyz789",
      "sortDate": "abc123",
      "tags": [Tag],
      "title": "abc123",
      "unreadCommentNotificationsByCurrentUser": [
        NOTIFIED
      ],
      "unreadNotificationByCurrentUser": NOTIFIED,
      "updatedAt": "xyz789",
      "viewedTeaserByCurrentUser": true,
      "viewedTeaserCount": 987,
      "visibility": "friends"
    }
  }
}

unshout

Description

Withdraw a shout from the given post or comment. Requires authentication.

Response

Returns a Boolean!

Arguments
Name Description
id - ID!
type - ShoutTypeEnum!

Example

Query
mutation unshout(
  $id: ID!,
  $type: ShoutTypeEnum!
) {
  unshout(
    id: $id,
    type: $type
  )
}
Variables
{"id": "4", "type": "Comment"}
Response
{"data": {"unshout": true}}

updateApiKey

Description

Rename one of your own API keys. Requires authentication.

Response

Returns an ApiKey!

Arguments
Name Description
id - ID!
name - String!

Example

Query
mutation updateApiKey(
  $id: ID!,
  $name: String!
) {
  updateApiKey(
    id: $id,
    name: $name
  ) {
    createdAt
    disabled
    disabledAt
    expiresAt
    id
    keyPrefix
    lastUsedAt
    name
    owner {
      ...UserFragment
    }
  }
}
Variables
{"id": 4, "name": "xyz789"}
Response
{
  "data": {
    "updateApiKey": {
      "createdAt": "xyz789",
      "disabled": true,
      "disabledAt": "xyz789",
      "expiresAt": "xyz789",
      "id": "4",
      "keyPrefix": "xyz789",
      "lastUsedAt": "xyz789",
      "name": "abc123",
      "owner": User
    }
  }
}

updateOnlineStatus

Description

Update the current user's online/away status. Requires authentication.

Response

Returns a Boolean!

Arguments
Name Description
status - OnlineStatus!

Example

Query
mutation updateOnlineStatus($status: OnlineStatus!) {
  updateOnlineStatus(status: $status)
}
Variables
{"status": "away"}
Response
{"data": {"updateOnlineStatus": false}}

updateRole

Description

Replace an existing role's permission bundle. Requires the role.manage permission.

Response

Returns a Role!

Arguments
Name Description
name - String!
permissions - [String!]!

Example

Query
mutation updateRole(
  $name: String!,
  $permissions: [String!]!
) {
  updateRole(
    name: $name,
    permissions: $permissions
  ) {
    memberCount
    name
    permissions
    protected
  }
}
Variables
{
  "name": "xyz789",
  "permissions": ["xyz789"]
}
Response
{
  "data": {
    "updateRole": {
      "memberCount": 123,
      "name": "xyz789",
      "permissions": ["abc123"],
      "protected": true
    }
  }
}

Subscriptions

chatMessageAdded

Description

Pushes newly added messages in the current user's rooms.

Response

Returns a Message

Example

Query
subscription chatMessageAdded {
  chatMessageAdded {
    _id
    author {
      ...UserFragment
    }
    avatar
    content
    createdAt
    date
    distributed
    files {
      ...FileFragment
    }
    id
    indexId
    room {
      ...RoomFragment
    }
    saved
    seen
    senderId
    updatedAt
    username
  }
}
Response
{
  "data": {
    "chatMessageAdded": {
      "_id": "xyz789",
      "author": User,
      "avatar": "abc123",
      "content": "xyz789",
      "createdAt": "xyz789",
      "date": "xyz789",
      "distributed": true,
      "files": [File],
      "id": 4,
      "indexId": 987,
      "room": Room,
      "saved": true,
      "seen": false,
      "senderId": "xyz789",
      "updatedAt": "abc123",
      "username": "abc123"
    }
  }
}

chatMessageStatusUpdated

Description

Pushes delivery/seen status changes for messages.

Response

Returns a ChatMessageStatusPayload

Example

Query
subscription chatMessageStatusUpdated {
  chatMessageStatusUpdated {
    messageIds
    roomId
    status
  }
}
Response
{
  "data": {
    "chatMessageStatusUpdated": {
      "messageIds": ["abc123"],
      "roomId": "4",
      "status": "abc123"
    }
  }
}

groupMembershipVisibilityChanged

Description

Fires when a user changes which group memberships are visible on their profile.

Arguments
Name Description
userId - ID!

Example

Query
subscription groupMembershipVisibilityChanged($userId: ID!) {
  groupMembershipVisibilityChanged(userId: $userId) {
    userId
  }
}
Variables
{"userId": 4}
Response
{"data": {"groupMembershipVisibilityChanged": {"userId": 4}}}

groupShowMembersChanged

Description

Fires when a closed group's showMembers setting changes.

Response

Returns a GroupShowMembersChanged!

Arguments
Name Description
groupId - ID!

Example

Query
subscription groupShowMembersChanged($groupId: ID!) {
  groupShowMembersChanged(groupId: $groupId) {
    groupId
  }
}
Variables
{"groupId": "4"}
Response
{"data": {"groupShowMembersChanged": {"groupId": 4}}}

notificationAdded

Description

Pushes newly created notifications for the current user in real time.

Response

Returns an NOTIFIED

Example

Query
subscription notificationAdded {
  notificationAdded {
    createdAt
    from {
      ... on Comment {
        ...CommentFragment
      }
      ... on Group {
        ...GroupFragment
      }
      ... on Post {
        ...PostFragment
      }
    }
    id
    read
    reason
    relatedUser {
      ...UserFragment
    }
    to {
      ...UserFragment
    }
    updatedAt
  }
}
Response
{
  "data": {
    "notificationAdded": {
      "createdAt": "xyz789",
      "from": Comment,
      "id": "4",
      "read": false,
      "reason": "changed_group_member_role",
      "relatedUser": User,
      "to": User,
      "updatedAt": "xyz789"
    }
  }
}

permissionsChanged

Description

Fires when a role's permissions or a user's role assignment changes.

Response

Returns a PermissionsChanged!

Example

Query
subscription permissionsChanged {
  permissionsChanged {
    previousRoleName
    roleName
  }
}
Response
{
  "data": {
    "permissionsChanged": {
      "previousRoleName": "xyz789",
      "roleName": "xyz789"
    }
  }
}

policyChanged

Description

Fires whenever a policy value changes, so clients can update live.

Response

Returns a PolicyValueChanged!

Example

Query
subscription policyChanged {
  policyChanged {
    key
    value
  }
}
Response
{
  "data": {
    "policyChanged": {
      "key": "activeBranding",
      "value": "xyz789"
    }
  }
}

roomUpdated

Description

Pushes a room whenever its state changes (e.g. a new message arrives).

Response

Returns a Room

Example

Query
subscription roomUpdated {
  roomUpdated {
    _id
    avatar
    createdAt
    group {
      ...GroupFragment
    }
    id
    isGroupRoom
    lastMessage {
      ...MessageFragment
    }
    lastMessageAt
    roomId
    roomName
    unreadCount
    updatedAt
    users {
      ...UserFragment
    }
  }
}
Response
{
  "data": {
    "roomUpdated": {
      "_id": "abc123",
      "avatar": "abc123",
      "createdAt": "xyz789",
      "group": Group,
      "id": 4,
      "isGroupRoom": true,
      "lastMessage": Message,
      "lastMessageAt": "xyz789",
      "roomId": "xyz789",
      "roomName": "abc123",
      "unreadCount": 987,
      "updatedAt": "abc123",
      "users": [User]
    }
  }
}

videoCallParticipantCountChanged

Description

Pushes the updated participant count as users join or leave a group's video call.

Response

Returns a VideoCallParticipantCount!

Arguments
Name Description
groupId - ID!

Example

Query
subscription videoCallParticipantCountChanged($groupId: ID!) {
  videoCallParticipantCountChanged(groupId: $groupId) {
    count
    groupId
  }
}
Variables
{"groupId": 4}
Response
{"data": {"videoCallParticipantCountChanged": {"count": 987, "groupId": 4}}}

Types

ApiKey

Description

A personal API key that authenticates programmatic access on behalf of its owner. Only a non-secret prefix and metadata are stored; the secret itself is shown exactly once, at creation.

Fields
Field Name Description
createdAt - String!
disabled - Boolean! True once the key has been revoked.
disabledAt - String
expiresAt - String When the key expires, or null if it never expires.
id - ID!
keyPrefix - String! Non-secret leading segment of the key, used to identify it in listings.
lastUsedAt - String When the key last authenticated a request, or null if never used.
name - String! Human-readable label chosen by the owner.
owner - User
Example
{
  "createdAt": "xyz789",
  "disabled": false,
  "disabledAt": "abc123",
  "expiresAt": "xyz789",
  "id": 4,
  "keyPrefix": "xyz789",
  "lastUsedAt": "xyz789",
  "name": "xyz789",
  "owner": User
}

ApiKeyUserSummary

Description

Aggregated per-user API-key usage, for the administration overview.

Fields
Field Name Description
activeCount - Int! Number of the user's currently active (non-revoked) keys.
commentsCount - Int!
lastActivity - String Most recent time any of the user's keys was used, or null.
postsCount - Int!
revokedCount - Int! Number of the user's revoked keys.
user - User!
Example
{
  "activeCount": 987,
  "commentsCount": 123,
  "lastActivity": "abc123",
  "postsCount": 123,
  "revokedCount": 987,
  "user": User
}

ApiKeyWithSecret

Description

Returned exactly once, on creation — the only moment the full secret is exposed.

Fields
Field Name Description
apiKey - ApiKey!
secret - String! The full API key secret. Store it now; it cannot be retrieved again.
Example
{
  "apiKey": ApiKey,
  "secret": "xyz789"
}

Badge

Description

A badge that can be attached to users — either a verification mark or an awardable trophy.

Fields
Field Name Description
createdAt - String
description - String!
icon - String! Identifier/URL of the badge's icon asset.
id - ID!
isDefault - Boolean! Whether this badge is the instance-wide default of its type.
rewarded - [User]! Users currently wearing this trophy badge.
type - BadgeType!
verifies - [User]! Users whose verification this badge represents.
Example
{
  "createdAt": "xyz789",
  "description": "abc123",
  "icon": "xyz789",
  "id": 4,
  "isDefault": true,
  "rewarded": [User],
  "type": "trophy",
  "verifies": [User]
}

BadgeType

Description

The purpose of a badge.

Values
Enum Value Description

trophy

An achievement a user can be awarded and choose to display.

verification

Marks a user as verified.
Example
"trophy"

Boolean

Description

The Boolean scalar type represents true or false.

Category

Description

A topical category that posts and groups can be filed under. Categories are a fixed, instance-configured taxonomy (unlike free-form tags).

Fields
Field Name Description
createdAt - String
icon - String! Identifier of the category's icon.
id - ID!
name - String!
postCount - Int! Number of posts filed under this category.
posts - [Post]!
slug - String
updatedAt - String
Example
{
  "createdAt": "xyz789",
  "icon": "xyz789",
  "id": 4,
  "name": "xyz789",
  "postCount": 123,
  "posts": [Post],
  "slug": "xyz789",
  "updatedAt": "abc123"
}

ChatMessageStatusPayload

Description

Real-time delivery/seen-status update for messages in a room.

Fields
Field Name Description
messageIds - [String!]!
roomId - ID!
status - String!
Example
{
  "messageIds": ["xyz789"],
  "roomId": "4",
  "status": "xyz789"
}

ChatTarget

Description

A candidate recipient when starting a chat: a user or a group.

Types
Union Types

Group

User

Example
Group

Comment

Description

A comment written by a user in reply to a post.

Fields
Field Name Description
activityId - String ActivityPub activity id, for federated comments.
author - User
content - String! Comment body as rich text (HTML).
createdAt - String
deleted - Boolean True once the comment has been moderated away.
disabled - Boolean True once the comment has been disabled by a moderator.
id - ID!
isPostObservedByMe - Boolean! Whether the current user observes the post this comment belongs to.
post - Post The post this comment belongs to.
postObservingUsersCount - Int! Number of users observing the post this comment belongs to.
shoutedByCurrentUser - Boolean! Whether the current user has shouted (endorsed) this comment.
shoutedCount - Int! Number of users who have shouted (endorsed) this comment.
updatedAt - String
Example
{
  "activityId": "xyz789",
  "author": User,
  "content": "abc123",
  "createdAt": "xyz789",
  "deleted": true,
  "disabled": false,
  "id": "4",
  "isPostObservedByMe": true,
  "post": Post,
  "postObservingUsersCount": 123,
  "shoutedByCurrentUser": true,
  "shoutedCount": 987,
  "updatedAt": "abc123"
}

ConfigKeyState

Values
Enum Value Description

empty

missing

set

Example
"empty"

Deletable

Description

Resources that can be deleted along with a user account.

Values
Enum Value Description

Comment

Post

Example
"Comment"

Donations

Description

Instance-wide donation campaign state, shown in the donation progress widget.

Fields
Field Name Description
createdAt - String!
goal - Int! Fundraising target amount.
id - ID!
progress - Int! Amount raised so far.
showDonations - Boolean! Whether the donation widget is shown to users.
updatedAt - String!
Example
{
  "createdAt": "abc123",
  "goal": 987,
  "id": "4",
  "progress": 987,
  "showDonations": true,
  "updatedAt": "abc123"
}

EMOTED

Description

Relationship representing a user's emotional reaction to a post.

Fields
Field Name Description
createdAt - String
emotion - Emotion
from - User The reacting user.
to - Post The post reacted to.
updatedAt - String
Example
{
  "createdAt": "abc123",
  "emotion": "angry",
  "from": User,
  "to": Post,
  "updatedAt": "abc123"
}

EffectivePermission

Description

A permission the current viewer effectively holds, carrying its catalog group so the webapp can gate UI areas by group (e.g. show the admin area for ANY administration-group permission) without a hard-coded key list.

Fields
Field Name Description
group - String!
key - String!
Example
{
  "group": "abc123",
  "key": "xyz789"
}

EmailAddress

Description

An email address belonging to a user, with its verification state.

Fields
Field Name Description
createdAt - String
email - ID!
verifiedAt - String When the address was verified, or null if still unverified.
Example
{
  "createdAt": "abc123",
  "email": 4,
  "verifiedAt": "abc123"
}

EmailNotificationSettings

Description

A user's email notification toggles for one category (post, chat or group).

Fields
Field Name Description
settings - [EmailNotificationSettingsOption]
type - EmailNotificationSettingsType
Example
{
  "settings": [EmailNotificationSettingsOption],
  "type": "chat"
}

EmailNotificationSettingsInput

Description

Input toggling a single email notification setting on or off.

Fields
Input Field Description
name - EmailNotificationSettingsName
value - Boolean
Example
{"name": "chatMessage", "value": false}

EmailNotificationSettingsName

Description

An individual email-notification toggle, identifying the event that triggers an email.

Values
Enum Value Description

chatMessage

The user received a direct chat message.

commentOnObservedPost

Someone commented on a post the user observes.

followingUsers

A user the current user follows published a post.

groupMemberJoined

A user joined a group the user administrates.

groupMemberLeft

A user left a group the user administrates.

groupMemberRemoved

A member was removed from a group the user administrates.

groupMemberRoleChanged

A member's role changed in a group the user administrates.

mention

The user was mentioned in a post or comment.

postInGroup

A new post was created in a group the user is a member of.
Example
"chatMessage"

EmailNotificationSettingsOption

Description

A single email notification toggle and its current value.

Fields
Field Name Description
name - EmailNotificationSettingsName
value - Boolean
Example
{"name": "chatMessage", "value": true}

EmailNotificationSettingsType

Description

The category a set of email-notification toggles belongs to.

Values
Enum Value Description

chat

Notifications about direct chat messages.

group

Notifications about group membership events.

post

Notifications about posts and comments.
Example
"chat"

Embed

Description

oEmbed-style metadata scraped from an external URL, used to render link previews.

Fields
Field Name Description
audio - String
author - String
date - String
description - String
html - String Embeddable HTML fragment (e.g. a player iframe), when the provider offers one.
image - String URL of a representative preview image.
lang - String Detected content language.
publisher - String
sources - [String]
title - String
type - String The oEmbed resource type (e.g. link, video, photo, rich).
url - String
video - String
Example
{
  "audio": "abc123",
  "author": "xyz789",
  "date": "xyz789",
  "description": "abc123",
  "html": "xyz789",
  "image": "xyz789",
  "lang": "xyz789",
  "publisher": "abc123",
  "sources": ["abc123"],
  "title": "abc123",
  "type": "abc123",
  "url": "xyz789",
  "video": "xyz789"
}

EmbedProvider

Description

An oEmbed provider this instance can resolve link previews for.

Fields
Field Name Description
name - String! Display name, e.g. "YouTube".
url - String! The provider's own site, e.g. "https://youtube.com".
Example
{
  "name": "xyz789",
  "url": "xyz789"
}

Emotion

Description

An emotional reaction a user can leave on a post.

Values
Enum Value Description

angry

cry

funny

happy

surprised

Example
"angry"

EnvCategory

Values
Enum Value Description

auth

branding

database

features

general

layout

mail

maps

monitoring

redis

registration

server

storage

video

Example
"auth"

EnvKeyStatus

Fields
Field Name Description
name - String! The environment variable name (e.g. LIVEKIT_API_SECRET).
state - ConfigKeyState! Presence state — the only thing reported; a value is never returned.
Example
{"name": "xyz789", "state": "empty"}

FILED

Description

Relationship recording that a user filed a moderation report against a resource, with the stated reason.

Fields
Field Name Description
createdAt - String!
reasonCategory - ReasonCategory!
reasonDescription - String! Free-text explanation the reporter provided.
submitter - User The user who filed the report.
Example
{
  "createdAt": "xyz789",
  "reasonCategory": "advert_products_services_commercial",
  "reasonDescription": "abc123",
  "submitter": User
}

File

Description

A file attached to a chat message.

Fields
Field Name Description
duration - Float Duration in seconds for audio/video files.
extension - String
name - String
type - String MIME type of the file.
url - ID! The file's URL, which also serves as its identifier.
Example
{
  "duration": 123.45,
  "extension": "abc123",
  "name": "xyz789",
  "type": "xyz789",
  "url": "4"
}

FileInput

Description

Input for a file to attach to a chat message. The file itself must be provided as upload (attaching without it is rejected); the remaining fields are its metadata.

Fields
Input Field Description
duration - Float
extension - String
name - String
type - String
upload - Upload The file to upload. Required — the resolver rejects an attachment without it.
Example
{
  "duration": 123.45,
  "extension": "abc123",
  "name": "xyz789",
  "type": "abc123",
  "upload": Upload
}

FiledReport

Description

The result of filing a report, echoing the reason and linking to the created report.

Fields
Field Name Description
createdAt - String!
reasonCategory - ReasonCategory!
reasonDescription - String!
reportId - ID!
resource - ReportedResource!
Example
{
  "createdAt": "xyz789",
  "reasonCategory": "advert_products_services_commercial",
  "reasonDescription": "xyz789",
  "reportId": "4",
  "resource": Comment
}

Float

Description

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

Example
123.45

Group

Description

A group: a space where members share posts, chat and optionally hold video calls. Discoverability and joining are governed by its groupType.

Fields
Field Name Description
about - String Short statement of the group's goal.
actionRadius - GroupActionRadius!
avatar - Image
categories - [Category]
createdAt - String! ISO 8601 date-time string of creation.
currentlyPinnedPostsCount - Int! Number of posts currently pinned within this group.
deleted - Boolean
description - String! Full group description (rich text).
disabled - Boolean
groupType - GroupType!
id - ID!
inviteCodes - [InviteCode]! Invite codes to this group the current user has generated.
isMutedByMe - Boolean! Whether the current user has muted this group.
location - Location
locationName - String
membersCount - Int! Number of members, excluding those with a pending join request.
myRole - GroupMemberRole The current user's role in this group, or null if they are not a member.
name - String! The group's title.
posts - [Post]
postsCount - Int! Total number of non-deleted, non-disabled posts in this group.
showMembers - Boolean For closed groups: whether non-members can see the member list.
showOnProfile - Boolean Whether the profile owner has chosen to show this group on their public profile.
slug - String! URL-safe unique handle for the group.
updatedAt - String! ISO 8601 date-time string of the last update.
Example
{
  "about": "xyz789",
  "actionRadius": "continental",
  "avatar": Image,
  "categories": [Category],
  "createdAt": "xyz789",
  "currentlyPinnedPostsCount": 987,
  "deleted": true,
  "description": "abc123",
  "disabled": false,
  "groupType": "closed",
  "id": "4",
  "inviteCodes": [InviteCode],
  "isMutedByMe": true,
  "location": Location,
  "locationName": "abc123",
  "membersCount": 987,
  "myRole": "admin",
  "name": "xyz789",
  "posts": [Post],
  "postsCount": 987,
  "showMembers": false,
  "showOnProfile": true,
  "slug": "abc123",
  "updatedAt": "abc123"
}

GroupActionRadius

Description

The geographic reach a group intends its activities to have.

Values
Enum Value Description

continental

global

interplanetary

Tongue-in-cheek maximum reach: beyond planet Earth.

national

regional

Example
"continental"

GroupMember

Description

A group member paired with their membership relationship (role, join date).

Fields
Field Name Description
membership - MEMBER_OF
user - User
Example
{
  "membership": MEMBER_OF,
  "user": User
}

GroupMemberRole

Description

A user's role within a group, in ascending order of privilege.

Values
Enum Value Description

admin

Can manage members and group settings.

owner

Full control over the group, including deleting it; there is exactly one owner.

pending

Membership requested but not yet approved (closed groups); not counted as a member.

usual

Regular member.
Example
"admin"

GroupMembershipVisibilityChanged

Fields
Field Name Description
userId - ID!
Example
{"userId": "4"}

GroupShowMembersChanged

Fields
Field Name Description
groupId - ID!
Example
{"groupId": 4}

GroupType

Description

Determines a group's discoverability and how users become members.

Values
Enum Value Description

closed

Anyone can find the group, but joining requires approval by a group admin/owner.

hidden

The group is unlisted; it can only be found and joined via invite.

public

Anyone can find the group and join without approval.
Example
"closed"

ID

Description

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

Example
4

Image

Description

An image asset (avatar, hero image, etc.) with rendering metadata.

Fields
Field Name Description
alt - String Alternative text for accessibility.
aspectRatio - Float Width-to-height ratio, used to reserve layout space before load.
sensitive - Boolean Whether the image is flagged as sensitive and should be blurred by default.
transform - String URL of a variant resized to the requested width/height.
Arguments
height - Int
width - Int
type - String MIME type of the image.
url - ID! The image's URL, which also serves as its identifier.
Example
{
  "alt": "xyz789",
  "aspectRatio": 987.65,
  "sensitive": true,
  "transform": "abc123",
  "type": "abc123",
  "url": "4"
}

ImageInput

Description

Input for uploading or updating an image. Provide upload to set a new file.

Fields
Input Field Description
alt - String
aspectRatio - Float
sensitive - Boolean
type - String
upload - Upload
Example
{
  "alt": "abc123",
  "aspectRatio": 123.45,
  "sensitive": true,
  "type": "xyz789",
  "upload": Upload
}

Int

Description

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

Example
987

InviteCode

Description

An invite code. A personal code lets its holder register on the instance; a group code additionally grants membership in a specific group. May be limited by an expiry and a redemption limit.

Fields
Field Name Description
code - ID! The code string, which also serves as its identifier.
comment - String Free-form note the issuer attached to the code.
createdAt - String!
expiresAt - String When the code expires, or null if it never expires.
generatedBy - User The user who issued the code.
invitedTo - Group The group this code invites into, or null for a personal (registration-only) code.
isValid - Boolean! Whether the code can still be redeemed (not expired, invalidated, or over its redemption limit).
redeemedBy - [User] Users who have redeemed this code.
redeemedByCount - Int!
Example
{
  "code": 4,
  "comment": "xyz789",
  "createdAt": "xyz789",
  "expiresAt": "xyz789",
  "generatedBy": User,
  "invitedTo": Group,
  "isValid": false,
  "redeemedBy": [User],
  "redeemedByCount": 987
}

Location

Description

A geographic place (city, region, country, …) linked to users, groups and events. Places nest via parent, forming a hierarchy up to the country level.

Fields
Field Name Description
distanceToMe - Int Distance in kilometres from the current user's location. Requires authentication.
id - ID!
lat - Float Latitude in decimal degrees (WGS84).
lng - Float Longitude in decimal degrees (WGS84).
name - String! Localized place name. Falls back through the requested lang, the instance default language, and finally the raw name/id.
Arguments
lang - String
parent - Location The enclosing place one level up in the hierarchy.
type - String! The place's granularity (e.g. country, region, place).
Example
{
  "distanceToMe": 123,
  "id": 4,
  "lat": 987.65,
  "lng": 123.45,
  "name": "abc123",
  "parent": Location,
  "type": "xyz789"
}

LocationMapBox

Description

A geocoding suggestion returned by the MapBox-backed place search.

Fields
Field Name Description
id - ID!
lat - Float Latitude in decimal degrees (WGS84), if known.
lng - Float Longitude in decimal degrees (WGS84), if known.
place_name - String!
Example
{
  "id": 4,
  "lat": 123.45,
  "lng": 987.65,
  "place_name": "xyz789"
}

MEMBER_OF

Description

Relationship carrying a user's membership in a group, including their role and when it began.

Fields
Field Name Description
createdAt - String!
role - GroupMemberRole!
showOnProfile - Boolean
updatedAt - String!
Example
{
  "createdAt": "abc123",
  "role": "admin",
  "showOnProfile": false,
  "updatedAt": "xyz789"
}

Message

Description

A single chat message within a room.

Fields
Field Name Description
_id - String Alias of id, kept for the chat frontend (vue-advanced-chat keys objects by _id). Use id.
author - User!
avatar - String Avatar URL of the sending user.
content - String
createdAt - String
date - String! Alias of createdAt; prefer createdAt in new code.
distributed - Boolean Whether the message has been distributed to recipients (delivery-status flag).
files - [File]! Files attached to the message.
id - ID!
indexId - Int! Monotonically increasing index of the message within its room, used for ordering and paging.
room - Room!
saved - Boolean Whether the message has been persisted (delivery-status flag).
seen - Boolean Whether the current user has seen the message (always true for messages they sent).
senderId - String! Id of the sending user.
updatedAt - String
username - String! Display name of the sending user.
Example
{
  "_id": "abc123",
  "author": User,
  "avatar": "abc123",
  "content": "xyz789",
  "createdAt": "xyz789",
  "date": "xyz789",
  "distributed": true,
  "files": [File],
  "id": 4,
  "indexId": 123,
  "room": Room,
  "saved": false,
  "seen": false,
  "senderId": "xyz789",
  "updatedAt": "xyz789",
  "username": "abc123"
}

NOTIFIED

Description

Relationship representing a notification delivered to a user about some source activity.

Fields
Field Name Description
createdAt - String!
from - NotificationSource The post, comment or group the notification is about.
id - ID!
read - Boolean Whether the recipient has read the notification.
reason - NotificationReason
relatedUser - User The user who triggered the notification, when applicable.
to - User The recipient of the notification.
updatedAt - String!
Example
{
  "createdAt": "abc123",
  "from": Comment,
  "id": 4,
  "read": false,
  "reason": "changed_group_member_role",
  "relatedUser": User,
  "to": User,
  "updatedAt": "abc123"
}

NotificationOrdering

Description

Ordering options for the notifications query.

Values
Enum Value Description

createdAt_asc

createdAt_desc

updatedAt_asc

updatedAt_desc

Example
"createdAt_asc"

NotificationReason

Description

Why a notification was created.

Values
Enum Value Description

changed_group_member_role

commented_on_post

followed_user_posted

A user the recipient follows published a post.

mentioned_in_comment

mentioned_in_post

post_in_group

A new post was created in a group the recipient belongs to.

removed_user_from_group

user_joined_group

user_left_group

Example
"changed_group_member_role"

NotificationSource

Description

The kind of node a notification originates from.

Types
Union Types

Comment

Group

Post

Example
Comment

OnlineStatus

Description

A user's self-reported presence state.

Values
Enum Value Description

away

online

Example
"away"

Permission

Description

A single entry in the permission catalog: a grantable right and its metadata.

Fields
Field Name Description
available - Boolean! Whether the permission is effective right now for the requesting viewer's config/policy. False ⇒ the feature is not configured/enabled; the admin UI disables granting it.
description - String!
gatedBy - String The runtime feature gate this permission depends on (e.g. videoCall, apiKeys), or null when it is always effective.
group - String!
key - String!
Example
{
  "available": false,
  "description": "xyz789",
  "gatedBy": "abc123",
  "group": "xyz789",
  "key": "abc123"
}

PermissionsChanged

Description

A signal that effective permissions may have changed (a role's permission set, or a user's role assignment). Clients refetch their own myPermissions on receipt — the payload carries only the affected role name, no actor (Datensparsamkeit).

Fields
Field Name Description
previousRoleName - String Set only for a rename: the role's former name, so an admin roles view with this role selected can follow the selection to its new name.
roleName - String
Example
{
  "previousRoleName": "xyz789",
  "roleName": "xyz789"
}

PinnedPostCounts

Description

Instance-wide pinned-post counters.

Fields
Field Name Description
currentlyPinnedPosts - Int!
Example
{"currentlyPinnedPosts": 987}

PolicyChangeEvent

Description

An applied change to a single policy key, with audit metadata.

Fields
Field Name Description
actor - String!
key - PolicyKey!
timestamp - String!
value - String!
Example
{
  "actor": "xyz789",
  "key": "activeBranding",
  "timestamp": "abc123",
  "value": "xyz789"
}

PolicyConfigEntry

Fields
Field Name Description
available - Boolean! Whether all hard env requirements are met (always true when there are none). Policy→policy dependencies (requiresPolicy on the policy query) are folded live in the client, not here, so re-enabling a dependency un-greys the dependent key without a refetch.
category - String! Admin display group the key belongs to (e.g. registration, features, layout, video).
configuredDefault - String! The configured default = env seed if set, else the software default, JSON-encoded.
effective - String! Effective value (env-folded), JSON-encoded. This is what the permission gates read.
envSeed - String Name of the env var that SEEDS the default (soft), or null.
envSeedState - ConfigKeyState Presence of the envSeed var, or null when the key has no envSeed.
key - String! The policy key (e.g. videoConference, apiKeysEnabled).
requiresEnv - [EnvKeyStatus!]! Hard env requirements with their presence state (empty when the key needs no env).
softwareDefault - String! The software default baked into the schema, JSON-encoded.
type - String! Value type: boolean | integer.
Example
{
  "available": true,
  "category": "xyz789",
  "configuredDefault": "xyz789",
  "effective": "abc123",
  "envSeed": "abc123",
  "envSeedState": "empty",
  "key": "xyz789",
  "requiresEnv": [EnvKeyStatus],
  "softwareDefault": "abc123",
  "type": "abc123"
}

PolicyDefaults

Description

The configured policy defaults together with audit info about the last change.

Fields
Field Name Description
defaults - [PolicyEntry!]!
lastChange - PolicyLastChange
Example
{
  "defaults": [PolicyEntry],
  "lastChange": PolicyLastChange
}

PolicyEntry

Description

A single policy key with its current (or default) value, JSON-encoded (heterogeneous types: boolean / integer). The value is null for a key the viewer may not see, or a genuinely unset value (e.g. an unlimited limit).

Fields
Field Name Description
key - PolicyKey!
requiresPolicy - [PolicyKey!]! Other policy keys this one depends on (policy→policy gate): the key is only effective while every listed key is effectively on. Static schema metadata (empty for most keys); the client re-folds it so a layout toggle respects its feature gate (e.g. showGroupButtonInHeader depends on groupsEnabled).
value - String
Example
{
  "key": "activeBranding",
  "requiresPolicy": ["activeBranding"],
  "value": "xyz789"
}

PolicyKey

Values
Enum Value Description

activeBranding

apiKeysEnabled

apiKeysMaxPerUser

askForRealName

badgesEnabled

brandingComposition

categoriesActive

groupsEnabled

inviteCodesGroupPerUser

inviteCodesPersonalPerUser

inviteLinkLimit

inviteRegistration

maxGroupPinnedPosts

maxPinnedPosts

publicRegistration

requireLocation

showContentFilterHeaderMenu

showContentFilterMasonryGrid

showGroupButtonInHeader

socialMediaEnabled

videoConference

Example
"activeBranding"

PolicyLastChange

Description

Who last changed a policy value, and when.

Fields
Field Name Description
actor - String!
timestamp - String!
Example
{
  "actor": "abc123",
  "timestamp": "xyz789"
}

PolicyValueChanged

Description

A policy key/value change, broadcast to subscribers.

Fields
Field Name Description
key - PolicyKey!
value - String!
Example
{"key": "activeBranding", "value": "xyz789"}

Post

Description

A contribution — an article or event — written by a user, optionally within a group.

Fields
Field Name Description
activityId - String ActivityPub activity id, for federated posts.
author - User
categories - [Category]
clickedCount - Int! Number of times the post has been opened.
comments - [Comment]! Comments on this post. orderBy defaults to oldest first.
Arguments
orderBy - [_CommentOrdering]
commentsCount - Int! Number of visible (non-deleted, non-disabled) comments.
content - String! Post body as rich text (HTML).
createdAt - String ISO 8601 date-time string of creation.
deleted - Boolean True once the post has been moderated away.
disabled - Boolean True once the post has been disabled by a moderator.
emotions - [EMOTED]
emotionsCount - Int! Total number of emotional reactions on the post.
eventEnd - String Event end time (Event posts).
eventIsOnline - Boolean Whether the event takes place online (Event posts).
eventLocation - Location Structured location of the event (Event posts).
eventLocationName - String Name of the event's location (Event posts).
eventStart - String Event start time (Event posts).
eventVenue - String Venue/room of the event (Event posts).
group - Group The group this post belongs to, or null for a public/timeline post.
groupPinned - Boolean Whether the post is pinned within its group.
id - ID!
image - Image The post's hero image.
isObservedByMe - Boolean! Whether the current user observes this post (receives notifications about its comments).
language - String Content language as an IETF/ISO code (e.g. en, de).
lat - Float Precise latitude of the event's map pin (Event posts) — the exact point picked, independent of eventLocation's own coordinates (which belong to a Location node shared/reused across other posts, users and groups at the same address, and so cannot hold any one event's exact pick).
lng - Float Precise longitude of the event's map pin (Event posts), see lat.
objectId - String ActivityPub object id, for federated posts.
observingUsersCount - Int! Number of users observing this post.
pinned - Boolean Whether the post is pinned instance-wide.
pinnedAt - String When the post was pinned instance-wide, or null if not pinned.
pinnedBy - User The user who pinned the post instance-wide.
postType - [PostType] The post's type(s), derived from its Neo4j labels (e.g. Article, Event).
relatedContributions - [Post]! Up to 10 other posts sharing a tag or category with this one.
shoutedBy - [User]!
shoutedByCurrentUser - Boolean! Has the currently logged in user shouted that post?
shoutedCount - Int! Number of users who have shouted (endorsed) this post.
slug - String! URL-safe unique handle for the post.
sortDate - String Date used to sort the post in feeds (may differ from createdAt, e.g. for events).
tags - [Tag]!
title - String!
unreadCommentNotificationsByCurrentUser - [NOTIFIED!]! Unread notifications for comments in this post targeting the currently logged in user.
unreadNotificationByCurrentUser - NOTIFIED Unread notification for this post targeting the currently logged in user, or null.
updatedAt - String ISO 8601 date-time string of the last update.
viewedTeaserByCurrentUser - Boolean! Whether the current user has viewed the post's teaser.
viewedTeaserCount - Int! Number of times the post's teaser has been viewed.
visibility - Visibility
Example
{
  "activityId": "abc123",
  "author": User,
  "categories": [Category],
  "clickedCount": 987,
  "comments": [Comment],
  "commentsCount": 123,
  "content": "xyz789",
  "createdAt": "abc123",
  "deleted": false,
  "disabled": false,
  "emotions": [EMOTED],
  "emotionsCount": 123,
  "eventEnd": "abc123",
  "eventIsOnline": true,
  "eventLocation": Location,
  "eventLocationName": "xyz789",
  "eventStart": "abc123",
  "eventVenue": "abc123",
  "group": Group,
  "groupPinned": true,
  "id": "4",
  "image": Image,
  "isObservedByMe": false,
  "language": "xyz789",
  "lat": 123.45,
  "lng": 987.65,
  "objectId": "xyz789",
  "observingUsersCount": 123,
  "pinned": false,
  "pinnedAt": "abc123",
  "pinnedBy": User,
  "postType": ["Article"],
  "relatedContributions": [Post],
  "shoutedBy": [User],
  "shoutedByCurrentUser": false,
  "shoutedCount": 123,
  "slug": "abc123",
  "sortDate": "abc123",
  "tags": [Tag],
  "title": "xyz789",
  "unreadCommentNotificationsByCurrentUser": [NOTIFIED],
  "unreadNotificationByCurrentUser": NOTIFIED,
  "updatedAt": "xyz789",
  "viewedTeaserByCurrentUser": true,
  "viewedTeaserCount": 987,
  "visibility": "friends"
}

PostType

Description

The kind of content a post represents. Stored as an additional Neo4j node label.

Values
Enum Value Description

Article

A regular text article.

Event

An event with a date, and optionally a location or online link.
Example
"Article"

REVIEWED

Description

Relationship recording a moderator's decision on a report.

Fields
Field Name Description
closed - Boolean! Whether the moderator closed the report.
createdAt - String!
disable - Boolean! Whether the moderator disabled (hid) the reported resource.
moderator - User The moderator who made the decision.
report - Report
resource - ReviewedResource
updatedAt - String!
Example
{
  "closed": false,
  "createdAt": "xyz789",
  "disable": true,
  "moderator": User,
  "report": Report,
  "resource": Comment,
  "updatedAt": "abc123"
}

ReasonCategory

Description

Reason a report was filed. This list equals the strings of an array in file webapp/constants/modals.js.

Values
Enum Value Description

advert_products_services_commercial

Unsolicited advertising of products, services or commercial offers.

criminal_behavior_violation_german_law

Criminal behaviour or violation of (German) law.

discrimination_etc

Discrimination, racism, sexism and the like.

doxing

Publishing private/identifying information (doxing).

glorific_trivia_of_cruel_inhuman_acts

Glorification or trivialisation of cruel or inhuman acts.

intentional_intimidation_stalking_persecution

Intentional intimidation, stalking or persecution.

other

None of the listed categories fits.

pornographic_content_links

Pornographic content or links to it.
Example
"advert_products_services_commercial"

Report

Description

A moderation report about a user, post or comment, aggregating all filings and reviews for that resource.

Fields
Field Name Description
closed - Boolean! Whether the report has been closed by a moderator.
createdAt - String!
disable - Boolean! Whether the reported resource is currently disabled (hidden).
filed - [FILED]! All filings submitted against the resource.
id - ID!
resource - ReportedResource!
reviewed - [REVIEWED]! All moderator reviews of the report.
rule - ReportRule!
updatedAt - String!
Example
{
  "closed": true,
  "createdAt": "xyz789",
  "disable": false,
  "filed": [FILED],
  "id": "4",
  "resource": Comment,
  "reviewed": [REVIEWED],
  "rule": "latestReviewUpdatedAtRules",
  "updatedAt": "abc123"
}

ReportOrdering

Description

Ordering options for the reports query.

Values
Enum Value Description

createdAt_asc

createdAt_desc

Example
"createdAt_asc"

ReportRule

Description

The rule set by which a report's aggregate state is derived.

Values
Enum Value Description

latestReviewUpdatedAtRules

Example
"latestReviewUpdatedAtRules"

ReportedResource

Description

The kind of node a report can target.

Types
Union Types

Comment

Post

User

Example
Comment

ReviewedResource

Description

The kind of node a moderation decision can apply to.

Types
Union Types

Comment

Post

User

Example
Comment

Role

Description

A named bundle of permissions that can be assigned to users.

Fields
Field Name Description
memberCount - Int Number of users currently assigned this role.
name - String!
permissions - [String!]! The permission keys granted by this role.
protected - Boolean! Whether the role is a protected built-in that cannot be deleted.
Example
{
  "memberCount": 123,
  "name": "xyz789",
  "permissions": ["xyz789"],
  "protected": true
}

Room

Description

A chat room, either a one-to-one direct conversation between two users or the shared chat room of a group.

Fields
Field Name Description
_id - String Alias of id, kept for the chat frontend (vue-advanced-chat keys objects by _id). Use id.
avatar - String Display avatar URL: the group's avatar for a group room, otherwise the other participant's avatar.
createdAt - String
group - Group The group this room belongs to, or null for a direct room.
id - ID!
isGroupRoom - Boolean! True if this is a group room, false for a direct room.
lastMessage - Message The most recent message in the room.
lastMessageAt - String Timestamp of the most recent message, for sorting the room list.
roomId - String! Alias of id; prefer id in new code.
roomName - String! Display name: the group's name for a group room, otherwise the other participant's name.
unreadCount - Int Count unread messages, excluding those from blocked/muted senders.
updatedAt - String
users - [User]! Participants of the room.
Example
{
  "_id": "abc123",
  "avatar": "xyz789",
  "createdAt": "xyz789",
  "group": Group,
  "id": 4,
  "isGroupRoom": false,
  "lastMessage": Message,
  "lastMessageAt": "xyz789",
  "roomId": "xyz789",
  "roomName": "xyz789",
  "unreadCount": 987,
  "updatedAt": "xyz789",
  "users": [User]
}

SearchResult

Description

A single hit in the global search, which can be any searchable entity.

Types
Union Types

Group

Post

Tag

User

Example
Group

ShoutTypeEnum

Description

The kind of node that can be shouted (endorsed/boosted).

Values
Enum Value Description

Comment

Post

Example
"Comment"

SocialMedia

Description

A link to an external social-media profile, shown on a user's profile.

Fields
Field Name Description
id - ID!
ownedBy - User!
url - String
Example
{
  "id": 4,
  "ownedBy": User,
  "url": "xyz789"
}

Statistics

Description

Aggregate counts describing the whole instance.

Fields
Field Name Description
badgesDisplayed - Int! Number of trophy badges users have chosen to display.
badgesRewarded - Int!
chatMessages - Int!
chatRooms - Int!
comments - Int!
emails - Int! Number of registered email addresses.
follows - Int!
groups - Int!
inviteCodes - Int!
inviteCodesExpired - Int!
inviteCodesRedeemed - Int!
invites - Int!
locations - Int!
notifications - Int!
posts - Int!
reports - Int!
shouts - Int!
tags - Int!
users - Int! Number of active (non-deleted) user accounts.
usersDeleted - Int!
usersVerified - Int!
Example
{
  "badgesDisplayed": 987,
  "badgesRewarded": 987,
  "chatMessages": 987,
  "chatRooms": 987,
  "comments": 123,
  "emails": 987,
  "follows": 987,
  "groups": 123,
  "inviteCodes": 123,
  "inviteCodesExpired": 123,
  "inviteCodesRedeemed": 123,
  "invites": 987,
  "locations": 123,
  "notifications": 123,
  "posts": 987,
  "reports": 123,
  "shouts": 123,
  "tags": 987,
  "users": 123,
  "usersDeleted": 123,
  "usersVerified": 987
}

String

Description

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

Example
"abc123"

SystemConfigEntry

Fields
Field Name Description
blocking - Boolean! An unmet hard env requirement that breaks its feature regardless of the policy flag.
category - EnvCategory! Display grouping. Enum derived from the shared category vocabulary (config/categories).
effective - String Effective (in-operation) value as a display string (JSON-encoded for policy values, raw otherwise); null ⇒ show presence badge.
envKey - String! The environment variable name (e.g. NEO4J_URI, LIVEKIT_API_SECRET).
envValue - String Value the env var itself provides when set (JSON-encoded for seed vars, raw otherwise); null for secrets/unset/hard-requirement rows.
overridable - Boolean! Whether an admin can override this via a policy (deep-link target).
override - String Admin override value when it diverges from the configured default (policy rows only), else null.
policyKey - String The policy key to deep-link to on the policy tab (set for policy rows), else null.
secret - Boolean! Whether the value is sensitive — reported by presence only, its value is never returned.
softwareDefault - String The software default the value falls back to, or null (none / secret).
state - ConfigKeyState! Presence of the env var.
Example
{
  "blocking": true,
  "category": "auth",
  "effective": "xyz789",
  "envKey": "xyz789",
  "envValue": "xyz789",
  "overridable": true,
  "override": "abc123",
  "policyKey": "abc123",
  "secret": false,
  "softwareDefault": "xyz789",
  "state": "empty"
}

Tag

Description

A free-form hashtag. The tag's text is its id. Tags are created implicitly from post content (unlike the curated Category taxonomy).

Fields
Field Name Description
deleted - Boolean
disabled - Boolean
id - ID!
taggedCount - Int! Total number of posts carrying this tag.
taggedCountUnique - Int! Number of distinct authors who have used this tag.
taggedPosts - [Post]!
Example
{
  "deleted": false,
  "disabled": true,
  "id": 4,
  "taggedCount": 987,
  "taggedCountUnique": 987,
  "taggedPosts": [Post]
}

Upload

Description

The Upload scalar type represents a file upload, sent as multipart/form-data per the GraphQL multipart request spec.

Example
Upload

User

Description

A person's account. Most fields are readable by any authenticated user; a few (email, notification and invite settings) are restricted to the owner or to admins.

Fields
Field Name Description
_id - String Alias of id, kept for the chat frontend (vue-advanced-chat keys objects by _id). Use id.
about - String The user's profile bio.
activeCategories - [String] Category slugs the user has activated as their content filter.
actorId - String ActivityPub actor id, for federated users.
allowEmbedIframes - Boolean Whether the user permits embedded iframes in content they view.
avatar - Image
badgeTrophies - [Badge]! All trophy badges awarded to the user.
badgeTrophiesCount - Int!
badgeTrophiesSelected - [Badge!]! Trophy badges the user has chosen to display, in slot order.
badgeTrophiesUnused - [Badge]! Awarded trophy badges the user is not currently displaying.
badgeTrophiesUnusedCount - Int!
badgeVerification - Badge! The user's verification badge.
blocked - Boolean! Whether there is a block in either direction between this user and the current user.
categories - [Category]
commentedCount - Int!
comments - [Comment]! Comments written by this user.
contributions - [Post]! Posts written by this user.
contributionsCount - Int!
createdAt - String ISO 8601 date-time string of registration.
deleted - Boolean True once the account has been deleted (soft delete).
disabled - Boolean True while the account is disabled/deactivated.
email - String! The user's primary email address. Visible only to the owner or with user.email.readAny.
emailNotificationSettings - [EmailNotificationSettings]! The user's email notification settings. Visible only to the owner.
emotions - [EMOTED]
followedBy - [User]! Users who follow this user.
Arguments
first - Int
nameFilter - String
offset - Int
followedByCount - Int!
followedByCurrentUser - Boolean! Is the currently logged in user following that user?
following - [User]! Users this user follows.
Arguments
first - Int
nameFilter - String
offset - Int
followingCount - Int!
friends - [User]!
friendsCount - Int!
groups - [Group] Groups this user is a member of. Ordered by shared membership with the viewer first.
Arguments
first - Int
nameFilter - String
offset - Int
id - ID!
inviteCodes - [InviteCode]! personal inviteCodes the user has generated
invited - [User] Users this user has invited.
invitedBy - User The user who invited this user, if any.
isBlocked - Boolean! Whether this user is blocked by the current user.
isMuted - Boolean! Whether this user is muted by the current user.
locale - String The user's preferred UI language.
location - Location
locationName - String
name - String
publicKey - String The user's public key, for federation/verification.
redeemedInviteCode - InviteCode The invite code this user redeemed on registration, if any.
roleName - String The user's single dynamic role name (HAS_ROLE), incl. custom roles. Visible with role.manage.
shouted - [Post]! Posts this user has shouted (endorsed).
shoutedCount - Int!
showClosedGroupsOnProfile - Boolean Whether the user's closed group memberships are shown on their profile.
showHiddenGroupsOnProfile - Boolean Whether the user's hidden group memberships are shown on their profile.
showPublicGroupsOnProfile - Boolean Whether the user's public group memberships are shown on their profile.
showShoutsPublicly - Boolean Whether the user's shouts are shown publicly on their profile.
slug - String! URL-safe unique handle for the user.
socialMedia - [SocialMedia]!
termsAndConditionsAgreedAt - String When the user last agreed to the terms & conditions.
termsAndConditionsAgreedVersion - String Version of the terms & conditions the user last agreed to.
updatedAt - String ISO 8601 date-time string of the last update.
Example
{
  "_id": "abc123",
  "about": "xyz789",
  "activeCategories": ["xyz789"],
  "actorId": "abc123",
  "allowEmbedIframes": false,
  "avatar": Image,
  "badgeTrophies": [Badge],
  "badgeTrophiesCount": 987,
  "badgeTrophiesSelected": [Badge],
  "badgeTrophiesUnused": [Badge],
  "badgeTrophiesUnusedCount": 987,
  "badgeVerification": Badge,
  "blocked": false,
  "categories": [Category],
  "commentedCount": 123,
  "comments": [Comment],
  "contributions": [Post],
  "contributionsCount": 987,
  "createdAt": "xyz789",
  "deleted": false,
  "disabled": false,
  "email": "xyz789",
  "emailNotificationSettings": [
    EmailNotificationSettings
  ],
  "emotions": [EMOTED],
  "followedBy": [User],
  "followedByCount": 987,
  "followedByCurrentUser": true,
  "following": [User],
  "followingCount": 987,
  "friends": [User],
  "friendsCount": 123,
  "groups": [Group],
  "id": 4,
  "inviteCodes": [InviteCode],
  "invited": [User],
  "invitedBy": User,
  "isBlocked": false,
  "isMuted": false,
  "locale": "xyz789",
  "location": Location,
  "locationName": "xyz789",
  "name": "xyz789",
  "publicKey": "abc123",
  "redeemedInviteCode": InviteCode,
  "roleName": "abc123",
  "shouted": [Post],
  "shoutedCount": 123,
  "showClosedGroupsOnProfile": false,
  "showHiddenGroupsOnProfile": false,
  "showPublicGroupsOnProfile": false,
  "showShoutsPublicly": true,
  "slug": "abc123",
  "socialMedia": [SocialMedia],
  "termsAndConditionsAgreedAt": "abc123",
  "termsAndConditionsAgreedVersion": "abc123",
  "updatedAt": "abc123"
}

UserData

Description

A bundle of a user together with their posts, used for GDPR-style data export/inspection.

Fields
Field Name Description
posts - [Post]
user - User!
Example
{"posts": [Post], "user": User}

VideoCallConfig

Description

Whether group video calls are available on this instance.

Fields
Field Name Description
enabled - Boolean!
Example
{"enabled": false}

VideoCallJoinPayload

Description

Credentials for connecting to a group's video-call room on the media server.

Fields
Field Name Description
roomName - String! Name of the room to join.
token - String! Access token authorising the current user to join the room.
url - String! WebSocket URL of the media server.
Example
{
  "roomName": "xyz789",
  "token": "abc123",
  "url": "abc123"
}

VideoCallParticipantCount

Description

Live participant count for a group's video call.

Fields
Field Name Description
count - Int!
groupId - ID!
Example
{"count": 987, "groupId": 4}

Visibility

Description

Who is allowed to see a post.

Values
Enum Value Description

friends

Visible only to the author's friends.

private

Visible only to the author.

public

Visible to everyone, including logged-out visitors and federated instances.
Example
"friends"

_CategoryOrdering

Values
Enum Value Description

createdAt_asc

createdAt_desc

icon_asc

icon_desc

id_asc

id_desc

name_asc

name_desc

postCount_asc

postCount_desc

slug_asc

slug_desc

updatedAt_asc

updatedAt_desc

Example
"createdAt_asc"

_CommentFilter

Description

Filter for the Comment query. Scoped to what helpers/nodeQuery.ts implements; anything not listed is rejected at validation time.

Fields
Input Field Description
id - ID A single comment id; shorthand for a one-element id_in.
id_in - [ID!]
Example
{"id": 4, "id_in": ["4"]}

_CommentOrdering

Values
Enum Value Description

content_asc

content_desc

createdAt_asc

createdAt_desc

id_asc

id_desc

updatedAt_asc

updatedAt_desc

Example
"content_asc"

_EMOTEDInput

Description

Selects which emotion to add or remove on a post.

Fields
Input Field Description
createdAt - String
emotion - Emotion
updatedAt - String
Example
{
  "createdAt": "xyz789",
  "emotion": "angry",
  "updatedAt": "xyz789"
}

_EventInput

Description

Event details supplied when a post is of type Event.

Fields
Input Field Description
eventEnd - String
eventIsOnline - Boolean
eventLocationName - String
eventStart - String!
eventVenue - String
lat - Float Precise coordinates for eventLocationName (e.g. a dropped map pin or picked search result). When given, the server reverse-geocodes these instead of re-deriving a location by forward-geocoding the name text, so the saved location matches the exact point the user picked rather than a text-search approximation.
lng - Float
Example
{
  "eventEnd": "xyz789",
  "eventIsOnline": true,
  "eventLocationName": "xyz789",
  "eventStart": "abc123",
  "eventVenue": "xyz789",
  "lat": 123.45,
  "lng": 987.65
}

_MessageOrdering

Values
Enum Value Description

indexId_desc

Example
"indexId_desc"

_PostAuthorFilter

Description

Selects an author, either directly or by who follows them.

Fields
Input Field Description
followedBy_some - _PostAuthorFollowedByFilter
id - ID
Example
{
  "followedBy_some": _PostAuthorFollowedByFilter,
  "id": "4"
}

_PostAuthorFollowedByFilter

Description

Selects authors the given user follows.

Fields
Input Field Description
id - ID
Example
{"id": 4}

_PostAuthorIdsFilter

Description

Selects authors by id.

Fields
Input Field Description
id_in - [ID!]
Example
{"id_in": ["4"]}

_PostCategoriesFilter

Description

Selects categories by id.

Fields
Input Field Description
id_in - [ID!]
Example
{"id_in": [4]}

_PostCommentsAuthorFilter

Description

Selects a comment author by id.

Fields
Input Field Description
id - ID
Example
{"id": 4}

_PostCommentsFilter

Description

Selects posts by who commented on them.

Fields
Input Field Description
author - _PostCommentsAuthorFilter
Example
{"author": _PostCommentsAuthorFilter}

_PostEMOTEDFilter

Fields
Input Field Description
createdAt - String
emotion_in - [Emotion!]
updatedAt - String
Example
{
  "createdAt": "xyz789",
  "emotion_in": ["angry"],
  "updatedAt": "xyz789"
}

_PostFilter

Description

Filter for the post queries. Scoped to what helpers/postFilter.ts implements; anything not listed is rejected at validation time.

Fields
Input Field Description
AND - [_PostFilter!] Combine filters; every branch must match.
OR - [_PostFilter!] Combine filters; at least one branch must match.
author - _PostAuthorFilter Filter by the post's author.
author_not - _PostAuthorIdsFilter Exclude posts by these authors.
categories_some - _PostCategoriesFilter Posts filed under any of these categories.
comments_some - _PostCommentsFilter Posts commented on by the given user.
content - String
createdAt - String
deleted - Boolean
disabled - Boolean
emotions_some - _PostEMOTEDFilter Posts carrying any of these emotions.
eventEnd - String Exact match, including null — used to find events with no explicit end date.
eventEnd_gte - String Events ending at or after this time.
eventStart_gte - String Events starting at or after this time.
group - _PostGroupFilter Filter by the group the post was published in.
groupPinned - Boolean Posts pinned inside their group.
hasLocation - Boolean Only posts that have a location attached.
id - ID A single post id; shorthand for a one-element id_in.
id_in - [ID!]
id_not_in - [ID!]
imageAspectRatio - Float
imageBlurred - Boolean
language - String
language_in - [String!]
pinned - Boolean Instance-wide pinned posts.
postType_in - [PostType!] Restrict to these post types (Article, Event, ...).
postsInMyGroups - Boolean Posts in the groups the current user belongs to.
shoutedBy_some - _PostShoutedByFilter Posts shouted by the given user.
skipPinnedFilter - Boolean Skip the pinned-posts-first ordering. Used by the map, which sorts by location instead.
slug - String
tags_some - _PostTagsFilter Posts carrying any of these hashtags.
title - String
updatedAt - String
visibility - Visibility
Example
{
  "AND": [_PostFilter],
  "OR": [_PostFilter],
  "author": _PostAuthorFilter,
  "author_not": _PostAuthorIdsFilter,
  "categories_some": _PostCategoriesFilter,
  "comments_some": _PostCommentsFilter,
  "content": "xyz789",
  "createdAt": "xyz789",
  "deleted": false,
  "disabled": false,
  "emotions_some": _PostEMOTEDFilter,
  "eventEnd": "abc123",
  "eventEnd_gte": "xyz789",
  "eventStart_gte": "xyz789",
  "group": _PostGroupFilter,
  "groupPinned": true,
  "hasLocation": true,
  "id": 4,
  "id_in": ["4"],
  "id_not_in": [4],
  "imageAspectRatio": 123.45,
  "imageBlurred": true,
  "language": "abc123",
  "language_in": ["xyz789"],
  "pinned": false,
  "postType_in": ["Article"],
  "postsInMyGroups": true,
  "shoutedBy_some": _PostShoutedByFilter,
  "skipPinnedFilter": false,
  "slug": "abc123",
  "tags_some": _PostTagsFilter,
  "title": "abc123",
  "updatedAt": "xyz789",
  "visibility": "friends"
}

_PostGroupFilter

Description

Selects a group, either by id or from a set.

Fields
Input Field Description
id - ID
id_in - [ID!]
Example
{
  "id": "4",
  "id_in": ["4"]
}

_PostInput

Description

References a post by id.

Fields
Input Field Description
id - ID!
Example
{"id": 4}

_PostOrdering

Values
Enum Value Description

content_asc

content_desc

createdAt_asc

createdAt_desc

eventStart_asc

eventStart_desc

groupPinned_asc

groupPinned_desc

id_asc

id_desc

language_asc

language_desc

pinned_asc

pinned_desc

slug_asc

slug_desc

sortDate_asc

sortDate_desc

title_asc

title_desc

updatedAt_asc

updatedAt_desc

visibility_asc

visibility_desc

Example
"content_asc"

_PostShoutedByFilter

Description

Selects posts by who shouted them.

Fields
Input Field Description
id - ID
Example
{"id": "4"}

_PostTagsFilter

Description

Selects hashtags. A tag's text is its id.

Fields
Input Field Description
id - ID
id_in - [ID!]
Example
{"id": "4", "id_in": [4]}

_RoomOrdering

Values
Enum Value Description

createdAt_desc

lastMessageAt_desc

Example
"createdAt_desc"

_TagFilter

Description

Filter for the Tag query. Scoped to what helpers/nodeQuery.ts implements; anything not listed is rejected at validation time.

Fields
Input Field Description
id - ID A single tag id; shorthand for a one-element id_in.
id_in - [ID!]
Example
{"id": 4, "id_in": [4]}

_TagOrdering

Values
Enum Value Description

id_asc

id_desc

taggedCountUnique_asc

taggedCountUnique_desc

taggedCount_asc

taggedCount_desc

Example
"id_asc"

_UserFilter

Description

Filter for the User query. Scoped to what users.ts implements; anything not listed is rejected at validation time.

Fields
Input Field Description
hasLocation - Boolean Only users that have a location attached.
id - ID A single user id; shorthand for a one-element id_in.
id_in - [ID!] Restrict to these user ids.
Example
{"hasLocation": true, "id": 4, "id_in": [4]}

_UserOrdering

Values
Enum Value Description

about_asc

about_desc

createdAt_asc

createdAt_desc

id_asc

id_desc

locale_asc

locale_desc

locationName_asc

locationName_desc

name_asc

name_desc

slug_asc

slug_desc

updatedAt_asc

updatedAt_desc

Example
"about_asc"

groupSearchResults

Description

A page of group search results with the total match count.

Fields
Field Name Description
groupCount - Int
groups - [Group]!
Example
{"groupCount": 123, "groups": [Group]}

hashtagSearchResults

Description

A page of hashtag search results with the total match count.

Fields
Field Name Description
hashtagCount - Int
hashtags - [Tag]!
Example
{"hashtagCount": 987, "hashtags": [Tag]}

postSearchResults

Description

A page of post search results with the total match count.

Fields
Field Name Description
postCount - Int
posts - [Post]!
Example
{"postCount": 987, "posts": [Post]}

userSearchResults

Description

A page of user search results with the total match count.

Fields
Field Name Description
userCount - Int
users - [User]!
Example
{"userCount": 987, "users": [User]}