Logo Decentralized Social Network

Requests

Activity Reactions

Local registry of all activity in the form of reactions performed by the node.

/activity/reactions/search

Get the list of all reactions performed by the node, filtered by some criteria.

Request body:
ActivityReactionFilter
Response:
ActivityReactionInfo[]
Authentication: read more
admin

Asyncronous Operations

Asyncronous operations pending or just finished on the node.

/async-operations/remote-posting-verification/{id}

Get status of the asynchronous operation that performs verification of a remote posting signature.

Path parameters:
String id – asynchronous operation ID
Response:
RemotePostingVerificationInfo
Authentication: read more
admin
Errors:
Code Description
async-operation.not-found async operation with the given ID is not found

/async-operations/remote-reaction-verification/{id}

Get status of the asynchronous operation that performs verification of the signature of a reaction to a remote posting.

Path parameters:
String id – asynchronous operation ID
Response:
RemoteReactionVerificationInfo
Authentication: read more
admin
Errors:
Code Description
async-operation.not-found async operation with the given ID is not found

Avatars

Avatars of the node's owner. The list of avatars is ordered using ordinals that every avatar has.

Every avatar has a shape. It is stored and returned solely for client's interpretation. The shape has no meaning for the node and does not affect the avatar image stored at the node.

/avatars

Get the list of avatars in the ascending order of their ordinals.

Response:
AvatarInfo[]
Authentication: read more
none

/avatars

Create a new avatar from a public media file that exists on the node. New public media file is created for the avatar. If avatar's ordinal is not provided in the input, the avatar is assigned an ordinal that is greater than ordinals of all existing avatars.

Request body:
AvatarAttributes
Response:
AvatarInfo
Authentication: read more
admin
Errors:
Code Description
media.storage-error media file cannot be stored
avatar.media-unsupported the type of the source media file is not supported for avatars

/avatars/{id}

Get an individual avatar.

Path parameters:
String id – avatar ID
Response:
AvatarInfo
Authentication: read more
none
Errors:
Code Description
avatar.not-found avatar is not found

/avatars/{id}

Delete an avatar.

Path parameters:
String id – avatar ID
Response:
Result
Authentication: read more
admin
Errors:
Code Description
avatar.not-found avatar is not found

/avatars/reorder

Reorder avatars. Every avatar mentioned in the input is assigned an ordinal in ascending order as they appear in the input. Ordinals of avatars not mentioned in the input are not touched.

Request body:
AvatarsOrdered
Response:
AvatarOrdinal[]
Authentication: read more
admin
Errors:
Code Description
avatar.not-found avatar is not found

Blocked Instants

It is possible to block creation of some types of stories in the instants feed.

/blocked-instants

Blocks creation of instants of the given story type, related to the given entry, optionally unblocking at the given time in the future.

Request body:
BlockedInstantAttributes
Response:
BlockedInstantInfo
Authentication: read more
admin
Errors:
Code Description
entry.not-found entry is not found

/blocked-instants/{id}

Get details about the given blocked instant.

Path parameters:
String id – ID of the blocked instant
Response:
BlockedInstantInfo
Authentication: read more
admin
Errors:
Code Description
blocked-instant.not-found blocked instant is not found

/blocked-instants/{id}

Unblock the given instant.

Path parameters:
String id – ID of the blocked instant
Response:
Result
Authentication: read more
admin
Errors:
Code Description
blocked-instant.not-found blocked instant is not found

/blocked-instants/search

Search blocked instants by the given criteria.

Request body:
BlockedInstantFilter
Response:
BlockedInstantInfo[]
Authentication: read more
admin

Blocked Users

It is possible to block particular nodes from performing some operations on this node, even if they are otherwise permitted to do so. It is also possible to mark some nodes to be invisible (in discussions, for example), the client should fetch the list of invisible nodes to perform filtering on the client side.

/people/blocked-users

Blocks the given node from performing the given operations, in a particular posting or globally, optionally unblocking at the given time in the future.

Request body:
BlockedUserAttributes
Response:
BlockedUserInfo
Authentication: read more
admin
Errors:
Code Description
entry.not-found entry is not found

/people/blocked-users/{id}

Get details about the given blocked user.

Path parameters:
String id – ID of the blocked user
Response:
BlockedUserInfo
Authentication: read more
optional
Errors:
Code Description
blocked-user.not-found blocked user is not found

/people/blocked-users/{id}

Unblock the given user.

Path parameters:
String id – ID of the blocked user
Response:
Result
Authentication: read more
admin
Errors:
Code Description
blocked-user.not-found blocked user is not found

/people/blocked-users/search

Search blocked users by the given criteria.

Request body:
BlockedUserFilter
Response:
BlockedUserInfo[]
Authentication: read more
optional

/people/blocked-users/checksums

Get checksums of the information about the blocked users. This request may be used to quickly detect the changes in the blocked users list to update the cache on the client side.

Response:
BlockedUsersChecksums
Authentication: read more
admin

Blocked-by Users

The node receives notifications from nodes that blocked it. This information is stored on the node and can be requested.

/people/blocked-by-users/{id}

Get details about the given node that blocked this node.

Path parameters:
String id – ID of the blocked-by user
Response:
BlockedByUserInfo
Authentication: read more
optional
Errors:
Code Description
blocked-by-user.not-found blocked-by user is not found

/people/blocked-by-users/search

Search nodes, that blocked this node, by the given criteria.

Request body:
BlockedByUserFilter
Response:
BlockedByUserInfo[]
Authentication: read more
optional

Cartes

Cartes - cryptographic tokens used to authenticate on any node besides the home node.

/cartes

Get a set of cartes that correspond to successive periods of time. Two sequences of cartes are returned: one with all permissions and another with `view-media` permission only. The node may decide to return less cartes than the given limit.

Query parameters:
int limit(optional) maximum number of sequential cartes returned
Response:
CarteSet
Authentication: read more
admin

Comments

Comments to a posting.

/postings/{postingId}/comments

Get a slice of the list of comments, delimited by before or after moments (but not both) and the given limit. If neither before nor after are provided, the latest comments are returned. The node may decide to return less comments than the given limit. The stories are always sorted by moment, ascending.

Path parameters:
String postingId – ID of the posting
Query parameters:
int after(optional) filter comments posted strongly after this moment
int before(optional) filter comments posted at or before this moment
int limit(optional) maximum number of comments returned
Response:
CommentsSliceInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID
comments.before-after-exclusive before and after parameters are not allowed together
limit.invalid limit parameter has an invalid value

/postings/{postingId}/comments

Create a comment from the given text and add it to the given posting. The comment owner must authenticate in some way. If the comment is not signed, it will be kept for a limited period of time and then erased. If authenticated as admin, the comment is signed by the node.

Path parameters:
String postingId – ID of the posting
Request body:
CommentText
Response:
CommentCreated
Authentication: read more
required or signature
Errors:
Code Description
posting.not-found there is no posting with the given ID
posting.not-signed the posting is not signed, so it is impossible to add comments to it

/postings/{postingId}/comments/{commentId}

Get an individual comment.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
Query parameters:
String include(optional) Comma-separated list of additional blocks of information that are needed.
The values are:
  • source – source text of the comment
Response:
CommentInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting

/postings/{postingId}/comments

Update operation overrides for all comments in the posting.

Path parameters:
String postingId – ID of the posting
Request body:
CommentMassAttributes
Response:
Result
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

/postings/{postingId}/comments/{commentId}

Update the comment, creating a new revision of it. The text is processed just like in the POST request.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
Request body:
CommentText
Response:
CommentInfo
Authentication: read more
required or signature
Errors:
Code Description
posting.not-found there is no posting with the given ID
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting

/postings/{postingId}/comments/{commentId}

Delete the comment. The comment may not be purged from the database immediately, but preserved for some period of time to give a chance to restore it.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
Response:
CommentTotalInfo
Authentication: read more
required
Errors:
Code Description
posting.not-found there is no posting with the given ID
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting

/postings/{postingId}/comments/{commentId}/attached

Get all postings linked to media attached to the given comment.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
Response:
PostingInfo[]
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting

Comment Revisions

All revisions of the comment.

/postings/{postingId}/comments/{commentId}/revisions

Get all revisions of the comment.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
Response:
CommentRevisionInfo[]
Authentication: read more
optional
Errors:
Code Description
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting

/postings/{postingId}/comments/{commentId}/revisions/{id}

Get an individual revision of the comment.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
String id – ID of the revision
Response:
CommentRevisionInfo
Authentication: read more
optional
Errors:
Code Description
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting
comment-revision.not-found there is no revision with the given ID

Comment Reactions

Reactions ("Likes") - simple textless answers to a comment.

/postings/{postingId}/comments/{commentId}/reactions

Add a reaction to the given comment. The reaction owner must authenticate in some way. Only one reaction is allowed from each owner to a particular comment. If a reaction from the same owner to this comment already exists, it is overwritten. If the reaction is not signed, the reaction will be kept for a limited period of time and then erased (the previous reaction of the same owner will be restored, if any).

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
Request body:
ReactionDescription
Response:
ReactionCreated
Authentication: read more
required or signature
Errors:
Code Description
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting
comment.not-signed cannot add a reaction to an unsigned comment
reaction.not-accepted the reaction is not acceptable

/postings/{postingId}/comments/{commentId}/reactions/{ownerName}

Update the reaction's operations or set operations' overrides.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
String ownerName – reaction owner node name
Request body:
ReactionOverride
Response:
ReactionInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting

/postings/{postingId}/comments/{commentId}/reactions

Get a slice of the list of reactions to the given comment, optionally filtered by reaction type, delimited by before moment and the given limit. If before is not provided, the latest reactions are returned. The node may decide to return less reactions than the given limit. The reactions are always sorted by moment, descending.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
Query parameters:
boolean negative(optional) true, to filter negative reactions, false, to filter positive ones
int emoji(optional) filter by reaction code, usually interpreted by clients as emoji code point
int before(optional) filter reactions created at or before this moment
int limit(optional) maximum number of reactions returned
Response:
ReactionsSliceInfo
Authentication: read more
optional
Errors:
Code Description
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting
limit.invalid limit parameter has an invalid value

/postings/{postingId}/comments/{commentId}/reactions/{ownerName}

Get the detailed information about the reaction of the given owner to the given comment. If no reaction with such owner exist, an empty structure with just commentId is returned.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
String ownerName – reaction owner node name
Response:
ReactionInfo
Authentication: read more
optional
Errors:
Code Description
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting

/postings/{postingId}/comments/{commentId}/reactions

Delete all reactions to the given comment.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
Response:
Result
Authentication: read more
admin
Errors:
Code Description
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting

/postings/{postingId}/comments/{commentId}/reactions/{ownerName}

Delete the reaction of the given owner to the given comment.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
String ownerName – reaction owner node name
Response:
ReactionTotalsInfo
Authentication: read more
optional
Errors:
Code Description
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting

Comment Reaction Totals

Summary of reactions to a comment.

/postings/{postingId}/comments/{commentId}/reaction-totals

Get summary of reactions to the comment given.

Path parameters:
String postingId – ID of the posting
String commentId – ID of the comment
Response:
ReactionTotalsInfo
Authentication: read more
optional
Errors:
Code Description
comment.not-found there is no comment with the given ID
comment.wrong-posting the comment is not related to the given posting

Contacts

Information about all nodes having a relationship with the node.

/people/contacts

Search for contacts matching the search query. Every space-delimited word in the query must case-insensitively match a beginning of the contact's node name or a beginning of any space-delimited word in the contact's full name. The order of words is not significant.

The node may decide to return less contacts than the given limit.

The contacts are sorted by their closeness to the node, which is calculated from the number of reactions and comments and their age.

Query parameters:
String query(optional) the search query
int limit(optional) maximum number of contacts returned
Response:
ContactInfo[]
Authentication: read more
admin
Errors:
Code Description
limit.invalid limit parameter has an invalid value

Credentials

Credentials used to authenticate the administrator of the node.

/credentials

Check whether the credentials are initialized already.

Response:
CredentialsCreated
Authentication: read more
none

/credentials

Initialize credentials, if they are not set yet. Note that this operation can be executed without authentication, so this should be done as soon as possible after the node installation. Sign in is not allowed until the credentials are set.

Request body:
Credentials
Response:
Result
Authentication: read more
none
Errors:
Code Description
credentials.already-created credentials are already created

/credentials

Update credentials. Either old password or credentials reset token should be set in the input for the operation to succeed. Credentials reset token is not related to the authentication token and usually is sent to the user by E-mail.

Request body:
CredentialsChange
Response:
Result
Authentication: read more
none
Errors:
Code Description
credentials.login-incorrect login incorrect (the old password is wrong)
credentials.wrong-reset-token credentials reset token is wrong
credentials.reset-token-expired credentials reset token is expired

/credentials

Delete credentials.

Response:
Result
Authentication: read more
root admin

/credentials/reset

The node generates credentials reset token that is sent to the node admin by E-mail or using any other way that is defined for credentials recovery. This token then may be used to change the credentials without knowing the password.

Response:
EmailHint
Authentication: read more
none
Errors:
Code Description
credentials.email-not-set E-mail address is not set for the node

Deleted Postings

All deleted postings, that are not purged from the database yet.

/deleted-postings

Get the list of deleted postings, page by page. The node may decide to use smaller page size than the given limit. The postings are always sorted by the deletion timestamp, descending.

Query parameters:
int page(optional) page number, 0 by default
int limit(optional) page size (maximum number of postings returned), the default is defined by the node
Response:
PostingInfo[]
Authentication: read more
admin
Errors:
Code Description
page.invalid page parameter has an invalid value
limit.invalid limit parameter has an invalid value

/deleted-postings/{id}

Get an individual deleted posting.

Path parameters:
String id – ID of the posting
Response:
PostingInfo
Authentication: read more
admin
Errors:
Code Description
posting.not-found there is no deleted posting with the given ID

/deleted-postings/{id}/restore

Restore a posting. A new revision is created with the same content as in the latest revision.

Path parameters:
String id – ID of the posting
Response:
PostingInfo
Authentication: read more
admin
Errors:
Code Description
posting.not-found there is no posting with the given ID

Deleted Posting Revisions

All revisions of the deleted posting.

/deleted-postings/{postingId}/revisions

Get all revisions of the deleted posting, but not more than limit. The node may decide to return less revisions than the given limit.

Path parameters:
String postingId – ID of the posting
Query parameters:
int limit(optional) maximum number of revisions returned
Response:
PostingRevisionInfo[]
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

/deleted-postings/{postingId}/revisions/{id}

Get an individual revision of the deleted posting.

Path parameters:
String postingId – ID of the posting
String id – ID of the revision
Response:
PostingRevisionInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID
posting-revision.not-found there is no revision with the given ID

/postings/{postingId}/revisions/{id}/restore

Restore a posting at a particular revision. A new revision is created with the same content as in the given revision.

Path parameters:
String postingId – ID of the posting
String id – ID of the revision
Response:
PostingRevisionInfo
Authentication: read more
admin
Errors:
Code Description
posting.not-found there is no posting with the given ID
posting-revision.not-found there is no revision with the given ID
posting-revision.already-current the given revision is already the current one

Domains

One instance of Moera node software can serve several virtual nodes. These virtual nodes are called domains and distinguished by the hostname passed in the HTTP request. Each virtual node has node ID, it is used in the database to designate the data that belongs to a particular node. The hostname is mapped to the node ID when the request is processed, using the list of registered domains. If there is no domain with such a name, the special _default_ domain is used.

/domains

Get the list of registered domains.

Response:
DomainInfo[]
Authentication: read more
root admin

/domains/{name}

Get information about the domain with the given hostname. If domain registration for this server is public, this request does not require authentication.

Path parameters:
String name – domain name
Response:
DomainInfo
Authentication: read more
root admin or none
Errors:
Code Description
domain.not-found there is no domain with the given hostname

/domains

Create a new domain with the given hostname. If nodeId is not passed, it is generated automatically. If domain registration for this server is public, this request does not require authentication.

Request body:
DomainAttributes
Response:
DomainInfo
Authentication: read more
root admin or none
Errors:
Code Description
domain.already-exists a domain with the given hostname already exists
domain.node-id-used a domain with the given node ID already exists

/domains/{name}

Update the domain with the given hostname. If the new hostname is not passed, the old hostname is preserved. (Note that you cannot pass a new name for the default hostname, because it cannot be renamed and _default_ is not a valid hostname. Skip this field if you want to update the default hostname.) If nodeId is not passed, it is generated automatically.

Path parameters:
String name – domain's hostname
Request body:
DomainAttributes
Response:
DomainInfo
Authentication: read more
root admin
Errors:
Code Description
domain.not-found there is no domain with the given hostname
domain.cannot-rename-default cannot change the name of the default domain

/domains/{name}

Delete the domain with the given hostname. This operation deletes the domain record only, the user's data related to the domain is preserved.

Path parameters:
String name – domain name
Response:
Result
Authentication: read more
root admin
Errors:
Code Description
domain.not-found there is no domain with the given hostname
domain.cannot-delete-default cannot delete the default domain

/domains/available

Get an available domain name that is recommended for the given node name. The domain name is usually chosen to be close to the node name in English transcription. If domain registration for this server is not public, this request is not accessible.

Query parameters:
String nodeName – node name
Response:
DomainAvailable
Authentication: read more
none

Drafts

All drafts. This is an universal interface for managing all types for drafts to all types of entries. Drafts of entries located on remote nodes are all stored on the home node.

/drafts

Get the list of drafts, page by page, filtered by the given criteria. The node may decide to use smaller page size than the given limit. The drafts are always sorted by the creation timestamp, descending.

Query parameters:
String draftType – type of the drafts (see DraftType for the list of possible values)
String nodeName – name of the node the drafts are related to
String postingId(optional) ID of the posting, mandatory for all types, except new-posting
String commentId(optional) ID of the comment, mandatory for comment-update type
int page(optional) page number, 0 by default
int limit(optional) page size (maximum number of postings returned), the default is defined by the node
Response:
DraftInfo[]
Authentication: read more
admin
Errors:
Code Description
page.invalid page parameter has an invalid value
limit.invalid limit parameter has an invalid value

/drafts

Create a new draft from the text given.

Request body:
DraftText
Response:
DraftInfo
Authentication: read more
admin

/drafts/{id}

Get an individual draft.

Path parameters:
String id – ID of the draft
Response:
DraftInfo
Authentication: read more
admin
Errors:
Code Description
draft.not-found there is no draft with the given ID

/drafts/{id}

Update the draft.

Path parameters:
String id – ID of the draft
Request body:
DraftText
Response:
DraftInfo
Authentication: read more
admin
Errors:
Code Description
draft.not-found there is no draft with the given ID

/drafts/{id}

Delete the draft.

Path parameters:
String id – ID of the draft
Response:
Result
Authentication: read more
admin
Errors:
Code Description
draft.not-found there is no draft with the given ID

Features

Information about features supported by the node.

/features

Get information about features supported by the node.

Response:
Features
Authentication: read more
optional

Feeds

Feed is a set of stories collected for some purpose. The stories are sorted by moment, descending.

These are the standard feeds that have special meaning:

  • timeline - the main feed of publications;
  • instant - the feed of instant notifications;
  • news - the main feed of publications gathered from other nodes.

/feeds

Get general information about all feeds accessible by client.

Response:
FeedInfo[]
Authentication: read more
admin or none

/feeds/{feedName}

Get general information about the feed.

Path parameters:
String feedName – name of the feed
Response:
FeedInfo
Authentication: read more
admin or none
Errors:
Code Description
feed.not-found there is no accessible feed with this name

/feeds/{feedName}/status

Get information about total number and number of non-read and non-viewed stories in the feed.

Path parameters:
String feedName – name of the feed
Response:
FeedStatus
Authentication: read more
admin or none
Errors:
Code Description
feed.not-found there is no accessible feed with this name

/feeds/{feedName}/status

Update information about non-read and non-viewed stories in the feed.

Path parameters:
String feedName – name of the feed
Request body:
FeedStatusChange
Response:
FeedStatus
Authentication: read more
admin
Errors:
Code Description
feed.not-found there is no accessible feed with this name

/feeds/{feedName}/stories

Get a slice of the feed, delimited by before or after moments (but not both) and the given limit. If neither before nor after are provided, the latest stories are returned. The node may decide to return less stories than the given limit. The stories are always sorted by moment, descending.

Path parameters:
String feedName – name of the feed
Query parameters:
int after(optional) filter stories posted strongly after this moment
int before(optional) filter stories posted at or before this moment
int limit(optional) maximum number of stories returned
Response:
FeedSliceInfo
Authentication: read more
admin or none
Errors:
Code Description
feed.not-found there is no accessible feed with this name
feed.before-after-exclusive before and after parameters are not allowed together
limit.invalid limit parameter has an invalid value

Friend Groups

A friend may be member of one or more groups of friends. Each group as an ID and title. The group with a title t:friends is a standard group "Friends" that is created automatically for every node.

/people/friends/groups

Get the list of all groups of friends that exist on the node.

Response:
FriendGroupInfo[]
Authentication: read more
optional

/people/friends/groups/{id}

Get the information about the group of friends.

Path parameters:
String id – ID of the group of friends
Response:
FriendGroupInfo
Authentication: read more
optional
Errors:
Code Description
friend-group.not-found the group of friends is not found

/people/friends/groups

Create a group of friends.

Request body:
FriendGroupDescription
Response:
FriendGroupInfo
Authentication: read more
admin

/people/friends/groups/{id}

Update the details of the group of friends.

Path parameters:
String id – ID of the group of friends
Request body:
FriendGroupDescription
Response:
FriendGroupInfo
Authentication: read more
admin
Errors:
Code Description
friend-group.not-found the group of friends is not found

/people/friends/groups/{id}

Delete the group of friends.

Path parameters:
String id – ID of the group of friends
Response:
Result
Authentication: read more
admin
Errors:
Code Description
friend-group.not-found the group of friends is not found

Friends

Friends are nodes that may have special permissions on this node. It is possible to write "friends only" posts or to enable commenting to friends or to a group of friends only etc.

/people/friends

Get the list of all friends of the node or friends belonging to a particular group.

Query parameters:
String groupId(optional) ID of a group of friends
Response:
FriendInfo[]
Authentication: read more
optional
Errors:
Code Description
friend-group.not-found the group of friends is not found

/people/friends/{name}

Get the friendship information for the node given.

Path parameters:
String name – name of the node
Response:
FriendInfo
Authentication: read more
optional

/people/friends

Update the friendship status of the nodes passed in the input. If some of the nodes passed in the input is not a member of some of the groups of friends listed for it, the node is added to them. If it is a member of some of the groups of friends that are not listed for it, the node is removed from them.

Request body:
FriendDescription[]
Response:
FriendInfo[]
Authentication: read more
admin

Friend-ofs

The node receives notifications from nodes that added it to their friends. This information is stored on the node and can be requested.

/people/friend-ofs

Get the list of all nodes that added this node to their friends.

Response:
FriendOfInfo[]
Authentication: read more
optional

/people/friend-ofs/{name}

Get the information for the node given, whether it has added this node to its friends.

Path parameters:
String name – name of the node
Response:
FriendOfInfo
Authentication: read more
optional

Media (private)

Media files that are bound to a particular uploader and may be inaccessible to other clients. Private media files cannot be retrieved by their hash, only by their ID. The ID is unique to the client that uploaded the file and the node the file was uploaded to. A private media file may have a linked posting - it is used to store the media file description, reactions and comments. The linked posting is accessed as any other posting.

/media/private

Upload a new media file. Content of the file is passed in the request body

Request body:
blob
Response:
PrivateMediaFileInfo
Authentication: read more
required
Errors:
Code Description
media.image-invalid media file is not a readable image
media.wrong-size media file is too large
media.storage-error media file cannot be stored

/media/private/{id}/data

Get media file content (returned in the response body).

Path parameters:
String id – media file ID
Query parameters:
int width(optional) preferred width of the media in pixels; if present, the node will try to return the smallest in size, but the best in quality variant of the media, according to the width provided
boolean download(optional) if true, the node will add Content-Disposition: attachment header to the output
Response:
blob
Authentication: read more
optional
Errors:
Code Description
media.not-found media file is not found

/media/private/{id}/info

Get media file details.

Path parameters:
String id – media file ID
Response:
PrivateMediaFileInfo
Authentication: read more
optional
Errors:
Code Description
media.not-found media file is not found

/media/private/{id}/parent

Get the list of all postings and comments the media file is attached to.

Path parameters:
String id – media file ID
Response:
EntryInfo[]
Authentication: read more
optional

Media (public)

Media files that should be accessible to any client. ID of a public media file is SHA-1 hash of its content.

/media/public

Upload a new media file. Content of the file is passed in the request body

Request body:
blob
Response:
PublicMediaFileInfo
Authentication: read more
required
Errors:
Code Description
media.image-invalid media file is not a readable image
media.wrong-size media file is too large
media.storage-error media file cannot be stored

/media/public/{id}/data

Get media file content (returned in the response body).

Path parameters:
String id – media file ID
Query parameters:
int width(optional) preferred width of the media in pixels; if present, the node will try to return the smallest in size, but the best in quality variant of the media, according to the width provided
boolean download(optional) if true, the node will add Content-Disposition: attachment header to the output
Response:
blob
Authentication: read more
none
Errors:
Code Description
media.not-found media file is not found

/media/public/{id}/info

Get media file details.

Path parameters:
String id – media file ID
Response:
PublicMediaFileInfo
Authentication: read more
none
Errors:
Code Description
media.not-found media file is not found

Node Name

The name of the node. Read more about it in the Architecture Overview section. Operations with the node name are performed asynchronously - need to poll the node periodically to get the current status of the operation. Only one operation with the node name may be performed by the node at any moment.

/node-name

Get the name of the node. Admin user receives also the current status of the latest operation with the node name.

Response:
NodeNameInfo
Authentication: read more
admin or none

/node-name

Register a new name for the node. The corresponding signing key is generated automatically and stored at the node. The updating key is generated and returned in the encoded form and in the form of mnemonic (a sequence of English words) that need to be written down and stored securely to be able to perform further operations with the name.

Request body:
NameToRegister
Response:
RegisteredNameSecret
Authentication: read more
admin
Errors:
Code Description
naming.operation-pending another operation with the node name is pending currently

/node-name

Update the name of the node. May be used to assign an already-registered name to the node (the corresponding signing key is generated automatically and stored at the node), or to prolong the name. The secret or mnemonic of the updating key must be provided for this operation.

Request body:
RegisteredNameSecret
Response:
Result
Authentication: read more
admin
Errors:
Code Description
naming.operation-pending another operation with the node name is pending currently
registeredNameSecret.empty the registered name secret or mnemonic are not provided
node-name.name-absent the node name is not provided and not known by the node
node-name. various errors returned by naming server (see the list)

/node-name

Delete all the information related to the node name (including the signing key) from the node. The name record on the naming server is not touched.

Response:
Result
Authentication: read more
admin
Errors:
Code Description
naming.operation-pending another operation with the node name is pending currently

Notifications

Receiver of notifications from other nodes.

/notifications

Accept a notification packet from other node. Notification packets older than 10 minutes are ignored. The sending node should update the packet timestamp and the signature and send the packet again. This mechanism prevents attackers from recording and resending old signed packets.

Request body:
NotificationPacket
Response:
Result
Authentication: read more
signature
Errors:
Code Description
ask.too-many the node cannot accept so many ASKED notifications from the same node
ask.too-often the node cannot accept so many ASKED notifications over a short period of time

People

Information related to other nodes.

/people

Get general information about other nodes.

Response:
PeopleGeneralInfo
Authentication: read more
optional

Plugins

Plugins are web applications that integrate closely with the node or with the server as whole. Authenticating as root admin or node admin, they may perform operations, receive internal events, extend node API with new requests and add their own settings to the list of node settings. Every plugin registers its URL with the node, and the node uses this URL to call it when necessary.

/plugins

Register the plugin. If the plugin authenticates as root admin, the plugin is registered at the server level. If the plugin authenticates as node admin, the plugin is registered at the node level.

Request body:
PluginDescription
Response:
PluginInfo
Authentication: read more
root admin or admin
Errors:
Code Description
plugin.already-exists plugin with this name is already registered

/plugins

Get information about all plugins registered for the node and server.

Response:
PluginInfo[]
Authentication: read more
optional

/plugins/{pluginName}

Get information about the plugin.

Path parameters:
String pluginName – name of the plugin
Response:
PluginInfo
Authentication: read more
optional
Errors:
Code Description
plugin.unknown unknown plugin

/plugins/{pluginName}/<request location>

Invoke API provided by the plugin. The request is passed through to the plugin with the original method to the URL <plugin URL>/<request location>. All headers, except Host and Authorization are also passed through and two more headers are added: X-Moera-Auth and X-Moera-Origin. Read more about them. The response from the plugin is passed to the client as is.

Path parameters:
String pluginName – name of the plugin
Authentication: read more
optional
Errors:
Code Description
plugin.unknown unknown plugin
plugin.invocation-error the request cannot be passed to the plugin

/plugins/{pluginName}/events

Get SSE stream of internal events from the node. The stream is filtered as defined in PluginDescription.acceptedEvents. If the plugin is registered on the node level, it can receive only events related to the node. A plugin registered on the server level can receive any event related to any node in the server.

The events are not documented here, they correspond to liberin objects in the source code of the node. For example, PostingUpdatedLiberin corresponds to posting-updated event.

Each SSE event has ID that is equal to the moment of the event, and content that is a serialized JSON object with the following fields:

Type Field Comment
String type type of the event
String nodeId ID of the node in the server
PluginContext context request context, if the event was emitted as a result of an API call
... ... other event-specific fields

Path parameters:
String pluginName – name of the plugin
Query parameters:
int after(optional) moment of the latest event that has been seen by the plugin; may be passed in Last-Event-ID header instead
Authentication: read more
root admin or admin
Errors:
Code Description
plugin.unknown unknown plugin

/plugins/{pluginName}

Unregister the plugin.

Path parameters:
String pluginName – name of the plugin
Response:
Result
Authentication: read more
root admin or admin
Errors:
Code Description
plugin.unknown unknown plugin

Postings

All postings. Each posting may contain one or more revisions, a new revision is created every time the posting is updated. The latest revision is the current one, the previous ones are marked as deleted.

/postings

Create a new posting from the text given and publish it in the given feeds (if any). The heading and the preview of the posting are created automatically, if needed. The posting owner must authenticate in some way. If the posting is not signed, it will be kept for a limited period of time and then erased. If authenticated as admin, the posting is signed by the node.

Request body:
PostingText
Response:
PostingInfo
Authentication: read more
required or signature

/postings/{id}

Update the posting, creating a new revision of it. The text is processed just like in the POST request.

Path parameters:
String id – ID of the posting
Request body:
PostingText
Response:
PostingInfo
Authentication: read more
required or signature
Errors:
Code Description
posting.not-found there is no posting with the given ID
posting.not-original updating a non-original posting is not allowed

/postings/{id}

Get an individual posting.

Path parameters:
String id – ID of the posting
Query parameters:
String include(optional) Comma-separated list of additional blocks of information that are needed.
The values are:
  • source – source text of the posting
Response:
PostingInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

/postings/{id}

Delete the posting. The posting may not be purged from the database immediately, but preserved for some period of time to give a chance to restore it.

Path parameters:
String id – ID of the posting
Response:
Result
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

/postings/{id}/attached

Get all postings linked to media attached to the given posting.

Path parameters:
String id – ID of the posting
Response:
PostingInfo[]
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

Posting Revisions

All revisions of the posting.

/postings/{postingId}/revisions

Get all revisions of the posting, but not more than limit. The node may decide to return less revisions than the given limit.

Path parameters:
String postingId – ID of the posting
Query parameters:
int limit(optional) maximum number of revisions returned
Response:
PostingRevisionInfo[]
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

/postings/{postingId}/revisions/{id}

Get an individual revision of the posting.

Path parameters:
String postingId – ID of the posting
String id – ID of the revision
Response:
PostingRevisionInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID
posting-revision.not-found there is no revision with the given ID

/postings/{postingId}/revisions/{id}/restore

Restore a revision of the posting. A new revision is created with the same content as in the given revision.

Path parameters:
String postingId – ID of the posting
String id – ID of the revision
Response:
PostingRevisionInfo
Authentication: read more
admin
Errors:
Code Description
posting.not-found there is no posting with the given ID
posting-revision.not-found there is no revision with the given ID
posting-revision.already-current the given revision is already the current one

Posting Reactions

Reactions ("Likes") - simple textless answers to a posting.

/postings/{postingId}/reactions

Add a reaction to the given posting. The reaction owner must authenticate in some way. Only one reaction is allowed from each owner to a particular posting. If a reaction from the same owner to this posting already exists, it is overwritten. If the reaction is not signed, the reaction will be kept for a limited period of time and then erased (the previous reaction of the same owner will be restored, if any).

Path parameters:
String postingId – ID of the posting
Request body:
ReactionDescription
Response:
ReactionCreated
Authentication: read more
required or signature
Errors:
Code Description
posting.not-found there is no posting with the given ID
posting.not-signed the posting is not signed, so it is impossible to add reactions to it
reaction.not-accepted the reaction is not acceptable

/postings/{postingId}/reactions

Get a slice of the list of reactions to the given posting, optionally filtered by reaction type, delimited by before moment and the given limit. If before is not provided, the latest reactions are returned. The node may decide to return less reactions than the given limit. The reactions are always sorted by moment, descending.

Path parameters:
String postingId – ID of the posting
Query parameters:
boolean negative(optional) true, to filter negative reactions, false, to filter positive ones
int emoji(optional) filter by reaction code, usually interpreted by clients as emoji code point
int before(optional) filter reactions created at or before this moment
int limit(optional) maximum number of reactions returned
Response:
ReactionsSliceInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID
limit.invalid limit parameter has an invalid value

/postings/{postingId}/reactions/{ownerName}

Update the reaction's operations or set operations' overrides.

Path parameters:
String postingId – ID of the posting
String ownerName – reaction owner node name
Request body:
ReactionOverride
Response:
ReactionInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

/postings/{postingId}/reactions/{ownerName}

Get the detailed information about the reaction of the given owner to the given posting. If no reaction with such owner exist, an empty structure with just postingId is returned.

Path parameters:
String postingId – ID of the posting
String ownerName – reaction owner node name
Response:
ReactionInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

/postings/{postingId}/reactions

Delete all reactions to the given posting.

Path parameters:
String postingId – ID of the posting
Response:
Result
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

/postings/{postingId}/reactions/{ownerName}

Delete the reaction of the given owner to the given posting.

Path parameters:
String postingId – ID of the posting
String ownerName – reaction owner node name
Response:
ReactionTotalsInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

/postings/reactions/search

Search reactions by criteria provided. Both reaction owner and at least one posting ID should be provided to search, otherwise an empty list is returned.

Request body:
ReactionsFilter
Response:
ReactionInfo[]
Authentication: read more
optional

Posting Reaction Totals

Summary of reactions to a posting.

/postings/{postingId}/reaction-totals

Get summary of reactions to the posting given.

Path parameters:
String postingId – ID of the posting
Response:
ReactionTotalsInfo
Authentication: read more
optional
Errors:
Code Description
posting.not-found there is no posting with the given ID

/postings/reaction-totals/search

Search summaries of reactions by criteria provided. At least one posting ID should be provided to search, otherwise an empty list is returned.

Request body:
ReactionTotalsFilter
Response:
ReactionTotalsInfo[]
Authentication: read more
optional

Profile

The profile - the detailed information about the node's owner, node's purpose etc.

/profile

Get the profile.

Query parameters:
String include(optional) Comma-separated list of additional blocks of information that are needed.
The values are:
  • source – source text of the bio
Response:
ProfileInfo
Authentication: read more
optional

/profile

Update the profile. Fields that are not set in the request body are left intact. Fields that are set to an empty value are reset to their defaults.

Request body:
ProfileAttributes
Response:
ProfileInfo
Authentication: read more
admin

Provider

Communication with the provider (owner of the server).

/provider/delete-node

Get the current status of the request to delete the node.

Response:
DeleteNodeStatus
Authentication: read more
admin

/provider/delete-node

Send a request to the provider to delete the node.

Request body:
DeleteNodeText
Response:
DeleteNodeStatus
Authentication: read more
admin

/provider/delete-node

Cancel the request to delete the node.

Response:
DeleteNodeStatus
Authentication: read more
admin

Proxy

Proxy, that may be used by web clients to workaround CORS restrictions of browsers

/proxy/media

Open the URL passed in the parameters and pass to the client the media file returned by the server.

Query parameters:
String url
Response:
blob
Authentication: read more
admin
Errors:
Code Description
proxy.request-failed HTTP request failed
proxy.resource-not-found resource is not found
proxy.resource-not-media resource is not a media file
proxy.error-status HTTP request returned an error status
proxy.url.invalid the URL is not valid

/proxy/link-preview

Parse the page located at the URL and return the title, the description and the picture that may be used to build a preview of the page.

Query parameters:
String url
Response:
LinkPreviewInfo
Authentication: read more
admin
Errors:
Code Description
proxy.resource-not-found resource is not found

Push Notifications

SSE channels for delivering push notifications from the home node. When a client opens an SSE connection for the first time, an individual push notifications channel for this client is created (every client must generate a unique random identifier for its channel). After that, push notifications are stacked for this channel and the client should poll the channel periodically (or keep it open constantly) to receive them. If the client does not poll the channel for a long time, the channel is deleted.

/push/{clientId}

Open the push notifications channel for the connected client or create a new one, if it does not exist. This request returns a live SSE stream, where events are notifications in a form of JSON-encoded PushContent structures and event IDs are the moments, when these notifications were generated. When the channel is opened, the node discards all notifications up to after (if provided) and delivers the rest of notifications till the current moment. After that, the notifications are delivered in real time until the channel is closed. If a client with the same clientId opens a channel from another device, this channel is automatically closed by the node.

Path parameters:
String clientId – ID of the client
Query parameters:
int after(optional) moment of the last notification already received by the client (Last-Event-ID header may be used instead of this parameter)
Response:
PushContent[]
Authentication: read more
admin
Errors:
Code Description
push.clientId.blank client ID is not set
push.clientId.wrong-size client ID is too long
push.too-many-clients too many push clients

/push/{clientId}

Delete the channel with all notifications in it.

Path parameters:
String clientId – ID of the client
Response:
Result
Authentication: read more
admin
Errors:
Code Description
push.not-found push client is not found

Push Relay

Moera network uses dedicated Push Relay servers that accept push messages from nodes and route them to their clients. Read more in the Push Relay API chapter.

/push-relay

Register a client at the push relay server to receive messages from this node. The operation is synchronous.

Request body:
PushRelayClientAttributes
Response:
Result
Authentication: read more
admin
Errors:
Code Description
push-relay.error push relay service returned an error

Remote Ask

The node may send requests to other nodes asking to subscribe to it, to add it to friends etc.

/nodes/{nodeName}/ask

Send a request to the remote node.

Path parameters:
String nodeName – name of the remote node
Request body:
AskDescription
Response:
Result
Authentication: read more
admin

Remote Comments

Comments to postings located on other nodes.

/nodes/{nodeName}/postings/{postingId}/comments

Add a comment to the posting on the remote node and register it in the registry at the local node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
Request body:
CommentSourceText
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/postings/{postingId}/comments/{commentId}

Update a comment to the posting on the remote node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
String commentId – ID of the comment on the remote node
Request body:
CommentSourceText
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/postings/{postingId}/comments/{commentId}

Delete a comment from the registry of all comments at the local node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
String commentId – ID of the comment on the remote node
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/postings/{postingId}/comments/{commentId}/verify

Verify the signature of the given comment to the posting on the remote node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
String commentId – ID of the comment on the remote node
Response:
AsyncOperationCreated
Authentication: read more
admin

Remote Comment Reactions

Reactions to comments located on other nodes.

/nodes/{nodeName}/postings/{postingId}/comments/{commentId}/reactions

Add a reaction to the comment on the remote node and register it in the registry at the local node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
String commentId – ID of the comment on the remote node
Request body:
ReactionAttributes
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/postings/{postingId}/comments/{commentId}/reactions

Delete a reaction from the registry of all reactions at the local node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
String commentId – ID of the comment on the remote node
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/postings/{postingId}/comments/{commentId}/reactions/{ownerName}/verify

Verify the signature of the reaction of the given owner to the comment on the remote node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
String commentId – ID of the comment on the remote node
String ownerName – reaction owner node name
Response:
AsyncOperationCreated
Authentication: read more
admin

Remote Postings

Postings located on other nodes.

/nodes/{nodeName}/postings

Add a posting to the remote node and register it in the registry at the local node.

Path parameters:
String nodeName – name of the remote node
Request body:
PostingSourceText
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/postings/{postingId}

Update a posting on the remote node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
Request body:
PostingSourceText
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/postings/{postingId}

Delete a posting from the registry of all remote postings at the local node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/postings/{id}/verify

Verify the signature of the given posting.

Path parameters:
String nodeName – name of the remote node
String id – ID of the posting on the remote node
Response:
AsyncOperationCreated
Authentication: read more
admin

/nodes/{nodeName}/postings/{id}/revisions/{revisionId}/verify

Verify the signature of the given revision of a posting.

Path parameters:
String nodeName – name of the remote node
String id – ID of the posting on the remote node
String revisionId – ID of the posting revision
Response:
AsyncOperationCreated
Authentication: read more
admin

Remote Posting Reactions

Reactions to postings located on other nodes.

/nodes/{nodeName}/postings/{postingId}/reactions

Add a reaction to the posting on the remote node and register it in the registry at the local node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
Request body:
ReactionAttributes
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/postings/{postingId}/reactions

Delete a reaction from the registry of all reactions at the local node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/postings/{postingId}/reactions/{ownerName}/verify

Verify the signature of the reaction of the given owner to the posting on the remote node.

Path parameters:
String nodeName – name of the remote node
String postingId – ID of the posting on the remote node
String ownerName – reaction owner node name
Response:
AsyncOperationCreated
Authentication: read more
admin

Remote Sheriff Orders

Sheriff API to send orders to remote nodes. Add orders are stored on the sheriff's node and may be requested by anybody.

/nodes/{nodeName}/sheriff/orders

Sign and send the order to the remote node and store it in the registry at the local node.

Path parameters:
String nodeName – name of the remote node
Request body:
SheriffOrderAttributes
Response:
Result
Authentication: read more
admin

/nodes/{nodeName}/sheriff/orders/{id}

Get the details of the given sheriff's order

Path parameters:
String nodeName – name of the remote node
String id – ID of the order
Response:
SheriffOrderInfo
Authentication: read more
none
Errors:
Code Description
sheriff-order.not-found sheriff's order is not found
sheriff-order.wrong-node the sheriff's order is related to a different node

Settings

Settings - the node and client settings. The node settings affect the node behavior. Only those settings are accepted that are known by the node, and their values are validated before saving. The node settings metadata can be obtained by request. The client settings are saved without validation and their metadata is built into the client. All client settings must have names starting with client. to distinguish them from the node ones. By convention, the client name is added to the prefix (client.<client name>.) to be able to store settings of several different clients at the same time.

/settings

Update the given settings. If the input contains node settings, they are validated and the first validation error is returned, if any. The update is always performed as whole - if there is an error saving any one of the settings in the input, none of them are updated.

If one of the settings to be updated is privileged, root secret authentication is required. If one of the settings to be updated is non-privileged, admin authentication is required.

Request body:
SettingInfo[]
Response:
Result
Authentication: read more
admin or root admin
Errors:
Code Description
setting.deserialization-failed setting value deserialization failed
setting.cannot-convert cannot convert value to the setting type
setting.invalid-value invalid value for the setting
setting.internal cannot set value of an internal setting
setting.unknown unknown setting

/settings/client

Get all client settings, sorted by name.

Query parameters:
String prefix(optional) filter settings whose names start with the given prefix, case-sensitive (client. prefix must be included)
Response:
SettingInfo[]
Authentication: read more
admin

/settings/node

Get all node settings, sorted by name. If a setting has not changed its value from the default, it is omitted.

Query parameters:
String prefix(optional) filter settings whose names start with the given prefix, case-sensitive
Response:
SettingInfo[]
Authentication: read more
admin

/settings/node/metadata

Get all node settings metadata, sorted by name.

Query parameters:
String prefix(optional) filter settings whose names start with the given prefix, case-sensitive
Response:
SettingMetaInfo[]
Authentication: read more
admin

/settings/node/metadata

Update node settings metadata, overriding built-in defaults.

Request body:
SettingMetaAttributes[]
Response:
Result
Authentication: read more
root admin
Errors:
Code Description
setting.deserialization-failed setting value deserialization failed
setting.cannot-convert cannot convert value to the setting type
setting.invalid-value invalid value for the setting
setting.internal cannot set value of an internal setting
setting.unknown unknown setting
setting.plugin plugin setting metadata cannot be modified

Sheriff Complaint Groups

Similar complaints sent to the sheriff are grouped together and the sheriff makes decisions on a group as whole. Read more about sheriff supervision in the Architecture Overview section.

/sheriff/complains/groups

Get a slice of the list of groups of complaints, optionally filtered by status, delimited by before or after moment and the given limit. If neither before nor after are provided, the latest groups are returned. The node may decide to return less groups than the given limit. The groups are always sorted by moment, descending.

Query parameters:
int after(optional) filter groups created strongly after this moment
int before(optional) filter groups created at or before this moment
int limit(optional) maximum number of groups returned
String status(optional) filter groups by status (see SheriffComplainStatus for the list of possible values)
Response:
SheriffComplainGroupsSliceInfo
Authentication: read more
none
Errors:
Code Description
sheriff-complain-groups.before-after-exclusive before and after parameters are mutually exclusive

/sheriff/complains/groups/{id}

Get details of the given group of complaints.

Path parameters:
String id – ID of the group of complaints
Response:
SheriffComplainGroupInfo
Authentication: read more
none
Errors:
Code Description
sheriff-complain-group.not-found

/sheriff/complains/groups/{id}/complains

Get complaints included into the given group of complaints.

Path parameters:
String id – ID of the group of complaints
Response:
SheriffComplainInfo[]
Authentication: read more
none
Errors:
Code Description
sheriff-complain-group.not-found

/sheriff/complains/groups/{id}

Make decision on the given group of complaints.

Path parameters:
String id – ID of the group of complaints
Request body:
SheriffComplainDecisionText
Response:
SheriffComplainGroupInfo
Authentication: read more
admin
Errors:
Code Description
sheriff-complain-group.not-found

Sheriff Complaints

Complaints are sent to the sheriff via sheriff's node. Read more about sheriff supervision in the Architecture Overview section.

/sheriff/complains

Send a complaint to the sheriff.

Request body:
SheriffComplainText
Response:
SheriffComplainInfo
Authentication: read more
required

Sheriff Orders

Orders sent by a sheriff to the node. The node must obey the orders if it accepted supervision by the sheriff. Read more about sheriff supervision in the Architecture Overview section.

/sheriff/orders

Receive and execute the sheriff's order.

Request body:
SheriffOrderDetails
Response:
Result
Authentication: read more
signature
Errors:
Code Description
sheriff-order.wrong-feed the posting is not included into the designated feed
posting.not-found posting is not found
posting.not-signed posting is not signed
comment.not-found comment is not found
comment.wrong-posting comment is located under a different posting

Stories

All stories. Each story describes something happening in Moera, stories are building blocks for feeds. All stories have the same structure, but the meaning of fields depends on the story type. A story may reference a posting, a remote object, etc. Some feeds may not allow some types of stories.

/stories/{id}

Get an individual story.

Path parameters:
String id – ID of the story
Response:
StoryInfo
Authentication: read more
optional
Errors:
Code Description
story.not-found there is no story with the given ID

/stories/{id}

Update the story.

Path parameters:
String id – ID of the story
Request body:
StoryAttributes
Response:
StoryInfo
Authentication: read more
admin
Errors:
Code Description
story.not-found there is no story with the given ID

Subscribers

All nodes that have subscribed to notifications from this node.

/people/subscribers

Get the list of all subscribers, optionally filtered by some criteria.

Query parameters:
String nodeName(optional) filter by subscribed node name
String type(optional) filter by subscription type (see SubscriptionType for the list of possible values)
String feedName(optional) filter by name of the feed subscribed to
String entryId(optional) filter by ID of the entry subscribed to
Response:
SubscriberInfo[]
Authentication: read more
optional

/people/subscribers

Subscribe to a particular group of notifications.

Request body:
SubscriberDescription
Response:
SubscriberInfo
Authentication: read more
required

/people/subscribers/{id}

Get an individual subscriber.

Path parameters:
String id – ID of the subscriber
Response:
SubscriberInfo
Authentication: read more
optional
Errors:
Code Description
subscriber.not-found there is no subscriber with the given ID

/people/subscribers/{id}

Update the subscriber's operations or set operations' overrides.

Path parameters:
String id – ID of the subscriber
Request body:
SubscriberOverride
Response:
SubscriberInfo
Authentication: read more
required
Errors:
Code Description
subscriber.not-found there is no subscriber with the given ID

/people/subscribers/{id}

Delete the subscriber and return the updated information about the node that was subscribed.

Path parameters:
String id – ID of the subscriber
Response:
ContactInfo
Authentication: read more
optional
Errors:
Code Description
subscriber.not-found there is no subscriber with the given ID

Subscriptions

All nodes that send notifications to this node.

/people/subscriptions

Get the list of all subscriptions, optionally filtered by some criteria.

Query parameters:
String nodeName(optional) filter by node name
String type(optional) filter by subscription type (see SubscriptionType for the list of possible values)
Response:
SubscriptionInfo[]
Authentication: read more
optional

/people/subscriptions

Register a subscription to notifications from a particular node.

Request body:
SubscriptionDescription
Response:
SubscriptionInfo
Authentication: read more
admin
Errors:
Code Description
subscription.already-exists an identical subscription already exists

/people/subscriptions/{id}

Update the subscription's operations or set operations' overrides.

Path parameters:
String id – ID of the subscription
Request body:
SubscriptionOverride
Response:
SubscriptionInfo
Authentication: read more
required
Errors:
Code Description
subscription.not-found there is no subscription with the given ID

/people/subscriptions/{id}

Delete the subscription and return the updated information about the node that was subscribed to.

Path parameters:
String id – ID of the subscription
Response:
ContactInfo
Authentication: read more
admin
Errors:
Code Description
subscription.not-found there is no subscription with the given parameters.

/people/subscriptions/search

Search for subscriptions by the given criteria.

Request body:
SubscriptionFilter
Response:
SubscriptionInfo[]
Authentication: read more
optional
Errors:
Code Description
subscription.filter.incomplete the filter should contain at least one feed or posting

Tokens

The authentication token. Read more about token-based authentication.

/tokens

Get the list of all existing tokens.

Response:
TokenInfo[]
Authentication: read more
admin

/tokens

Sign in and create a token.

Request body:
TokenAttributes
Response:
TokenInfo
Authentication: read more
none
Errors:
Code Description
credentials.not-created credentials are not created yet
credentials.login-incorrect login or password is incorrect

/tokens/{id}

Get information about the token.

Path parameters:
String id – ID of the token
Response:
TokenInfo
Authentication: read more
admin

/tokens/{id}

Update the name of the token.

Path parameters:
String id – ID of the token
Request body:
TokenName
Response:
TokenInfo
Authentication: read more
admin

/tokens/{id}

Delete the token.

Path parameters:
String id – ID of the token
Response:
Result
Authentication: read more
admin

User Lists

Any node may keep lists of users, and all other nodes can read these lists, search in them and subscribe to them to receive notifications about changes. The lists may be used, for example, to fight spam or to create decentralized communities. The sheriff uses such a list to inform all nodes that some specific user violates the rules too often, and because of that all his comments should be marked by the sheriff's mark automatically.

/user-lists/{name}

Get the general information about the user list given.

Path parameters:
String name – the name of the list
Response:
UserListInfo
Authentication: read more
none

/user-lists/{name}/items

Get a slice of the user list, delimited by before or after moment and the given limit. If neither before nor after are provided, the latest items are returned. The node may decide to return less items than the given limit. The items are always sorted by moment, descending.

Path parameters:
String name – the name of the list
Query parameters:
int after(optional) filter items created strongly after this moment
int before(optional) filter items created at or before this moment
int limit(optional) maximum number of items returned
Response:
UserListSliceInfo
Authentication: read more
none
Errors:
Code Description
user-list-items.before-after-exclusive before and after parameters are mutually exclusive

/user-lists/{name}/items/{nodeName}

Get the information from the user list about the node given.

Path parameters:
String name – the name of the list
String nodeName – the node name to get information about
Response:
UserListItemInfo
Authentication: read more
none
Errors:
Code Description
user-list-item.not-found user list item is not found

/user-lists/{name}/items

Add a node to the user list.

Path parameters:
String name – the name of the list
Request body:
UserListItemAttributes
Response:
UserListItemInfo
Authentication: read more
admin
Errors:
Code Description
user-list-item.already-exists node is in the user list already

/user-lists/{name}/items/{nodeName}

Delete a node from the user list

Path parameters:
String name – the name of the list
String nodeName – the node name to delete
Response:
Result
Authentication: read more
admin
Errors:
Code Description
user-list-item.not-found user list item is not found

Who Am I

Brief information about the node.

/whoami

Get brief information about the node.

Response:
WhoAmI
Authentication: read more
none


Structures

AcceptedReactions

Type Name Description
String positive comma-separated list of codes of the positive reactions that are accepted; a code may be prefixed by 0x to designate hexadecimal number and + to designate a recommended reaction
String negative comma-separated list of codes of the negative reactions that are accepted (the format is the same as above)

ActivityReactionFilter

Type Name Description
RemotePosting[] postings (optional) include only reactions to remote postings from this list

ActivityReactionInfo

Type Name Description
String remoteNodeName name of the remote node
String remoteFullName (optional) full name of the remote node
AvatarImage remoteAvatar (optional) avatar of the remote node
String remotePostingId ID of the posting on the remote node
boolean negative true, if the reaction is negative, false, if positive
int emoji reaction code, usually interpreted by clients as emoji code point
timestamp createdAt reaction creation timestamp - the real time when the reaction was created

AskDescription

Type Name Description
String subject request subject (see AskSubject for the list of possible values)
String friendGroupId (optional) if the request is to add this node to friends, this field contains ID of the corresponding group of friends on the remote node
String message (optional) message to the node admin
Validation errors:
Code Description
askDescription.friendGroupId.blank friend group ID is empty
askDescription.friendGroupId.wrong-size friend group ID is too long
askDescription.message.wrong-size message is too long

AsyncOperationCreated

Type Name Description
String id ID of the asynchronous operation that was created

AvatarAttributes

Type Name Description
String mediaId ID of the public media file used as a source image
int clipX x coordinate of the top-left corner of the clipping square
int clipY y coordinate of the top-left corner of the clipping square
int clipSize size of the clipping square
int avatarSize size of the avatar to be created
float rotate rotation angle of the source image
String shape (optional) shape of the avatar
int ordinal (optional) ordinal of the avatar
Validation errors:
Code Description
avatarAttributes.mediaId.blank media ID is not set
avatarAttributes.mediaId.not-found the source media is not found
avatarAttributes.clipX.out-of-range clipping area left side is out of the image bounds
avatarAttributes.clipY.out-of-range clipping area top side is out of the image bounds
avatarAttributes.clipSize.out-of-range clipping area size is out of range (usually too small)
avatarAttributes.avatarSize.out-of-range avatar size is out of range (usually too small)

AvatarDescription

Type Name Description
String mediaId ID of the public media file used as an avatar image
String shape shape of the avatar
boolean optional (optional) if set to true, the node will ignore the absence of the media file referenced in mediaId field (empty avatar will be used in this case); if set to false or absent, the node will return an error, if the media file referenced in mediaId field is absent

AvatarImage

Type Name Description
String mediaId ID of the media file
String path virtual location of the media file, relative to the /media virtual page
int width (optional) width of the media in pixels (null, if the media file is not an image/video)
int height (optional) height of the media in pixels (null, if the media file is not an image/video)
String shape (optional) shape of the avatar

AvatarInfo

Type Name Description
String id ID of the avatar
String mediaId ID of the media file
String path virtual location of the media file, relative to the /media virtual page
int width (optional) width of the media in pixels (null, if the media file is not an image/video)
int height (optional) height of the media in pixels (null, if the media file is not an image/video)
String shape (optional) shape of the avatar
int ordinal ordinal of the avatar

AvatarOrdinal

Type Name Description
String id ID of the avatar
int ordinal ordinal of the avatar

AvatarsOrdered

Type Name Description
String[] ids IDs of avatars

BlockedByUserFilter

Type Name Description
String[] blockedOperations (optional) operations that are blocked (see BlockedOperation for the list of possible values)
RemotePostingOrNode[] postings (optional) the postings or whole nodes, where the node is blocked
boolean strict (optional) if set to true, only the blockings that strictly fit the criteria are returned; otherwise global blockings are returned even if the search is limited to a particular posting

BlockedByUserInfo

Type Name Description
String id
String blockedOperation operation that is blocked (see BlockedOperation for the list of possible values)
ContactInfo contact (optional) information known about the blocking node
String nodeName name of the blocking node
String postingId (optional) ID of the posting, where the node is blocked; null or absent, if the node is blocked globally
timestamp createdAt blocking timestamp - the real time when the node was blocked
timestamp deadline (optional) unblocking timestamp - the real time when the node will be unblocked; null or absent, if the node is blocked permanently
String reason (optional) reason of blocking

BlockedInstantAttributes

Type Name Description
String storyType type of the story (see StoryType for the list of possible values)
String entryId (optional) ID of the local entry the blocked story should be related to
String remoteNodeName (optional) node name of the remote posting the blocked story should be related to
String remotePostingId (optional) ID of the remote posting the blocked story should be related to
String remoteOwnerName (optional) owner name of the remote object the blocked story should be related to
timestamp deadline (optional) unblocking timestamp - the real time when the story will be unblocked; null or absent, if the story is blocked permanently
Validation errors:
Code Description
blockedInstantAttributes.storyType.blank story type is not set

BlockedInstantFilter

Type Name Description
String storyType type of the story (see StoryType for the list of possible values)
String entryId (optional) ID of the local entry the blocked story should be related to
String remoteNodeName (optional) node name of the remote posting the blocked story should be related to
String remotePostingId (optional) ID of the remote posting the blocked story should be related to
String remoteOwnerName (optional) owner name of the remote object the blocked story should be related to

BlockedInstantInfo

Type Name Description
String id
String storyType type of the story (see StoryType for the list of possible values)
String entryId (optional) ID of the local entry the blocked story should be related to
String remoteNodeName (optional) node name of the remote posting the blocked story should be related to
String remotePostingId (optional) ID of the remote posting the blocked story should be related to
String remoteOwnerName (optional) owner name of the remote object the blocked story should be related to
timestamp createdAt blocking timestamp - the real time when the story was blocked
timestamp deadline (optional) unblocking timestamp - the real time when the story will be unblocked; null or absent, if the story is blocked permanently

BlockedPostingInstantInfo

Type Name Description
String id
String storyType type of the story (see StoryType for the list of possible values)
String remoteOwnerName (optional) owner name of the remote object the blocked story should be related to
timestamp deadline (optional) unblocking timestamp - the real time when the story will be unblocked; null or absent, if the story is blocked permanently

BlockedUserAttributes

Type Name Description
String blockedOperation operation that is to be blocked (see BlockedOperation for the list of possible values)
String nodeName name of the blocked node
String entryId (optional) ID of the local entry, where the node is blocked; null or absent, if the node is blocked globally
String entryNodeName (optional) node name of the remote posting, where the node is blocked; null or absent, if the node is blocked globally
String entryPostingId (optional) ID of the remote posting, where the node is blocked; null or absent, if the node is blocked globally
timestamp deadline (optional) unblocking timestamp - the real time when the node will be unblocked; null or absent, if the node is blocked permanently
String reasonSrc (optional) source text of the reason of blocking
String reasonSrcFormat (optional) format of the source text of the reason of blocking, the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
Validation errors:
Code Description
blockedUserAttributes.blockedOperation.blank blocked operation is not set
blockedUserAttributes.reasonSrc.wrong-size reason is too long

BlockedUserFilter

Type Name Description
String[] blockedOperations (optional) operations that are blocked (see BlockedOperation for the list of possible values)
String nodeName (optional) name of the blocked node
String entryId (optional) ID of the local entry, where the node is blocked; null or absent, if the node is blocked globally
String entryNodeName (optional) node name of the remote posting, where the node is blocked; null or absent, if the node is blocked globally
String entryPostingId (optional) ID of the remote posting, where the node is blocked; null or absent, if the node is blocked globally
boolean strict (optional) if set to true, only the blockings that strictly fit the criteria are returned; otherwise global blockings are returned even if the search is limited to a particular posting

BlockedUserInfo

Type Name Description
String id
String blockedOperation operation that is blocked (see BlockedOperation for the list of possible values)
String nodeName name of the blocked node
ContactInfo contact (optional) information known about the blocked node
String entryId (optional) ID of the local entry, where the node is blocked; null or absent, if the node is blocked globally
String entryNodeName (optional) node name of the remote posting, where the node is blocked; null or absent, if the node is blocked globally
String entryPostingId (optional) ID of the remote posting, where the node is blocked; null or absent, if the node is blocked globally
timestamp createdAt blocking timestamp - the real time when the node was blocked
timestamp deadline (optional) unblocking timestamp - the real time when the node will be unblocked; null or absent, if the node is blocked permanently
String reasonSrc (optional) source text of the reason of blocking
String reasonSrcFormat (optional) format of the source text of the reason of blocking, the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
String reason (optional) reason of blocking

BlockedUsersChecksums

Type Name Description
int visibility checksum of the list of users that are hidden

Body

Type Name Description
String subject (optional) the subject (plain text)
String text (optional) the text (HTML)
LinkPreview[] linkPreviews (optional) link previews

CarteInfo

Type Name Description
String carte
timestamp beginning timestamp of the beginning of the carte's life
timestamp deadline timestamp of the end of the carte's life
String[] permissions (optional) the list of permissions granted to the carte; the possible values are:
  • other - any other permission not listed below;
  • view-media - view media files.

CarteSet

Type Name Description
String cartesIp (optional) the client IP address the cartes are bound to
CarteInfo[] cartes the cartes
timestamp createdAt cartes creation timestamp

ClientReactionInfo

Type Name Description
boolean negative true, if the reaction is negative, false, if positive
int emoji reaction code, usually interpreted by clients as emoji code point
timestamp createdAt reaction creation timestamp - the real time when the reaction was created
timestamp deadline (optional) if present, the reaction will be erased at this time

CommentCreated

Type Name Description
CommentInfo comment details of the comment created
int total total number of comments in the posting after the creation

CommentInfo

Type Name Description
String id
String ownerName node name of the comment's owner
String ownerFullName (optional) full name of the comment's owner
String ownerGender (optional) gender of the comment's owner
AvatarImage ownerAvatar (optional) avatar of the comment's owner
String postingId ID of the parent posting of the comment
String postingRevisionId ID of the revision of parent posting that was current when the comment was created
String revisionId ID of the current revision of the comment
int totalRevisions total number of revisions the comment has
Body (as String) bodyPreview (optional) preview of the comment's body, a string representation of a JSON structure
Body (as String) bodySrc (optional) the source text of the comment, a string representation of a JSON structure, may be absent if not requested
byte[] bodySrcHash hash of the source text of the comment
String bodySrcFormat (optional) format of the source text of the comment, the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
Body (as String) body body of the comment, a string representation of a JSON structure
String bodyFormat (optional) format of the body of the comment, may have any value meaningful for the client (see BodyFormat for the list of possible values)
MediaAttachment[] media (optional) list of the media attached to the comment
String heading heading of the comment
RepliedTo repliedTo (optional) information about the comment this comment is replying to
int moment
timestamp createdAt comment creation timestamp - the real time when the comment was created
timestamp editedAt (optional) comment editing timestamp - the last time the comment was updated
timestamp deletedAt (optional) comment deletion timestamp - the time when the comment was deleted
timestamp revisionCreatedAt creation timestamp of the current revision of the comment
timestamp deadline (optional) comment purging timestamp - the time when the deleted comment will be purged from the database
byte[] digest (optional) cryptographic digest of the comment (use Comment fingerprint)
byte[] signature (optional) the comment's owner signature (use Comment fingerprint)
int signatureVersion (optional) signature version (i.e. fingerprint version)
CommentOperations operations (optional) the supported operations and the corresponding principals
ReactionOperations reactionOperations (optional) the operations and the corresponding principals that are overridden in reactions to the comment
CommentOperations ownerOperations (optional) the supported operations and the corresponding principals as defined by the comment's owner
CommentOperations seniorOperations (optional) the operations and the corresponding principals that are overridden by the posting's owner ("senior")
String[] blockedOperations (optional) operations on the comment that are blocked for the client (see BlockedEntryOperation for the list of possible values)
SheriffMark[] sheriffMarks (optional) list of sheriff marks on the comment
AcceptedReactions acceptedReactions (optional) types of reactions that the comment accepts
ClientReactionInfo clientReaction (optional) details of the existing reaction (if any) of the client's owner
ClientReactionInfo seniorReaction (optional) details of the existing reaction (if any) of the posting's owner ("senior") to the comment
ReactionTotalsInfo reactions (optional) reactions summary of the comment

CommentMassAttributes

Type Name Description
CommentOperations seniorOperations (optional) the operations and the corresponding principals that are overridden by the comment's owner ("senior")
Validation errors:
Code Description
commentMassAttributes.seniorOperations.wrong-principal principal for one of senior operations is invalid

CommentRevisionInfo

Type Name Description
String id
String postingRevisionId ID of the posting revision that was actual at the moment of creation of this comment revision
Body (as String) bodyPreview (optional) preview of the revision's body, a string representation of a JSON structure
byte[] bodySrcHash hash of the source text of the revision
String bodySrcFormat (optional) format of the source text of the revision, the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
Body (as String) body body of the revision, a string representation of a JSON structure
String bodyFormat (optional) format of the body of the revision, may have any value meaningful for the client (see BodyFormat for the list of possible values)
String heading heading of the revision
timestamp createdAt revision creation timestamp - the real time when the revision was created
timestamp deletedAt (optional) revision deletion timestamp - the time when the revision was deleted
timestamp deadline (optional) revision deletion timestamp - the time when the revision will be deleted and the previous revision will take its place
byte[] digest (optional) cryptographic digest of the revision (use Comment fingerprint)
byte[] signature (optional) the comment's owner signature (use Comment fingerprint)
int signatureVersion (optional) signature version (i.e. fingerprint version)
ClientReactionInfo clientReaction (optional) details of the existing reaction (if any) of the client's owner
ReactionTotalsInfo reactions (optional) reactions summary of the revision

CommentsSliceInfo

Type Name Description
int before the slice contains all comments before this moment, inclusive. May be the far future.
int after the slice contains all comments after this moment, exclusive. May be the far past.
CommentInfo[] comments the comments
int total total number of comments
int totalInPast number of comments before this slice till the far past
int totalInFuture number of comments after this slice till the far future

CommentSourceText

Type Name Description
AvatarDescription ownerAvatar (optional) avatar of the comment's owner
Body (as String) bodySrc (optional) the source text of the comment, a string representation of a JSON structure
String bodySrcFormat (optional) format of the source text of the comment, plain-text by default; the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
MediaWithDigest[] media (optional) array of IDs and digests of private media to be attached to the comment
AcceptedReactions acceptedReactions (optional) types of reactions that the comment accepts
String repliedToId (optional) ID of the comment this comment is replying to
CommentOperations operations (optional) the operations and the corresponding principals
CommentOperations seniorOperations (optional) the operations and the corresponding principals that are overridden by the posting's owner ("senior"); only the senior may set this
Validation errors:
Code Description
commentText.bodySrc.blank body text is empty
commentText.bodySrc.wrong-size body text is too long
commentText.bodySrc.wrong-encoding body text is formatted incorrectly
commentText.acceptedReactions.positive.wrong-size list of accepted positive reactions is too long
commentText.acceptedReactions.positive.wrong-pattern list of accepted positive reactions has wrong format
commentText.acceptedReactions.negative.wrong-size list of accepted negative reactions is too long
commentText.acceptedReactions.negative.wrong-pattern list of accepted negative reactions has wrong format

CommentText

Type Name Description
String ownerName (optional) node name of the comment's owner
String ownerFullName (optional) full name of the comment's owner
String ownerGender (optional) gender of the comment's owner
AvatarDescription ownerAvatar (optional) avatar of the comment's owner
Body (as String) bodyPreview (optional) preview of the comment's body, a string representation of a JSON structure
Body (as String) bodySrc (optional) the source text of the comment, a string representation of a JSON structure
String bodySrcFormat (optional) format of the source text of the comment, plain-text by default; the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
Body (as String) body (optional) body of the comment, a string representation of a JSON structure
String bodyFormat (optional) format of the body of the comment, may have any value meaningful for the client (see BodyFormat for the list of possible values)
String[] media (optional) array of IDs of private media to be attached to the comment
timestamp createdAt (optional) comment creation timestamp - the real time when the comment was created
AcceptedReactions acceptedReactions (optional) types of reactions that the comment accepts
String repliedToId (optional) ID of the comment this comment is replying to
byte[] signature (optional) the comment's owner signature (use Comment fingerprint)
int signatureVersion (optional) signature version (i.e. fingerprint version)
CommentOperations operations (optional) the operations and the corresponding principals
ReactionOperations reactionOperations (optional) the operations and the corresponding principals that are overridden in reactions to the comment
CommentOperations seniorOperations (optional) the operations and the corresponding principals that are overridden by the posting's owner ("senior"); only the senior may set this
Validation errors:
Code Description
commentText.ownerAvatar.mediaId.not-found owner's avatar is not found
commentText.bodySrc.blank body text is empty
commentText.bodySrc.wrong-size body text is too long
commentText.bodySrc.wrong-encoding body text is formatted incorrectly
commentText.bodySrcFormat.unknown unknown body text format
commentText.body.blank body is empty
commentText.body.wrong-size body is too long
commentText.body.wrong-encoding body encoding is incorrect
commentText.bodyPreview.wrong-encoding body preview encoding is incorrect
commentText.bodyFormat.blank body format is not set
commentText.bodyFormat.wrong-size body format is too long
commentText.media.not-found media attachment is not found
commentText.media.not-compressed media attachment is not compressed as the node requires, the parameters of the desired compression are returned in PostingFeatures
commentText.createdAt.blank body creation timestamp is not set
commentText.createdAt.out-of-range body creation timestamp is too far from the current timestamp
commentText.acceptedReactions.positive.wrong-size list of accepted positive reactions is too long
commentText.acceptedReactions.positive.wrong-pattern list of accepted positive reactions has wrong format
commentText.acceptedReactions.negative.wrong-size list of accepted negative reactions is too long
commentText.acceptedReactions.negative.wrong-pattern list of accepted negative reactions has wrong format
commentText.repliedToId.not-found comment referred in `repliedToId` is not found
commentText.operations.wrong-principal principal for one of operations is invalid
commentText.reactionOperations.wrong-principal principal for one of reaction operations is invalid
commentText.seniorOperations.wrong-principal principal for one of senior operations is invalid

CommentTotalInfo

Type Name Description
int total total number of comments in the posting after the operation

ContactInfo

Type Name Description
String nodeName
String fullName (optional)
String gender (optional)
AvatarImage avatar (optional)
float closeness closeness of the contact to the node, which is calculated from the number of reactions and comments and their age
boolean hasFeedSubscriber (optional) the contact is subscribed to at least one of the node's feeds
boolean hasFeedSubscription (optional) the node is subscribed to at least one of the contact's feeds
boolean hasFriend (optional) the contact is a friend of the node
boolean hasFriendOf (optional) the node is a friend of the contact
boolean hasBlock (optional) the contact is blocked by the node
boolean hasBlockBy (optional) the node is blocked by the contact
ContactOperations operations (optional) the supported operations and the corresponding principals
ContactOperations ownerOperations (optional) the supported operations and the corresponding principals as defined by the contact's owner
ContactOperations adminOperations (optional) the operations and the corresponding principals that are overridden by the node administrator

Credentials

Type Name Description
String login
String password
Validation errors:
Code Description
credentials.login.blank the login is empty
credentials.password.blank the password is empty

CredentialsChange

Type Name Description
String token (optional) credentials reset token
String oldPassword (optional) the current password
String login
String password
Validation errors:
Code Description
credentials.login.blank the login is empty
credentials.password.blank the password is empty

CredentialsCreated

Type Name Description
boolean created true if the credentials are initialized already, false otherwise

DeleteNodeStatus

Type Name Description
boolean requested true if the request is sent, false otherwise

DeleteNodeText

Type Name Description
String message (optional) text message for the provider
Validation errors:
Code Description
delete-node.no-email e-mail is required to be set in the profile to communicate with the provider
deleteNodeText.message.wrong-size the message is too long

DomainAttributes

Type Name Description
String name (optional) domain's hostname or _default_ for the default domain
UUID nodeId (optional) domain's node ID
Validation errors:
Code Description
domainAttributes.name.blank the domain name is empty
domainAttributes.name.wrong-hostname the domain name is not a valid hostname
domainAttributes.nodeId.wrong-uuid the node ID is not a valid UUID

DomainAvailable

Type Name Description
String name fully-qualified domain name

DomainInfo

Type Name Description
String name domain's hostname or _default_ for the default domain
UUID nodeId domain's node ID
timestamp createdAt domain creation timestamp
Validation errors:
Code Description
domainInfo.name.blank the domain name is empty
domainInfo.name.wrong-hostname the domain name is not a valid hostname
domainInfo.nodeId.wrong-uuid the node ID is not a valid UUID

DraftInfo

Type Name Description
String id
String draftType type of the draft (see DraftType for the list of possible values)
String receiverName name of the node the draft is related to
String receiverPostingId (optional) ID of the posting, set for all types, except new-posting
String receiverCommentId (optional) ID of the comment, set for comment-update type
String repliedToId (optional) ID of the comment replied to, set for comment drafts, if needed
timestamp createdAt draft creation timestamp - the real time when the draft was created
timestamp editedAt (optional) draft editing timestamp - the last time the draft was updated
timestamp deadline (optional) draft purging timestamp - the time when the draft will be purged from the database, if not updated
String ownerFullName (optional) full name of the posting's/comment's owner
AvatarImage ownerAvatar (optional) avatar of the posting's/comment's owner
AcceptedReactions acceptedReactions (optional) types of reactions that the posting accepts
Body (as String) bodySrc (optional) the source text of the draft, a string representation of a JSON structure
String bodySrcFormat (optional) format of the source text of the draft, plain-text by default; the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
Body (as String) body body of the draft, a string representation of a JSON structure
String bodyFormat (optional) format of the body of the draft (see BodyFormat for the list of possible values)
MediaAttachment[] media (optional) list of the media attached to the draft
String heading heading of the draft
int publishAt (optional) story publication timestamp - the time the story must be published under in the feed
UpdateInfo updateInfo (optional) description of the update
PostingOperations operations (optional) draft of the list of operations and the corresponding principals
CommentOperations commentOperations (optional) draft of the list of operations and the corresponding principals that are overridden in the posting's comments, set for posting drafts, if needed

DraftText

Type Name Description
String draftType type of the draft (see DraftType for the list of possible values)
String receiverName name of the node the draft is related to
String receiverPostingId (optional) ID of the posting, mandatory for all types, except new-posting
String receiverCommentId (optional) ID of the comment, mandatory for comment-update type
String repliedToId (optional) ID of the comment replied to
String ownerFullName (optional) full name of the posting's/comment's owner
AvatarDescription ownerAvatar (optional) avatar of the posting's/comment's owner
AcceptedReactions acceptedReactions (optional) types of reactions that the posting accepts
Body (as String) bodySrc (optional) the source text of the draft, a string representation of a JSON structure
String bodySrcFormat (optional) format of the source text of the draft, plain-text by default; the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
RemoteMedia[] media (optional) list of the media attached to the draft, the media may be located on another node
int publishAt (optional) story publication timestamp - the time the story must be published under in the feed
UpdateInfo updateInfo (optional) description of the update
PostingOperations operations (optional) draft of the list of operations and the corresponding principals
CommentOperations commentOperations (optional) draft of the list of operations and the corresponding principals that are overridden in the posting's comments
Validation errors:
Code Description
draftText.postingId.blank posting ID is not set
draftText.commentId.blank comment ID is not set
draftText.ownerFullName.wrong-size owner's full name is too long
draftText.ownerAvatar.mediaId.not-found owner's avatar is not found
draftText.bodySrc.wrong-size body text is too long
draftText.bodySrc.wrong-encoding body text encoding is incorrect
draftText.bodySrcFormat.unknown unknown body text format
draftText.acceptedReactions.positive.wrong-size list of accepted positive reactions is too long
draftText.acceptedReactions.positive.wrong-pattern list of accepted positive reactions has wrong format
draftText.acceptedReactions.negative.wrong-size list of accepted negative reactions is too long
draftText.acceptedReactions.negative.wrong-pattern list of accepted negative reactions has wrong format

EmailHint

Type Name Description
String emailHint a masked E-mail address that should help user to understand which E-mail address was used without revealing it

EntryInfo

Type Name Description
PostingInfo posting (optional) posting details, set if the entry is a posting
CommentInfo comment (optional) comment details, set if the entry is a comment

Features

Type Name Description
PostingFeatures posting features of a posting
String[] plugins (optional) list of names of plugins enabled for the node
int feedWidth width of the feed in pixels
FriendGroupsFeatures friendGroups (optional) features of groups of friends
String[] ask (optional) list of requests to the node owner that are accepted by the node (see AskSubject for the list of possible values)
boolean subscribed (optional) true, if the node is subscribed to the client, false otherwise

FeedInfo

Type Name Description
String feedName name of the feed
String title (optional) title of the feed
int total total number of stories in the feed
timestamp firstCreatedAt (optional) creation timestamp of the earliest story in the feed
timestamp lastCreatedAt (optional) creation timestamp of the latest story in the feed
FeedOperations operations (optional) the supported operations and the corresponding principals
String[] sheriffs (optional) list of sheriffs supervising the feed
SheriffMark[] sheriffMarks (optional) list of sheriff marks on the feed

FeedReference

Type Name Description
String feedName name of the feed
timestamp publishedAt story publication timestamp - the time the story is published under in the feed
boolean pinned (optional) true, if the story is pinned (should appear before any non-pinned story in the feed), false otherwise
int moment
String storyId ID of the story
StoryOperations operations (optional) the supported operations and the corresponding principals for the story in the feed

FeedSliceInfo

Type Name Description
int before the slice contains all stories before this moment, inclusive. May be the far future.
int after the slice contains all stories after this moment, exclusive. May be the far past.
StoryInfo[] stories the stories
int totalInPast total number of stories in the feed before this slice
int totalInFuture total number of stories in the feed after this slice

FeedStatus

Type Name Description
int total total number of stories
int totalPinned total number of pinned stories
int lastMoment (optional) moment of the most recent story
int notViewed (optional) number of stories that have not been viewed yet, admin only
int notRead (optional) number of stories that have not been read yet, admin only
int notViewedMoment (optional) moment of the oldest non-viewed story, admin only
int notReadMoment (optional) moment of the oldest non-read story, admin only

FeedStatusChange

Type Name Description
boolean viewed (optional) new value of the viewed flag (null, if the flag is not changed)
boolean read (optional) new value of the read flag (null, if the flag is not changed)
int before change flags for all stories before this moment, inclusive

FeedWithStatus

Type Name Description
String feedName name of the feed
int notViewed number of stories in the feed that have not been viewed yet
int notRead number of stories in the feed that have not been read yet

FriendDescription

Type Name Description
String nodeName name of the node
FriendGroupAssignment[] groups (optional) groups of friends the node is to be included into
Validation errors:
Code Description
friendDescription.nodeName.blank friend's node name is empty
friendDescription.nodeName.wrong-size friend's node name is too long
friendDescription.groups.wrong-principal principal for one of operations is invalid

FriendGroupAssignment

Type Name Description
String id ID of the group of friends
FriendOperations operations (optional) the operations and the corresponding principals

FriendGroupDescription

Type Name Description
String title title of the group of friends
FriendGroupOperations operations (optional) the operations and the corresponding principals
Validation errors:
Code Description
friendGroupDescription.title.blank title of group of friends is empty
friendGroupDescription.title.wrong-size title of group of friends is too long
friendGroupDescription.operations.wrong-principal principal for one of operations is invalid

FriendGroupDetails

Type Name Description
String id ID of the group of friends
String title (optional) title of the group of friends
timestamp addedAt the friendship timestamp - the real time when the node was added to the group of friends
FriendOperations operations (optional) list of the supported operations and the corresponding principals

FriendGroupInfo

Type Name Description
String id
String title (optional) title of the group of friends
timestamp createdAt the group creation timestamp - the real time when the group of friends was created
FriendGroupOperations operations (optional) list of the supported operations and the corresponding principals

FriendGroupsFeatures

Type Name Description
FriendGroupInfo[] available list of groups of friends existing on the node
FriendGroupDetails[] memberOf (optional) list of groups of friends the client is member of

FriendInfo

Type Name Description
String nodeName name of the node
ContactInfo contact (optional) information about the node
FriendGroupDetails[] groups (optional) groups of friends the node belongs to

FriendOfInfo

Type Name Description
String remoteNodeName name of the remote node
ContactInfo contact (optional) information about the remote node
FriendGroupDetails[] groups (optional) groups of friends on the remote node this node was added to

FundraiserInfo

Type Name Description
String title fundraiser title
String qrCode (optional) text or URI to be encoded and displayed as QR-code
String text (optional) arbitrary text to be displayed
String href (optional) link to the fundraiser
any any any other fields understood by Moera clients

LinkPreview

Type Name Description
String siteName (optional) name of the site
String url (optional) canonical URL of the page
String title (optional) title of the page
String description (optional) description of the page
String imageHash (optional) hash of the image presenting the page

LinkPreviewInfo

Type Name Description
String siteName (optional) name of the site
String url (optional) canonical URL of the page
String title (optional) title of the page
String description (optional) description of the page
String imageUrl (optional) URL of the image presenting the page

MediaAttachment

Type Name Description
PrivateMediaFileInfo media (optional) details of the attached media, may be absent, if the media is not located on the node
RemoteMediaInfo remoteMedia (optional) details of the media, if it is located on another node
boolean embedded true if the media is used in the body of the posting/comment, false otherwise

MediaFilePreviewInfo

Type Name Description
int targetWidth the width the preview was prepared for viewing at
int width actual width of the preview in pixels
int height actual height of the preview in pixels
boolean original (optional) true if the preview is identical to the original media, false otherwise

MediaWithDigest

Type Name Description
String id ID of the media file
String digest (optional) cryptographic digest of the media file

NameToRegister

Type Name Description
String name
Validation errors:
Code Description
nameToRegister.name.blank the name is empty
nameToRegister.name.invalid the name is reserved, too long or contains invalid characters

NotificationPacket

Type Name Description
String id ID of the notification packet on the sending node (used to filter out duplicates)
String nodeName name of the sending node
String fullName (optional) full name of the sending node
String gender (optional) gender of the sending node
AvatarImage avatar (optional) avatar of the sending node
timestamp createdAt notification packet creation timestamp
String type notification type
String notification the notification, a string representation of a JSON structure (see Notifications page for details)
byte[] signature the notification packet sender signature (use NotificationPacket fingerprint)
int signatureVersion signature version (i.e. fingerprint version)

NodeNameInfo

Type Name Description
String name (optional)
String operationStatus (optional) status of the latest operation with the node name (see OperationStatus for the list of possible values)
timestamp operationStatusUpdated (optional) the last time the operation status was updated
String operationErrorCode (optional) if the operation with the node name was failed, the code of the failure
String operationErrorMessage (optional) if the operation with the node name was failed, the human-readable description of the failure
NodeNameOperations operations (optional) the supported operations and the corresponding principals

PeopleGeneralInfo

Type Name Description
int feedSubscribersTotal (optional) total number of subscribers of the node
int feedSubscriptionsTotal (optional) total number of subscriptions of the node
String -> int friendsTotal (optional) total number of friends in every group
int friendOfsTotal (optional) total number of nodes that added this node to their friends
int blockedTotal (optional) total number of blocked nodes
int blockedByTotal (optional) total number of nodes that blocked this node
PeopleOperations operations (optional) the supported operations and the corresponding principals

PluginContext

Type Name Description
boolean rootAdmin true, if the client has authenticated as root admin, false otherwise
boolean admin true, if the client has authenticated as node admin, false otherwise
String[] authCategories the list of permissions granted to the client, if it has authenticated as node admin; see TokenInfo.permissions for the list of possible values
String clientName node name of the client
String remoteAddress IP address of the client
String userAgent user agent (browser) used by the client
String userAgentOs operating system used by the client
String nodeId ID of the current node
String nodeName node name of the current node
String domainName domain name of the current node
String originUrl full URL of the request

PluginDescription

Type Name Description
String name a unique plugin name; can contain only small latin letters, digits or hyphen
String title (optional) user-readable title of the plugin
String description (optional) user-readable description of purpose of the plugin
String location (optional) URL of the plugin; used by the node to call the plugin API
String[] acceptedEvents (optional) list of types of internal events the plugin wants to receive; Read more about internal events.
SettingDescriptor[] options (optional) plugin settings to be added to the list of node settings, the settings appear in the list with a prefix plugin.<plugin name>.
Validation errors:
Code Description
pluginDescription.name.blank plugin name is empty
pluginDescription.name.wrong-size plugin name is too long
pluginDescription.name.wrong-pattern plugin name format is incorrect
pluginDescription.title.wrong-size plugin title is too long
pluginDescription.description.wrong-size plugin description is too long
pluginDescription.options.unknown-type option has an unknown type

PluginInfo

Type Name Description
String nodeId ID of the node this plugin is connected to
boolean local true if the plugin is enabled for a particular node only, false, if it is enabled for the whole server
String name a unique plugin name
String title (optional) user-readable title of the plugin
String description (optional) user-readable description of purpose of the plugin
String location (optional) URL of the plugin; used by the node to call the plugin API
String[] acceptedEvents (optional) list of types of internal events the plugin wants to receive; Read more about internal events.
SettingMetaInfo[] settings (optional) plugin settings to be added to the list of node settings
String tokenId (optional) ID of the token used to authenticate the plugin

PostingFeatures

Type Name Description
boolean post (optional) true if the client is allowed to create postings, false otherwise
boolean subjectPresent true if new postings are recommended to have a subject, false otherwise
String[] sourceFormats list of source text formats the node understands (see SourceFormat for the list of possible values)
int mediaMaxSize maximal size of a media attachment in a post
int imageRecommendedSize maximal size of a compressed image in a post
int imageRecommendedPixels maximal resolution of a compressed image in a post (in pixels)
String[] imageFormats list of image formats (in MIME type form) the node understands

PostingInfo

Type Name Description
String id
String revisionId ID of the current revision of the posting
String receiverRevisionId (optional) ID of the current revision of the original posting (for cached copies of remote postings only)
int totalRevisions total number of revisions the posting has
String receiverName (optional) name of the node where the posting was published (for cached copies of remote postings only)
String receiverFullName (optional) full name of the node where the posting was published (for cached copies of remote postings only)
String receiverGender (optional) gender of the node where the posting was published (for cached copies of remote postings only)
AvatarImage receiverAvatar (optional) avatar of the node where the posting was published (for cached copies of remote postings only)
String receiverPostingId (optional) ID of the original posting (for cached copies of remote postings only)
String parentMediaId (optional) ID of the media the posting is linked to, if any
String ownerName node name of the posting's owner
String ownerFullName (optional) full name of the posting's owner
String ownerGender (optional) gender of the posting's owner
AvatarImage ownerAvatar (optional) avatar of the posting's owner
Body (as String) bodyPreview (optional) preview of the posting's body, a string representation of a JSON structure
Body (as String) bodySrc (optional) the source text of the posting, a string representation of a JSON structure, may be absent if not requested
byte[] bodySrcHash hash of the source text of the posting
String bodySrcFormat (optional) format of the source text of the posting, the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
Body (as String) body body of the posting, a string representation of a JSON structure
String bodyFormat (optional) format of the body of the posting, may have any value meaningful for the client (see BodyFormat for the list of possible values)
MediaAttachment[] media (optional) list of the media attached to the posting
String heading heading of the posting
UpdateInfo updateInfo (optional) description of the latest update
timestamp createdAt posting creation timestamp - the real time when the posting was created
timestamp editedAt (optional) posting editing timestamp - the last time the posting was updated
timestamp deletedAt (optional) posting deletion timestamp - the time when the posting was deleted
timestamp receiverCreatedAt (optional) original posting creation timestamp (for cached copies of remote postings only)
timestamp receiverEditedAt (optional) original posting editing timestamp (for cached copies of remote postings only)
timestamp receiverDeletedAt (optional) original posting deletion timestamp (for cached copies of remote postings only)
timestamp revisionCreatedAt creation timestamp of the current revision of the posting
timestamp receiverRevisionCreatedAt (optional) creation timestamp of the current revision of the original posting (for cached copies of remote postings only)
timestamp deadline (optional) posting purging timestamp - the time when the deleted posting will be purged from the database
byte[] digest (optional) cryptographic digest of the posting (use Posting fingerprint)
byte[] signature (optional) the posting's owner signature (use Posting fingerprint)
int signatureVersion (optional) signature version (i.e. fingerprint version)
FeedReference[] feedReferences (optional) array of references to the posting from stories in feeds
BlockedPostingInstantInfo[] blockedInstants (optional) instants related to the posting that are blocked (for admin only)
PostingOperations operations (optional) the supported operations and the corresponding principals
PostingOperations receiverOperations (optional) the supported operations for the original posting and the corresponding principals (for cached copies of remote postings only)
CommentOperations commentOperations (optional) the operations and the corresponding principals that are overridden in the posting's comments
ReactionOperations reactionOperations (optional) the operations and the corresponding principals that are overridden in reactions to the posting
ReactionOperations commentReactionOperations (optional) the operations and the corresponding principals that are overridden in reactions to the posting's comments
String[] blockedOperations (optional) operations on the posting that are blocked for the client (see BlockedEntryOperation for the list of possible values)
String[] blockedCommentOperations (optional) operations on the posting's comments that are blocked for the client (see BlockedEntryOperation for the list of possible values)
String[] sheriffs (optional) list of sheriffs supervising the posting
SheriffMark[] sheriffMarks (optional) list of sheriff marks on the posting
AcceptedReactions acceptedReactions (optional) types of reactions that the posting accepts
ClientReactionInfo clientReaction (optional) details of the existing reaction (if any) of the client's owner
ReactionTotalsInfo reactions (optional) reactions summary of the posting
PostingSourceInfo[] sources (optional) details of the sources the posting was received from (for cached copies of remote postings only)
int totalComments (optional) total number of comments to the posting

PostingRevisionInfo

Type Name Description
String id
String receiverId (optional) ID of the original revision (for cached copies of remote postings only)
Body (as String) bodyPreview (optional) preview of the revision's body, a string representation of a JSON structure
byte[] bodySrcHash hash of the source text of the revision
String bodySrcFormat (optional) format of the source text of the revision, the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
Body (as String) body body of the revision, a string representation of a JSON structure
String bodyFormat (optional) format of the body of the revision (see BodyFormat for the list of possible values)
MediaAttachment[] media (optional) list of the media attached to the revision
String heading heading of the revision
UpdateInfo updateInfo (optional) description of the latest update
timestamp createdAt revision creation timestamp - the real time when the revision was created
timestamp deletedAt (optional) revision deletion timestamp - the time when the revision was deleted
timestamp receiverCreatedAt (optional) original revision creation timestamp (for cached copies of remote postings only)
timestamp receiverDeletedAt (optional) original revision deletion timestamp (for cached copies of remote postings only)
byte[] digest (optional) cryptographic digest of the revision (use Posting fingerprint)
byte[] signature (optional) the revision's owner signature (use Posting fingerprint)
int signatureVersion (optional) signature version (i.e. fingerprint version)
ClientReactionInfo clientReaction (optional) details of the existing reaction (if any) of the client's owner
ReactionTotalsInfo reactions (optional) reactions summary of the posting revision

PostingSourceInfo

Type Name Description
String nodeName name of the remote node
String fullName (optional) full name of the remote node
AvatarImage avatar (optional) avatar of the remote node
String feedName name of the feed on the remote node
String postingId ID of the posting on the remote node
timestamp createdAt timestamp when the posting was received from this source

PostingSourceText

Type Name Description
AvatarDescription ownerAvatar (optional) avatar of the posting's owner
Body (as String) bodySrc (optional) the source text of the posting, a string representation of a JSON structure
String bodySrcFormat (optional) format of the source text of the posting, plain-text by default; the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
MediaWithDigest[] media (optional) array of IDs and digests of private media to be attached to the posting
AcceptedReactions acceptedReactions (optional) types of reactions that the posting accepts
PostingOperations operations (optional) the operations and the corresponding principals
CommentOperations commentOperations (optional) the operations and the corresponding principals that are overridden in the posting's comments

PostingText

Type Name Description
String ownerName (optional) node name of the posting's owner
String ownerFullName (optional) full name of the posting's owner
String ownerGender (optional) gender of the posting's owner
AvatarDescription ownerAvatar (optional) avatar of the posting's owner
Body (as String) bodyPreview (optional) preview of the posting's body, a string representation of a JSON structure
Body (as String) bodySrc (optional) the source text of the posting, a string representation of a JSON structure
String bodySrcFormat (optional) format of the source text of the posting, plain-text by default; the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
Body (as String) body (optional) body of the posting, a string representation of a JSON structure
String bodyFormat (optional) format of the body of the posting, may have any value meaningful for the client (see BodyFormat for the list of possible values)
String[] media (optional) array of IDs of private media to be attached to the posting
timestamp createdAt (optional) posting creation timestamp - the real time when the posting was created
AcceptedReactions acceptedReactions (optional) types of reactions that the posting accepts
StoryAttributes[] publications (optional) list of publications in feeds that must be made after creating the posting (for new postings only)
UpdateInfo updateInfo (optional) description of the update
byte[] signature (optional) the posting's owner signature (use Posting fingerprint)
int signatureVersion (optional) signature version (i.e. fingerprint version)
PostingOperations operations (optional) the operations and the corresponding principals
CommentOperations commentOperations (optional) the operations and the corresponding principals that are overridden in the posting's comments
ReactionOperations reactionOperations (optional) the operations and the corresponding principals that are overridden in reactions to the posting
ReactionOperations commentReactionOperations (optional) the operations and the corresponding principals that are overridden in reactions to the posting's comments
Validation errors:
Code Description
postingText.ownerAvatar.mediaId.not-found owner's avatar is not found
postingText.bodySrc.blank body source text is empty
postingText.bodySrc.wrong-size body source text is too long
postingText.bodySrc.wrong-encoding body source text is formatted incorrectly
postingText.bodySrcFormat.unknown unknown body source text format
postingText.body.blank body text is empty
postingText.body.wrong-size body text is too long
postingText.bodyPreview.wrong-encoding body preview encoding is incorrect
postingText.bodyFormat.blank body format is not set
postingText.bodyFormat.wrong-size body format is too long
postingText.media.not-found media attachment is not found
postingText.media.not-compressed media attachment is not compressed as the node requires, the parameters of the desired compression are returned in PostingFeatures
postingText.createdAt.blank body creation timestamp is not set
postingText.createdAt.out-of-range body creation timestamp is too far from the current timestamp
postingText.acceptedReactions.positive.wrong-size list of accepted positive reactions is too long
postingText.acceptedReactions.positive.wrong-pattern list of accepted positive reactions has wrong format
postingText.acceptedReactions.negative.wrong-size list of accepted negative reactions is too long
postingText.acceptedReactions.negative.wrong-pattern list of accepted negative reactions has wrong format
postingText.publications.cannot-modify publications field is not allowed in posting modification query
postingText.operations.wrong-principal principal for one of operations is invalid
postingText.commentOperations.wrong-principal principal for one of comment operations is invalid
postingText.reactionOperations.wrong-principal principal for one of reaction operations is invalid
postingText.commentReactionOperations.wrong-principal principal for one of comment reaction operations is invalid

PrivateMediaFileInfo

Type Name Description
String id ID of the media file
String hash SHA-1 hash of the media file
String path virtual location of the media file, relative to the /media virtual page
String mimeType MIME type of the media
int width (optional) width of the media in pixels (null, if the media file is not an image or video)
int height (optional) height of the media in pixels (null, if the media file is not an image or video)
int orientation (optional) media orientation, the value should be interpreted like the orientation value present in JPEG EXIF data (null, if the media file is not an image or video)
int size size of the media file in bytes
String postingId (optional) ID of the posting linked to the media
MediaFilePreviewInfo[] previews (optional) list of media previews - downscaled versions of the media
PrivateMediaFileOperations operations (optional) the supported operations and the corresponding principals

ProfileAttributes

Type Name Description
String fullName (optional) node owner's full name
String gender (optional) node owner's gender
String email (optional) node owner's E-mail address
String title (optional) node title
String bioSrc (optional) the source text of node owner's bio (arbitrary text)
String bioSrcFormat (optional) format of the source text of node owner's bio, markdown by default; the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
String avatarId (optional) node owner's avatar ID
FundraiserInfo[] fundraisers (optional) list of fundraisers - methods of giving a donation to the node owner
ProfileOperations operations (optional) the operations and the corresponding principals
Validation errors:
Code Description
profileAttributes.fullName.wrong-size the full name is too long
profileAttributes.gender.wrong-size the gender string is too long
profileAttributes.email.wrong-size the E-mail is too long
profileAttributes.email.wrong-email the E-mail is not a well-formed E-mail address
profileAttributes.title.wrong-size the title is too long
profileAttributes.bioSrc.wrong-size the bio is too long
profileAttributes.operations.wrong-principal principal for one of operations is invalid

ProfileInfo

Type Name Description
String fullName (optional) node owner's full name
String gender (optional) node owner's gender
String email (optional) node owner's E-mail address
String title (optional) node title
String bioSrc (optional) the source text of node owner's bio (arbitrary text), may be absent if not requested
String bioSrcFormat (optional) format of the source text of node owner's bio, markdown by default, may be absent if not requested; the list of available formats is returned in PostingFeatures (see SourceFormat for the list of possible values)
String bioHtml (optional) HTML representation of node owner's bio
AvatarInfo avatar (optional) node owner's avatar
FundraiserInfo[] fundraisers (optional) list of fundraisers - methods of giving a donation to the node owner
ProfileOperations operations (optional) the supported operations and the corresponding principals

PublicMediaFileInfo

Type Name Description
String id ID of the media file
String path virtual location of the media file, relative to the /media virtual page
int width (optional) width of the media in pixels (null, if the media file is not an image or video)
int height (optional) height of the media in pixels (null, if the media file is not an image or video)
int orientation (optional) media orientation, the value should be interpreted like the orientation value present in JPEG EXIF data (null, if the media file is not an image or video)
int size size of the media file in bytes

PushContent

Type Name Description
String type type of the notification (see PushContentType for the list of possible values)
String id (optional) ID of the story (story-deleted notifications only)
StoryInfo story (optional) the story (story-added notifications only)
FeedWithStatus feedStatus (optional) status of the feed (feed-updated notifications only)

PushRelayClientAttributes

Type Name Description
String type type of the relay (see PushRelayType for the list of possible values)
String clientId ID/token of the client
String lang (optional) language of the messages
Validation errors:
Code Description
pushRelayClientAttributes.type.blank relay type is empty
pushRelayClientAttributes.type.unknown relay type is unknown
pushRelayClientAttributes.clientId.blank client ID is empty

ReactionAttributes

Type Name Description
boolean negative true, if the reaction is negative, false, if positive
int emoji reaction code, usually interpreted by clients as emoji code point
ReactionOperations operations (optional) the operations and the corresponding principals

ReactionCreated

Type Name Description
ReactionInfo reaction (optional) details of the reaction created
ReactionTotalsInfo totals summary of reactions after the creation

ReactionDescription

Type Name Description
String ownerName (optional) reaction owner's node name
String ownerFullName (optional) reaction owner's full name
String ownerGender (optional) reaction owner's gender
AvatarDescription ownerAvatar (optional) reaction owner's avatar
boolean negative true, if the reaction is negative, false, if positive
int emoji reaction code, usually interpreted by clients as emoji code point
byte[] signature (optional) the reaction owner signature (use Reaction fingerprint)
int signatureVersion (optional) signature version (i.e. fingerprint version)
ReactionOperations operations (optional) the operations and the corresponding principals
Validation errors:
Code Description
reactionDescription.ownerAvatar.mediaId.not-found owner's avatar is not found
reactionDescription.operations.wrong-principal principal for one of operations is invalid

ReactionsFilter

Type Name Description
String ownerName (optional) reaction owner's name
String[] postings (optional) list of IDs of postings

ReactionInfo

Type Name Description
String ownerName (optional) reaction owner's node name
String ownerFullName (optional) reaction owner's full name
String ownerGender (optional) reaction owner's gender
AvatarImage ownerAvatar (optional) reaction owner's avatar
String postingId (optional) ID of the posting
String postingRevisionId (optional) ID of the posting revision, if relevant
String commentId (optional) ID of the comment, if relevant
String commentRevisionId (optional) ID of the comment revision, if relevant
boolean negative (optional) true, if the reaction is negative, false, if positive
int emoji (optional) reaction code, usually interpreted by clients as emoji code point
int moment (optional)
timestamp createdAt (optional) reaction creation timestamp - the real time when the reaction was created
timestamp deadline (optional) if present, the reaction will be erased at this time
byte[] signature (optional) the reaction owner signature (use Reaction fingerprint)
int signatureVersion (optional) signature version (i.e. fingerprint version)
ReactionOperations operations (optional) the supported operations and the corresponding principals
ReactionOperations ownerOperations (optional) the supported operations and the corresponding principals as defined by the reaction's owner
ReactionOperations seniorOperations (optional) the operations and the corresponding principals that are overridden by the reaction's "senior": the posting's owner in the case of reaction to a posting or the comment's owner in the case of reaction to a comment
ReactionOperations majorOperations (optional) the operations and the corresponding principals that are overridden by the posting's owner ("major") in the case of reaction to a comment; not set in the case of reaction to a posting

ReactionsSliceInfo

Type Name Description
int before the slice contains all reactions before this moment, inclusive. May be the far future.
int after the slice contains all reactions after this moment, exclusive. May be the far past.
int total total number of reactions in the whole list
ReactionInfo[] reactions the reactions

ReactionTotalInfo

Type Name Description
int emoji reaction code, usually interpreted by clients as emoji code point
int total (optional) total number of reactions with the given code
float share (optional) share the reactions with the given code stand from the total number of reactions (may be absent, if total is present)

ReactionTotalsFilter

Type Name Description
String[] postings list of IDs of postings

ReactionTotalsInfo

Type Name Description
String entryId ID of the entry
ReactionTotalInfo[] positive (optional) summary of positive reactions
ReactionTotalInfo[] negative (optional) summary of negative reactions

ReactionOverride

Type Name Description
ReactionOperations operations (optional) the supported operations and the corresponding principals
ReactionOperations seniorOperations (optional) the operations and the corresponding principals that are overridden by the reaction's "senior": the posting's owner in the case of reaction to a posting or the comment's owner in the case of reaction to a comment
ReactionOperations majorOperations (optional) the operations and the corresponding principals that are overridden by the posting's owner ("major") in the case of reaction to a comment; not set in the case of reaction to a posting
Validation errors:
Code Description
reactionOverride.operations.wrong-principal principal for one of operations is invalid
reactionOverride.seniorOperations.wrong-principal principal for one of senior operations is invalid
reactionOverride.majorOperations.wrong-principal principal for one of major operations is invalid

RegisteredNameSecret

Type Name Description
String name
String[] mnemonic (optional) human-friendly mnemonic of the updating key
String secret (optional) base64-encoded secret of the updating key

RemoteFeed

Type Name Description
String nodeName name of the node
String feedName name of the feed on the node

RemoteMedia

Type Name Description
String id ID of the media file
String hash (optional) SHA-1 hash of the media file
String digest (optional) cryptographic digest of the media file

RemoteMediaInfo

Type Name Description
String id ID of the media file
String hash (optional) SHA-1 hash of the media file
String digest (optional) cryptographic digest of the media file

RemotePosting

Type Name Description
String nodeName name of the node
String postingId ID of the posting on the node

RemotePostingOrNode

Type Name Description
String nodeName name of the node
String postingId (optional) ID of the posting on the node

RemotePostingVerificationInfo

Type Name Description
String id asynchronous operation ID
String nodeName
String postingId
String revisionId (optional)
String status (optional) status of the operation (see VerificationStatus for the list of possible values)
String errorCode (optional) error code
String errorMessage (optional) human-readable error message

RemoteReactionVerificationInfo

Type Name Description
String id asynchronous operation ID
String nodeName
String postingId
String reactionOwnerName node name of the reaction's owner
String status (optional) status of the operation (see VerificationStatus for the list of possible values)
String errorCode (optional) error code
String errorMessage (optional) human-readable error message

RepliedTo

Type Name Description
String id ID of the comment
String revisionId (optional) ID of the comment revision
String name node name of the comment's owner
String fullName (optional) full name of the comment's owner
String gender (optional) gender of the comment's owner
AvatarImage avatar (optional) avatar of the comment's owner
String heading (optional) heading of the comment
byte[] digest cryptographic digest of the comment (use Comment fingerprint)

Result

Type Name Description
String errorCode error code
String message (optional) human-readable error message

SheriffMark

Type Name Description
String sheriffName name of the sheriff that added the mark

SettingInfo

Type Name Description
String name name of the setting
String value (optional) value of the setting

SettingMetaAttributes

Type Name Description
String name name of the setting
String defaultValue (optional) default value of the setting (if absent or null, the built-in default value will be used)
boolean privileged (optional) the setting should be privileged (if absent or null, the built-in value of the flag will be used)

SettingDescriptor

Type Name Description
String name name of the setting
String type type of the setting (see SettingType for the list of possible values)
String defaultValue (optional) default value of the setting
boolean internal (optional) the setting is internal - not displayed to the user
boolean privileged (optional) the setting is privileged - may be changed by server owner only
String title (optional) human-friendly description of the setting
SettingTypeModifiers modifiers (optional) additional modifiers that may help to choose a proper UI component for the setting value and to validate the input; meaning of the modifiers depend on the setting type

SettingMetaInfo

Type Name Description
String name name of the setting
String type type of the setting (see SettingType for the list of possible values)
String defaultValue (optional) default value of the setting
boolean privileged (optional) the setting is privileged - may be changed by server owner only
String title human-friendly description of the setting
SettingTypeModifiers modifiers (optional) additional modifiers that may help to choose a proper UI component for the setting value and to validate the input; meaning of the modifiers depend on the setting type

SettingTypeModifiers

Type Name Description
String format (optional) preferred format of displaying the value
  • int:
    • size - data size in bytes/kilobytes/megabytes etc.
String min (optional) (int, Duration) minimal value
String max (optional) (int, Duration) maximal value
boolean multiline (optional) (string) true, if the value is a multiline text
boolean never (optional) (Duration) true, if value never is allowed
boolean always (optional) (Duration) true, if value always is allowed
String[] principals (optional) (Principal) list of allowed principals (see PrincipalFlag for the list of possible values)

SheriffComplainDecisionText

Type Name Description
boolean reject true, if the complaints in the group are to be rejected, false otherwise
String decisionCode (optional) the decision (see SheriffOrderReason for the list of possible values)
String decisionDetails (optional) detailed explanation of the decision in user-readable form
boolean anonymous (optional) true, if the complaints' owners' names are not to be published, false otherwise
Validation errors:
Code Description
sheriffComplainDecisionText.decisionCode.blank decision code is not set
sheriffComplainDecisionText.decisionDetails.wrong-size decision details are too long

SheriffComplainGroupInfo

Type Name Description
String id
String remoteNodeName name of the node the complaints are related to
String remoteNodeFullName (optional) full name of the node the complaints are related to
String remoteFeedName name of the feed the complaints are related to
String remotePostingId (optional) ID of the posting the complaints are related to
String remotePostingRevisionId (optional) ID of the posting's revision the complaints are related to
String remotePostingOwnerName (optional) posting owner's node name
String remotePostingOwnerFullName (optional) posting owner's full name
String remotePostingOwnerGender (optional) posting owner's gender
String remotePostingHeading (optional) heading of the posting
String remoteCommentId (optional) ID of the comment the complaints are related to
String remoteCommentRevisionId (optional) ID of the comment's revision the complaints are related to
String remoteCommentOwnerName (optional) comment owner's node name
String remoteCommentOwnerFullName (optional) comment owner's full name
String remoteCommentOwnerGender (optional) comment owner's gender
String remoteCommentHeading (optional) heading of the comment
timestamp createdAt the group of complaints creation timestamp - the real time when the group was created
int moment moment of the group of complaints
String status status of the group of complaints (see SheriffComplainStatus for the list of possible values)
String decisionCode (optional) sheriff's decision (see SheriffOrderReason for the list of possible values)
String decisionDetails (optional) detailed explanation of sheriff's decision in user-readable form
timestamp decidedAt (optional) sheriff's decision timestamp - the real time when the decision was made
boolean anonymous (optional) true, if the complaints' owners' names are not published, false otherwise

SheriffComplainGroupsSliceInfo

Type Name Description
int before the slice contains all groups before this moment, inclusive. May be the far future.
int after the slice contains all groups after this moment, exclusive. May be the far past.
SheriffComplainGroupInfo[] groups the groups
int total total number of groups
int totalInPast number of groups before this slice till the far past
int totalInFuture number of groups after this slice till the far future

SheriffComplainInfo

Type Name Description
String id
String ownerName complaint owner's node name
String ownerFullName (optional) complaint owner's full name
String ownerGender (optional) complaint owner's gender
SheriffComplainGroupInfo group (optional) the group of complains this complaint belongs to
String reasonCode reason of the complaint (see SheriffOrderReason for the list of possible values)
String reasonDetails (optional) detailed explanation of reason of the complaint in user-readable form
boolean anonymousRequested (optional) true, if the complaint's owner wants his name not to be published, false otherwise
timestamp createdAt complaint creation timestamp - the real time when the order was created

SheriffComplainText

Type Name Description
String ownerFullName (optional) complaint owner's full name
String ownerGender (optional) complaint owner's gender
String nodeName name of the node the complaint is related to
String fullName (optional) full name of the node the complaint is related to
String feedName name of the feed the complaint is related to
String postingId (optional) ID of the posting the complaint is related to
String postingOwnerName (optional) posting owner's node name
String postingOwnerFullName (optional) posting owner's full name
String postingOwnerGender (optional) posting owner's gender
String postingHeading (optional) heading of the posting
String commentId (optional) ID of the comment the complaint is related to
String commentOwnerName (optional) comment owner's node name
String commentOwnerFullName (optional) comment owner's full name
String commentOwnerGender (optional) comment owner's gender
String commentHeading (optional) heading of the comment
String reasonCode (optional) reason of the complaint (see SheriffOrderReason for the list of possible values)
String reasonDetails (optional) detailed explanation of reason of the complaint in user-readable form
boolean anonymous (optional) true, if the complaint's owner wants his name not to be published, false otherwise
Validation errors:
Code Description
sheriffComplainText.ownerFullName.wrong-size owner's full name is too long
sheriffComplainText.ownerGender.wrong-size owner's gender is too long
sheriffComplainText.nodeName.blank node name is empty
sheriffComplainText.nodeName.wrong-size node name is too long
sheriffComplainText.fullName.wrong-size node's full name is too long
sheriffComplainText.feedName.blank feed name is empty
sheriffComplainText.feedName.wrong-size feed name is too long
sheriffComplainText.postingOwnerName.wrong-size posting owner's name is too long
sheriffComplainText.postingOwnerFullName.wrong-size posting owner's full name is too long
sheriffComplainText.postingOwnerGender.wrong-size posting owner's gender is too long
sheriffComplainText.postingHeading.wrong-size posting heading is too long
sheriffComplainText.postingId.wrong-size posting ID is too long
sheriffComplainText.commentOwnerName.wrong-size comment owner's name is too long
sheriffComplainText.commentOwnerFullName.wrong-size comment owner's full name is too long
sheriffComplainText.commentOwnerGender.wrong-size comment owner's gender is too long
sheriffComplainText.commentHeading.wrong-size comment heading is too long
sheriffComplainText.commentId.wrong-size comment ID is too long
sheriffComplainText.reasonDetails.wrong-size reason details are too long

SheriffOrderAttributes

Type Name Description
boolean delete (optional) true, if the order is to cancel the previous order of this type, false otherwise
String feedName name of the feed the order is related to
String postingId (optional) ID of the posting the order is related to
String commentId (optional) ID of the comment the order is related to
String category category of the order (see SheriffOrderCategory for the list of possible values)
String reasonCode (optional) reason of the order (see SheriffOrderReason for the list of possible values)
String reasonDetails (optional) detailed explanation of reason of the order in user-readable form
Validation errors:
Code Description
sheriffOrderAttributes.feedName.blank feed name is empty
sheriffOrderAttributes.feedName.wrong-size feed name is too long
sheriffOrderAttributes.reasonDetails.wrong-size reason details are too long

SheriffOrderDetails

Type Name Description
String id
boolean delete (optional) true, if the order is to cancel the previous order of this type, false otherwise
String sheriffName node name of the sheriff
AvatarDescription sheriffAvatar (optional) sheriff's avatar
String feedName name of the feed the order is related to
String postingId (optional) ID of the posting the order is related to
String commentId (optional) ID of the comment the order is related to
String category category of the order (see SheriffOrderCategory for the list of possible values)
String reasonCode (optional) reason of the order (see SheriffOrderReason for the list of possible values)
String reasonDetails (optional) detailed explanation of reason of the order in user-readable form
timestamp createdAt order creation timestamp - the real time when the order was created
byte[] signature the sheriff's signature (use SheriffOrder fingerprint)
int signatureVersion signature version (i.e. fingerprint version)
Validation errors:
Code Description
sheriffOrderDetails.id.blank ID is empty
sheriffOrderDetails.id.wrong-size ID is too long
sheriffOrderDetails.sheriffName.blank sheriff name is empty
sheriffOrderDetails.sheriffName.wrong-size sheriff name is too long
sheriffOrderDetails.sheriffAvatar.mediaId.not-found sheriff's avatar is not found
sheriffOrderDetails.feedName.blank feed name is empty
sheriffOrderDetails.feedName.wrong-size feed name is too long
sheriffOrderDetails.reasonDetails.wrong-size reason details are too long
sheriffOrderDetails.createdAt.out-of-range order creation timestamp is too far from the current timestamp

SheriffOrderInfo

Type Name Description
String id
boolean delete (optional) true, if the order is to cancel the previous order of this type, false otherwise
String sheriffName node name of the sheriff
String nodeName name of the node the order was sent to
String nodeFullName (optional) full name of the node the order was sent to
String feedName name of the feed the order is related to
String postingId (optional) ID of the posting the order is related to
String postingRevisionId (optional) ID of the posting's revision the order is related to
String postingOwnerName (optional) posting owner's node name
String postingOwnerFullName (optional) posting owner's full name
String postingOwnerGender (optional) posting owner's gender
String postingHeading (optional) heading of the posting
String commentId (optional) ID of the comment the order is related to
String commentRevisionId (optional) ID of the comment's revision the order is related to
String commentOwnerName (optional) comment owner's node name
String commentOwnerFullName (optional) comment owner's full name
String commentOwnerGender (optional) comment owner's gender
String commentHeading (optional) heading of the comment
String category category of the order (see SheriffOrderCategory for the list of possible values)
String reasonCode (optional) reason of the order (see SheriffOrderReason for the list of possible values)
String reasonDetails (optional) detailed explanation of reason of the order in user-readable form
timestamp createdAt order creation timestamp - the real time when the order was created
byte[] signature the sheriff's signature (use SheriffOrder fingerprint)
int signatureVersion signature version (i.e. fingerprint version)
String complainGroupId (optional) ID of the groups of complaints that were the cause of the order

StoryAttributes

Type Name Description
String feedName (optional) name of the feed
timestamp publishAt (optional) story publication timestamp - the time the story must be published under in the feed
boolean pinned (optional) true, if the story is pinned (should appear before any non-pinned story in the feed), false otherwise
boolean viewed (optional) value of the viewed flag (null, if the flag is not changed)
boolean read (optional) value of the read flag (null, if the flag is not changed)
boolean satisfied (optional) value of the satisfied flag (null, if the flag is not changed)

StoryInfo

Type Name Description
String id
String feedName name of the feed
String storyType type of the story (see StoryType for the list of possible values)
timestamp createdAt story creation timestamp - the real time when the story was created
timestamp publishedAt story publication timestamp - the time the story is published under in the feed
boolean pinned (optional) true, if the story is pinned (should appear before any non-pinned story in the feed), false otherwise
int moment
boolean viewed (optional) true, if the story has been viewed by node owner, false otherwise
boolean read (optional) true, if the story has been read by node owner, false otherwise
boolean satisfied (optional) if the story is associated with a user action (for example, it contains a form that should be submitted), this flag is set to true, if the action is done already, and false otherwise
String summaryNodeName (optional) name of the node related to the summary of the story
String summaryFullName (optional) full name of the node related to the summary of the story
AvatarImage summaryAvatar (optional) avatar of the summary of the story
String summary (optional) user-readable summary of the story - this field is deprecated in favor of summaryData
StorySummaryData summaryData (optional) details of the story; they are used by the client to build a user-readable summary of the story
PostingInfo posting (optional) the posting this story is about
String postingId (optional) ID of the posting this story is about, used if the whole posting is not returned
CommentInfo comment (optional) the comment this story is about
String commentId (optional) ID of the comment this story is about, used if the whole posting is not returned
String remoteNodeName (optional) name of the node this story is about
String remoteFullName (optional) full name of the node this story is about
String remotePostingId (optional) ID of the posting at remote node this story is about
String remoteCommentId (optional) ID of the comment at remote node this story is about
String remoteMediaId (optional) ID of the media at remote node this story is about
StoryOperations operations (optional) the supported operations and the corresponding principals

StorySummaryData

Type Name Description
StorySummaryNode node (optional) a node
StorySummaryEntry posting (optional) a posting
StorySummaryEntry comment (optional) a comment
StorySummaryEntry[] comments (optional) list of comments
int totalComments (optional) total number of comments
StorySummaryEntry repliedTo (optional) the comment replied to
StorySummaryEntry parentPosting (optional) the parent posting of the media
StorySummaryReaction reaction (optional) a reaction
StorySummaryReaction[] reactions (optional) list of reactions
int totalReactions (optional) total number of reactions
String feedName (optional) name of a feed
String subscriptionReason (optional) subscription reason (see SubscriptionReason for the list of possible values)
StorySummaryFriendGroup friendGroup (optional) a group of friends
StorySummaryBlocked blocked (optional) summary of blocking a user
StorySummarySheriff sheriff (optional) summary of an action of a sheriff
String description (optional) additional descriptive text

StorySummaryBlocked

Type Name Description
String[] operations list of the operations blocked (see BlockedOperation for the list of possible values)
int period (optional) the period of blocking in seconds

StorySummaryFriendGroup

Type Name Description
String id (optional) ID of the group of friends
String title (optional) title of the group of friends

StorySummaryEntry

Type Name Description
String ownerName (optional) entry owner's name
String ownerFullName (optional) entry owner's full name
String ownerGender (optional) entry owner's gender
String heading (optional) entry heading
String[] sheriffs (optional) list of sheriffs supervising the entry
SheriffMark[] sheriffMarks (optional) list of sheriff marks on the entry

StorySummaryNode

Type Name Description
String ownerName (optional) node owner's name
String ownerFullName (optional) node owner's full name
String ownerGender (optional) node owner's gender

StorySummaryReaction

Type Name Description
String ownerName (optional) reaction owner's name
String ownerFullName (optional) reaction owner's full name
String ownerGender (optional) reaction owner's gender
int emoji (optional) reaction code

StorySummarySheriff

Type Name Description
String sheriffName name of the sheriff
String orderId (optional) ID of the sheriff's order
String complainId (optional) ID of the complaint, if any

SubscriberDescription

Type Name Description
String type subscription type (see SubscriptionType for the list of possible values)
String feedName (optional) feed name, if the subscription type requires one
String postingId (optional) posting ID, if the subscription type requires one
timestamp lastUpdatedAt (optional) timestamp of the latest known state of the object
SubscriberOperations operations (optional) the operations and the corresponding principals
Validation errors:
Code Description
subscriberDescription.type.blank type is empty
subscriberDescription.feedName.blank feed name is empty
subscriberDescription.feedName.not-found feed is not found
subscriberDescription.postingId.blank posting ID is empty
subscriberDescription.postingId.not-found posting is not found
subscriberDescription.ownerAvatar.mediaId.not-found subscriber's avatar is not found
subscriberDescription.operations.wrong-principal principal for one of operations is invalid

SubscriberInfo

Type Name Description
String id subscriber ID
String type subscription type (see SubscriptionType for the list of possible values)
String feedName (optional) feed name, if the subscription type requires one
String postingId (optional) posting ID, if the subscription type requires one
String nodeName name of the subscribed node
ContactInfo contact (optional) information known about the subscribed node
timestamp createdAt subscription creation timestamp
SubscriberOperations operations (optional) the supported operations and the corresponding principals
SubscriberOperations ownerOperations (optional) the supported operations and the corresponding principals as defined by the subscriber
SubscriberOperations adminOperations (optional) the operations and the corresponding principals that are overridden by the node administrator

SubscriberOverride

Type Name Description
SubscriberOperations operations (optional) the supported operations and the corresponding principals
SubscriberOperations adminOperations (optional) the operations and the corresponding principals that are overridden by the node administrator
Validation errors:
Code Description
subscriberOverride.operations.wrong-principal principal for one of operations is invalid
subscriberOverride.adminOperations.wrong-principal principal for one of admin operations is invalid

SubscriptionDescription

Type Name Description
String type subscription type (see SubscriptionType for the list of possible values)
String feedName (optional) feed name on this node that receives notifications
String remoteNodeName name of the node this node is subscribed to
String remoteFeedName (optional) feed name on the remote node, if the subscription type requires one
String remotePostingId (optional) posting ID on the remote node, if the subscription type requires one
String reason (optional) subscription reason (see SubscriptionReason for the list of possible values)
SubscriptionOperations operations (optional) the operations and the corresponding principals
Validation errors:
Code Description
subscriptionDescription.type.blank type is empty
subscriptionDescription.feedName.blank feed name is empty
subscriptionDescription.feedName.not-found feed is not found
subscriptionDescription.remoteSubscriberId.blank subscriber ID is empty
subscriptionDescription.remoteSubscriberId.wrong-size subscriber ID is too long
subscriptionDescription.remoteNodeName.blank node name is empty
subscriptionDescription.remoteNodeName.wrong-size node name is too long
subscriptionDescription.remoteAvatar.mediaId.not-found node avatar is not found
subscriptionDescription.remoteFeedName.wrong-size remote feed name is too long
subscriptionDescription.remotePostingId.wrong-size posting ID is too long
subscriptionDescription.reason.blank subscription reason is empty
subscriptionDescription.operations.wrong-principal principal for one of operations is invalid

SubscriptionFilter

Type Name Description
String type (optional) subscription type (see SubscriptionType for the list of possible values)
RemoteFeed[] feeds (optional) list of feeds
RemotePosting[] postings (optional) list of postings

SubscriptionInfo

Type Name Description
String id subscription ID
String type subscription type (see SubscriptionType for the list of possible values)
String feedName (optional) feed name on this node that receives notifications
String remoteNodeName name of the node this node is subscribed to
ContactInfo contact (optional) information known about the remote node
String remoteFeedName (optional) feed name on the remote node, if the subscription type requires one
String remotePostingId (optional) posting ID on the remote node, if the subscription type requires one
timestamp createdAt subscription creation timestamp
String reason subscription reason (see SubscriptionReason for the list of possible values)
SubscriptionOperations operations (optional) the supported operations and the corresponding principals

SubscriptionOverride

Type Name Description
SubscriptionOperations operations (optional) the supported operations and the corresponding principals
Validation errors:
Code Description
subscriptionOverride.operations.wrong-principal principal for one of operations is invalid

TokenAttributes

Type Name Description
String login
String password
int authCategory (optional) A bit mask describing which permissions should be granted to the token. If not set, all permissions of the administrator are granted. The bits have the following meaning:
  • other (0x0001) - any other permission not listed below;
  • view-media (0x0002) - view media files.
String name (optional) a user-readable name of the token
Validation errors:
Code Description
tokenAttributes.login.blank the login is empty
tokenAttributes.password.blank the password is empty

TokenInfo

Type Name Description
String id token ID (this is not the token, just an ID)
String token the token
String name (optional) a user-readable name of the token
String[] permissions (optional) The list of permissions granted to the token. The values are:
  • other - any other permission not listed below;
  • view-media - view media files.
String pluginName (optional) a plugin the token belongs to; if set, only this plugin may use the token
timestamp createdAt token creation timestamp
timestamp deadline (optional) timestamp of the end of the token's life
timestamp lastUsedAt (optional) timestamp of the last time the token was used
String lastUsedBrowser (optional) name of the browser used by the latest user of the token
String lastUsedIp (optional) IP address of the latest user of the token

TokenName

Type Name Description
String name (optional) a user-readable name of the token

UpdateInfo

Type Name Description
boolean important (optional) true, if the update is important, false (the default) otherwise
String description (optional) description of the update

UserListInfo

Type Name Description
String name name of the user list
int total number of items in the user list

UserListItemAttributes

Type Name Description
String nodeName the name of the node
Validation errors:
Code Description
userListItemAttributes.nodeName.blank node name is empty
userListItemAttributes.nodeName.wrong-size node name is too long

UserListItemInfo

Type Name Description
String nodeName the name of the node
timestamp createdAt the node addition timestamp - the real time when the node was added to the list
int moment moment of the node

UserListSliceInfo

Type Name Description
String listName the name of the list
int before the slice contains all items before this moment, inclusive. May be the far future.
int after the slice contains all items after this moment, exclusive. May be the far past.
UserListItemInfo[] items the items
int total total number of items
int totalInPast number of items before this slice till the far past
int totalInFuture number of items after this slice till the far future

WhoAmI

Type Name Description
String nodeName (optional)
boolean nodeNameChanging (optional) true if node name is about to be changed
String fullName (optional) node owner's full name
String gender (optional) node owner's gender
String title (optional) node title
AvatarImage avatar (optional) node owner's avatar


Operations

Read more about operations

CommentOperations

Name Default Description
view public view the comment
edit owner edit the comment
delete private delete the comment
viewReactions public view the comment's reactions
viewNegativeReactions public view the comment's negative reactions
viewReactionTotals public view the number of the comment's reactions
viewNegativeReactionTotals public view the number of the comment's negative reactions
viewReactionRatios public view the relative number of different types of the comment's reactions
viewNegativeReactionRatios public view the relative number of different types of the comment's negative reactions
addReaction signed add a reaction to the comment
addNegativeReaction signed add a negative reaction to the comment

ContactOperations

Name Default Description
viewFeedSubscriber public see the subscriber information
viewFeedSubscription public see the subscription information
viewFriend public see the friend information
viewFriendOf public see the friend-of information (this operation can be modified by admin only)
viewBlock public see the blocking information (this operation can be modified by admin only)
viewBlockBy public see the blocked-by information (this operation can be modified by admin only)

FeedOperations

Name Default Description
add add stories to the feed

FriendOperations

Name Default Description
view public view the membership of the node in the group of friends

FriendGroupOperations

Name Default Description
view public view the group of friends

NodeNameOperations

Name Default Description
manage any modification of the node name, prolonging it etc.

PeopleOperations

Name Default Description
viewSubscribers public view the list of subscribers
viewSubscriptions public view the list of subscriptions
viewFriends public view the list of friends
viewFriendOfs public view the list of those who added this node to friends
viewBlocked public view the list of blocked nodes
viewBlockedBy admin view the list of those who blocked this node
viewSubscribersTotal public view the number of subscribers
viewSubscriptionsTotal public view the number of subscriptions
viewFriendsTotal public view the number of friends
viewFriendOfsTotal public view the number of those who added this node to friends

PostingOperations

Name Default Description
view public view the posting
edit owner edit the posting
delete private delete the posting
viewComments public view the posting's comments
addComment signed add a comment to the posting
overrideComment owner override the permissions of the posting's comments
viewReactions public view the posting's reactions
viewNegativeReactions public view the posting's negative reactions
viewReactionTotals public view the number of the posting's reactions
viewNegativeReactionTotals public view the number of the posting's negative reactions
viewReactionRatios public view the relative number of different types of the posting's reactions
viewNegativeReactionRatios public view the relative number of different types of the posting's negative reactions
addReaction signed add a reaction to the posting
addNegativeReaction signed add a negative reaction to the posting
overrideReaction owner override the permissions of the posting's reactions
overrideCommentReaction owner override the permissions of the posting's comment's reactions

PrivateMediaFileOperations

Name Default Description
view public view the media file

ProfileOperations

Name Default Description
edit change the profile
viewEmail view the e-mail address in the profile

ReactionOperations

Name Default Description
view public view the reaction
delete private delete the reaction

StoryOperations

Name Default Description
edit admin update the story
delete admin delete the story

SubscriberOperations

Name Default Description
view public see the subscriber
delete private delete the subscriber (this operation cannot be modified or overridden)

SubscriptionOperations

Name Default Description
view public see the subscription
delete admin delete the subscription (this operation cannot be modified or overridden)


Enums

AskSubject

Value Description
subscribe "subscribe to me" - asking remote node to subscribe to this node
friend "add me to your friends" - asking remote node to add this node to friends

BlockedEntryOperation

Value Description
addComment add a comment
addReaction add a reaction

BlockedOperation

Value Description
reaction add reactions to entries on the node
comment add comments to postings on the node
posting add postings to the node
visibility be visible to the node
instant be visible in stories added to the instants feed of the node

BodyFormat

Value Description
message Body structure
application an application-specific structure

DraftType

Value Description
new-posting draft of a new posting
posting-update draft of an update to a posting
new-comment draft of a new comment
comment-update draft of an update to a comment

OperationStatus

Value Description
waiting the operation is waiting to be sent to the naming server
added the operation was accepted by the naming server
started the naming server started to proceed the operation
succeeded the operation completed successfully
failed the operation failed
unknown the operation status is unknown

PrincipalFlag

Value Description
none
private
admin
owner
secret
senior
enigma
major
signed
subscribed
public
friends
unset

PushContentType

Value Description
story-added a story was added to a feed
story-deleted a story was deleted from a feed
feed-updated feed status was updated

PushRelayType

Value Description
fcm Google Firebase Cloud Messaging (FCM) relay

SettingType

Value Description
bool boolean, may have value true or false
int integer
string string
json string representation of a JSON structure
Duration period of time, an non-negative integer followed by a single character designating a measurement unit:
  • s - seconds;
  • m - minutes;
  • h - hours;
  • d - days.
PrivateKey a private cryptographic key
PublicKey a public cryptographic key
Timestamp timestamp
UUID UUID
Principal principal

SheriffComplainStatus

Value Description
posted the group is just added
prepared automatic preprocessing is done
prepare-failed automatic preprocessing is failed
not-found the entry the group is related to is not found
invalid-target the entry the group is related to is specified incorrectly
not-original the posting the group is related to is a copy of the original posting
not-sheriff the entry the group is related to is not under supervision of the sheriff
approved the group is approved by the sheriff
rejected the group is rejected by the sheriff

SheriffOrderCategory

Value Description
visibility hide the feed or the entry

SheriffOrderReason

Value Description
unlawful violation of a law
defamatory defamatory content
threat contains a threat against a person
spam spam
scam fraudulent content
malware distribution of a malware
copyright copyright infringement
impersonating the author pretends to be someone else
privacy violation of someone's privacy
other any other reason

SourceFormat

Value Description
plain-text plain text with newlines and paragraphs delimited by empty line
html HTML-formatted text, the node may allow only limited set of tags
markdown text in Markdown format
application application-specific format

StoryType

Value Description
asked-to-friend a remote node asked to add it to friends
asked-to-subscribe a remote node asked to subscribe to it
blocked-user a remote node has blocked the user globally
blocked-user-in-posting a remote node has blocked the user in a posting
comment-added a comment was added under the user's posting
comment-media-reaction-added-negative a positive reaction was added to a media attached to a comment
comment-media-reaction-added-positive a positive reaction was added to a media attached to a comment
comment-media-reaction-failed a failed attempt to add a reaction to a media attached to a comment
comment-post-task-failed a failed attempt to post a comment
comment-reaction-added-negative a negative reaction was added to the user's comment
comment-reaction-added-positive a positive reaction was added to the user's comment
comment-reaction-task-failed a failed attempt to post a reaction to a comment
comment-update-task-failed a failed attempt to update a comment
friend-added a remote node has added the user to friends
friend-deleted a remote node has removed the user from friends
friend-group-deleted a remote group of friends, the user was a member of, has been deleted
mention-comment the user was mentioned in a comment
mention-posting the user was mentioned in a posting on another node
posting-added a posting was added; **stories of this type are used for feeds containing postings**
posting-media-reaction-added-negative a negative reaction was added to a media attached to a posting
posting-media-reaction-added-positive a positive reaction was added to a media attached to a posting
posting-media-reaction-failed a failed attempt to add a reaction to a media attached to a posting
posting-post-task-failed a failed attempt to create a posting
posting-reaction-task-failed a failed attempt to post a reaction to a posting
posting-subscribe-task-failed a failed attempt to subscribe to a posting
posting-update-task-failed a failed attempt to update a posting
posting-updated a posting was updated
reaction-added-negative a negative reaction was added to the user's posting
reaction-added-positive a positive reaction was added to the user's posting
remote-comment-added a comment was added under a posting the user is subscribed to
reply-comment a reply was added to the user's comment
sheriff-complain-added a new complaint was received
sheriff-complain-decided a decision was made on the user's complaint
sheriff-marked user's entry was marked by a sheriff
sheriff-unmarked user's entry was unmarked by a sheriff
subscriber-added another node subscribed to user's feed
subscriber-deleted another node unsubscribed from user's feed
unblocked-user a remote node has unblocked the user globally
unblocked-user-in-posting a remote node has unblocked the user in a posting

SubscriptionReason

Value Description
user node owner asked to subscribe
mention node name was mentioned
comment node owner commented the posting

SubscriptionType

Value Description
feed subscribe to new stories in the feed
posting subscribe to updates to the posting
posting-comments subscribe to new comments to the posting
profile subscribe to updates to the node profile
user-list subscribe to updates to the user list (its name is passed in feedName field)

VerificationStatus

Value Description
running the verification is pending
correct the signature is correct
incorrect the signature is incorrect
error the verification cannot be performed due to an error


HTTP status codes

Code Description
200 No error.
201 Object created successfully. The object location is provided in Location: header.
400 Validation of the request body failed.
401 Invalid authentication token or root secret.
403 Authentication required, but not provided.
404 Unrecognized request or object not found.
405 Method not allowed.
409 Operation failed.
500 The node configured incorrectly or a bug in the node software; naming service not available.