Top
| Field | Type | Label | Description |
|---|
| app_id | string | required | ID of application |
| metadata | bytes | optional | Metadata |
| raw_action | bytes | optional | Raw metadata of wrapped action |
| signature | bytes | optional | Signature over app commitment |
| Field | Type | Label | Description |
|---|
| video_id | string | optional | YouTube video ID |
| Name | Number | Description |
|---|
| CREATE_VIDEO | 0 | |
| CREATE_CHANNEL | 1 | |
| Name | Number | Description |
|---|
| CHANNEL | 0 | |
| MEMBER | 1 | |
| CURATOR_GROUP | 2 | |
Top
| Field | Type | Label | Description |
|---|
| title | string | optional | Bounty title |
| description | string | optional | Bounty description |
| discussionThread | uint64 | optional | Id of the forum thread used to discuss the bounty |
| banner_image_uri | string | optional | Image uri of the bounty's banner |
| Field | Type | Label | Description |
|---|
| title | string | optional | Title of the work |
| description | string | optional | Description which contains the work itself as a URL, a BLOB, or just text |
Top
| Field | Type | Label | Description |
|---|
| title | string | optional | Channel Title |
| description | string | optional | Channel Description |
| is_public | bool | optional | Wether to display channel to the public |
| language | string | optional | ISO_639-1 Language Code |
| cover_photo | uint32 | optional | index into external assets array |
| avatar_photo | uint32 | optional | index into external assets array |
Top
Channel payout full body structure, it will not be downloaded by clients in full
| Field | Type | Label | Description |
|---|
| channel_id | uint32 | required | |
| cumulative_reward_earned | string | required | Since protobuf does not support 128 bit unsigned inetgers so string representation is being used here, after message decoding the string would be converted to BN to pervent precision loss |
| merkle_branch | ChannelPayoutsMetadata.Body.ChannelPayoutProof.ProofElement | repeated | |
| reason | string | required | reward rationale for channel; |
Fields in the payload header are encoded in fixed length 32/64 bits instead of varint encoding (uint64/32).
This allows first calculating, and then setting the byte offset of each ChannelPayoutProof accurately, e.g.
byte_offset = size(Header) + position_where_record_for_channel_exists_in_Body
If varint encoding is used for header fields, then calculating the byte offset of ChannelPayoutProof
w.r.t the start of the payload would be improbable since the header size won't be known.
| Field | Type | Label | Description |
|---|
| channel_id | fixed32 | required | Channel id |
| byte_offset | fixed64 | required | Byte offset from start of payload where payout record for given channel Id exists |
| Name | Number | Description |
|---|
| Left | 0 | |
| Right | 1 | |
Top
| Field | Type | Label | Description |
|---|
| header | string | optional | Candidacy header text |
| bullet_points | string | repeated | Candidate program in form of bullet points |
| banner_image_uri | string | optional | Image uri of candidate's banner |
| description | string | optional | Candidacy description (md-formatted) |
Top
| Field | Type | Label | Description |
|---|
| text | string | optional | Post text content (md-formatted) |
| repliesTo | uint32 | optional | Id of the post that given post replies to (if any) |
| Field | Type | Label | Description |
|---|
| title | string | optional | Thread title |
| tags | string | repeated | Tags accociated with the thread. Any update overrides all current tags. Only the first {MAX_TAGS_PER_FORUM_THREAD} (const exposed via @joystream/metadata-protobuf/consts) tags are taken into account. In order to unset current tags, [''] (array with empty string) must be provided as value. |
Top
| Name | Number | Description |
|---|
| EMAIL | 0 | |
| HYPERLINK | 1 | |
| TWITTER | 2 | |
| TELEGRAM | 3 | |
| DISCORD | 4 | |
| FACEBOOK | 5 | |
| YOUTUBE | 6 | |
| MATRIX | 7 | |
| IRC | 8 | |
| WECHAT | 9 | |
| WHATSAPP | 10 | |
| LINKEDIN | 11 | |
| GITHUB | 12 | |
Top
| Field | Type | Label | Description |
|---|
| website_url | string | optional | Url where user can read more about the project or company for this app |
| use_uri | string | optional | Url to the app |
| small_icon | string | optional | |
| medium_icon | string | optional | |
| big_icon | string | optional | |
| one_liner | string | optional | Tagline for the app |
| description | string | optional | |
| terms_of_service | string | optional | |
| auth_key | string | optional | |
| platforms | string | repeated | List of platforms on which the app will be available, e.g. [mobile, web, native] |
| category | string | optional | E.g messaging, adult |
| Field | Type | Label | Description |
|---|
| member_id | uint64 | required | ID of the member that channel owner wants to ban from participating on any video. |
| option | BanOrUnbanMemberFromChannel.Option | required | Selected option to ban or unban member from the channel |
create comment
| Field | Type | Label | Description |
|---|
| video_id | uint64 | required | ID of the video |
| parent_comment_id | string | optional | ID of comment member wants to reply (empty if new comment is parent comment) |
| body | string | required | Comment text |
| Field | Type | Label | Description |
|---|
| name | string | required | |
| description | string | optional | |
| parent_category_id | string | optional | |
delete comment by author
| Field | Type | Label | Description |
|---|
| comment_id | string | required | ID of the comment which will be deleted |
edit comment by author
| Field | Type | Label | Description |
|---|
| comment_id | string | required | ID of the comment whose text is being edited |
| new_body | string | required | New comment body |
| Field | Type | Label | Description |
|---|
| rationale | string | optional | Reason why payment is being made |
| video_id | uint64 | optional | Other possible contexts, e.g. playlist etc. |
delete comment by moderator or channel owner;
| Field | Type | Label | Description |
|---|
| comment_id | string | required | ID of comment that will be deleted by moderator |
| rationale | string | required | why moderator wants to delete this comment |
pin comment on a video by channel owner
| Field | Type | Label | Description |
|---|
| video_id | uint64 | required | ID of the video |
| comment_id | string | required | ID of the comment which will be pinned |
| option | PinOrUnpinComment.Option | required | Selected option to pin or unpin comment from channel |
reacting, unreacting to a comment
| Field | Type | Label | Description |
|---|
| comment_id | string | required | ID of the comment to react |
| reaction_id | uint32 | required | ID of the selected reaction |
reacting, unreacting, and changing reaction to video
Enable or disable reactions on a single video
| Name | Number | Description |
|---|
| BAN | 0 | Ban member (nothing happens if member is already banned) |
| UNBAN | 1 | Unban member (nothing happens if member is already unbanned) |
| Name | Number | Description |
|---|
| PIN | 0 | Pin comment on video (nothing happens if comment is already pinned) |
| UNPIN | 1 | Unpin comment from video (nothing happens if comment is already unpinned) |
The enum must be wrapped inside "message", otherwide it breaks protobufjs
Reacting again with the same message option will cancel the previous reaction
| Name | Number | Description |
|---|
| LIKE | 0 | |
| UNLIKE | 1 | |
| Name | Number | Description |
|---|
| ENABLE | 0 | Enable reactions (nothing happens if they are already enabled) |
| DISABLE | 1 | Disable reactions (nothing happens if they are already disabled) |
Top
Top
| Field | Type | Label | Description |
|---|
| text | string | optional | Post text content (md-formatted) |
| repliesTo | uint32 | optional | Id of the post that given post replies to (if any) |
Top
| Field | Type | Label | Description |
|---|
| title | string | optional | |
| description | string | optional | |
| cover_photo | uint32 | optional | index into external assets array |
| persons | uint64 | repeated | Person(s) referenced by PersonId involved in this Season |
| Field | Type | Label | Description |
|---|
| title | string | optional | |
| description | string | optional | |
| cover_photo | uint32 | optional | index into external assets array |
| persons | uint64 | repeated | Person(s) referenced by PersonId involved in this Series |
Top
| Field | Type | Label | Description |
|---|
| region | string | optional | ID / name of the region covered by the distribution family (ie. us-east-1). Should be unique. |
| description | string | optional | Additional, more specific description of the region |
| areas | GeographicalArea | repeated | Standarized geographical areas covered by the family (providing [{}] will unset the current value) |
| latency_test_targets | string | repeated | List of targets (hosts/ips) best suited latency measurements for this family |
| Field | Type | Label | Description |
|---|
| latitude | float | optional | |
| longitude | float | optional | |
| Field | Type | Label | Description |
|---|
| country_code | string | optional | ISO 3166-1 alpha-2 country code (2 letters) |
| city | string | optional | City name |
| coordinates | GeoCoordiantes | optional | Geographic coordinates (providing {} will unset current value) |
| Field | Type | Label | Description |
|---|
| endpoint | string | optional | Root storage node endpoint (ie. https://example.com/storage) |
| location | NodeLocationMetadata | optional | Information about node's phisical location (providing {} will unset current value) |
| extra | string | optional | Additional information about the node / node operator |
| Name | Number | Description |
|---|
| AF | 1 | |
| NA | 2 | |
| OC | 3 | |
| AN | 4 | |
| AS | 5 | |
| EU | 6 | |
| SA | 7 | |
Top
| Field | Type | Label | Description |
|---|
| terms_and_conditions | string | optional | |
| Field | Type | Label | Description |
|---|
| name | string | optional | Title |
| symbol | string | optional | Symbol |
| description | string | optional | token description |
| avatar_object | uint32 | optional | avatar for token - index into external assets array |
| avatar_uri | string | optional | Url to member's avatar |
| benefits | Benefit | repeated | benefits for tokne |
| whitelist_application_note | string | optional | note for applicant |
| whitelist_application_apply_link | string | optional | link to application process |
| trailer_video_id | uint64 | optional | runtime id for video trailer |
Top
| Field | Type | Label | Description |
|---|
| video_metadata | VideoMetadata | optional | ... Other possible metadata standards, e.g. PlaylistMetadata |
License types defined by Joystream
| Field | Type | Label | Description |
|---|
| code | uint32 | optional | License code defined by Joystream. reference |
| attribution | string | optional | Text for licenses that require an attribution |
| custom_text | string | optional | Text for custom license type |
Codec, Container, MIME media-type information
| Field | Type | Label | Description |
|---|
| codec_name | string | optional | Codec corresponding to name field from FFmpeg |
| container | string | optional | Video container format, eg. 'MP4', 'WebM', 'Ogg' ref |
| mime_media_type | string | optional | MIME Media Type, eg. 'video/mp4' ref |
Publication status before joystream
| Field | Type | Label | Description |
|---|
| is_published | bool | optional | Was video published before joystream platform |
| date | string | optional | Date of publication: 'YYYY-MM-DD' ISO-8601 |
| Field | Type | Label | Description |
|---|
| title | string | optional | Video Title |
| description | string | optional | Video Description |
| video | uint32 | optional | index into external assets array |
| thumbnail_photo | uint32 | optional | index into external assets array |
| duration | uint32 | optional | Lengths of video in seconds |
| media_pixel_height | uint32 | optional | Resolution of the video (Height) |
| media_pixel_width | uint32 | optional | Resolution of the video (Width) |
| media_type | MediaType | optional | Encoding and Container format used |
| language | string | optional | ISO_639-1 Language Code |
| license | License | optional | License type for the media |
| published_before_joystream | PublishedBeforeJoystream | optional | Date of publication |
| has_marketing | bool | optional | Does video have marketing or advertising in the stream |
| is_public | bool | optional | Should video be publicy visible yet |
| is_explicit | bool | optional | Does Video have explicit language or scenes |
| persons | uint64 | repeated | Person(s) referenced by PersonId involved in this video |
| category | string | optional | Video Category Id |
| subtitles | SubtitleMetadata | repeated | Video subtitles |
| enable_comments | bool | optional | Enable/Disable the comment section |
| clear_subtitles | bool | optional | Remove all subtitles; since protobuf doesn't distinguish b/w empty array and null field, simply removing all subtitles by overriding list with an empty array wont work |
| is_short | bool | optional | Is video a short format, vertical video (e.g. Youtube Shorts, TikTok, Instagram Reels) |
Top
| Field | Type | Label | Description |
|---|
| answers | string | repeated | List of answers to opening application form questions |
| Field | Type | Label | Description |
|---|
| post_id | uint64 | required | |
| rationale | string | required | |
| Field | Type | Label | Description |
|---|
| short_description | string | optional | Short description of the opening |
| description | string | optional | Full description of the opening |
| hiring_limit | uint32 | optional | Expected number of hired applicants |
| expected_ending_timestamp | uint32 | optional | Expected time when the opening will close (Unix timestamp) |
| application_details | string | optional | Md-formatted text explaining the application process |
| application_form_questions | OpeningMetadata.ApplicationFormQuestion | repeated | List of questions that should be answered during application |
| title | string | optional | |
| Field | Type | Label | Description |
|---|
| id | string | optional | Upcoming opening query-node id |
| Field | Type | Label | Description |
|---|
| new_metadata | WorkingGroupMetadata | optional | New working group metadata to set (can be a partial update) |
| Field | Type | Label | Description |
|---|
| expected_start | uint32 | optional | Expected opening start (timestamp) |
| reward_per_block | uint64 | optional | Expected reward per block |
| min_application_stake | uint64 | optional | Expected min. application stake |
| metadata | OpeningMetadata | optional | Opening metadata |
| Field | Type | Label | Description |
|---|
| member_id | uint64 | required | |
| is_verified | bool | required | |
| Field | Type | Label | Description |
|---|
| description | string | optional | Group description text (md-formatted) |
| about | string | optional | Group about text (md-formatted) |
| status | string | optional | Current group status (expected to be 1-3 words) |
| status_message | string | optional | Short status message associated with the status |
| Name | Number | Description |
|---|
| TEXTAREA | 0 | |
| TEXT | 1 | |
| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |
|---|
| double | | double | double | float | float64 | double | float | Float |
| float | | float | float | float | float32 | float | float | Float |
| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) |
| uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) |
| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 228. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) |
| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 256. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum |
| sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| bool | | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass |
| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) |
| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |
Applications that process messages that contain a uint32 field that references an asset such as a cover photo or video, should interpret this value as a zero based index into an array/vector that is received external (out of band) to the protobuf message.
Example in context of query-node processing the runtime event VideoCreated
// Runtime event associated with creating a Video
VideoCreated(video_id: VideoId, video: Video, assets: Vec<NewAsset>, params: VideoCreationParameters)
struct VideoCreationParameters {
in_category: VideoCategoryId,
// binary serialized VideoMetadata protobuf message
meta: Vec<u8>,
}
// suppose assets is a vector of two elements. This is the "out of band" array being referenced by the VideoMetadata message
assets = [
NewAsset::Uri("https://mydomain.net/thumbnail.png"),
NewAsset::Upload({
content_id,
ipfs_hash,
size,
...
}),
];
meta = VideoMetadata {
...
// refers to second element: assets[1] which is being uploaded to the storage system
video: 1,
// refers to the first element assets[0] which is being referneced by a url string.
thumbnail_photo: 0,
...
};