From 7188c0039793969417b4be912615125658f69377 Mon Sep 17 00:00:00 2001 From: Diogo Cordeiro Date: Mon, 23 Jul 2018 22:57:39 +0100 Subject: [PATCH] Start of a new documentation --- README.md | 253 -------------- index.html | 24 ++ objects_and_activities.md | 101 ++++++ openapi.json | 673 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 798 insertions(+), 253 deletions(-) delete mode 100644 README.md create mode 100755 index.html create mode 100644 objects_and_activities.md create mode 100755 openapi.json diff --git a/README.md b/README.md deleted file mode 100644 index b38d97f..0000000 --- a/README.md +++ /dev/null @@ -1,253 +0,0 @@ -ActivityPub Plugin for GNU Social Doc -===================================== - -## Contents - -- [Methods](#methods) - - [Followers Collection](#followers-collection) - - [Following Collection](#following-collection) - - [Inbox](#inbox) - - [Inbox Create](#inbox-create) - - [Liked Collection](#liked-collection) - - [Profiles](#profiles) -- [Entities](#entities) - - [Attachment](#attachment) - - [Error](#error) - - [Image](#image) - - [Notice](#notice) - - [Profile](#profile) - - [Tag](#tag) - -###### Retrieving objects - -The HTTP GET method may be dereferenced against an object's `id` property to retrieve the activity. -The plugin supports HTTP content negotiation as defined in [RFC7231](https://tools.ietf.org/html/rfc7231) in every endpoint suffixed with .json . -The plugin always presents ActivityStreams object representation in response to every request. -The client MUST specify an `Accept` header with the `application/ld+json; profile="https://www.w3.org/ns/activitystreams"` media type in order to retrieve the activity. - -###### Selecting ranges - -For most `GET` operations that return arrays, the query parameters `max_id` and `since_id` can be used to specify the range of IDs to return. -API methods that return collections of items can return a `Link` header containing URLs for the `next` and `prev` pages. -See the [Link header RFC](https://tools.ietf.org/html/rfc5988) for more information. - -###### Pretty output - -For most operations if the `pretty` parameter is set a formated output will be generated (useful for learning about the API or debuging purposes). - -###### Errors - -If the request you make doesn't go through, the plugin will usually respond with an [Error](#error). - -___ - -> **Note:** Some attributes in the payload can have ``null`` value and are marked as _nullable_ on the tables below. Attributes that are not nullable are guaranteed to return a valid value. - -## Methods - -### Followers Collection - -#### Getting an Actor's Followers Collection - - GET :nickname/followers.json - -Query parameters: - -| Field | Description | Optional | Type | -| ----------- | ------------------------- | ---------- | ---------- | -| `page` | Page index (starts in 1) | no | int32 | - -Return: - -| Field | Description | Nullable | Type | -| --------------- | ---------------------------- | -------- | ----------------- | -| `id` | URL of the current endpoint | no | string | -| `type` | OrderedCollectionPage | no | string | -| `totalItems` | Total number of followers | no | int32 | -| `prev` | Previous page URL | yes | string | -| `next` | Next page URL | yes | string | -| `orderedItems` | The URL of each profile | no | Array of strings | - -### Following Collection - -#### Getting an Actor's Following Collection - - GET :nickname/following.json - -Query parameters: - -| Field | Description | Optional | Type | -| ----------- | ------------------------- | ---------- | ---------- | -| `page` | Page index (starts in 1) | no | int32 | - -Return: - -| Field | Description | Nullable | Type | -| --------------- | ------------------------------------ | -------- | ----------------- | -| `id` | URL for current endpoint | no | string | -| `type` | OrderedCollectionPage | no | string | -| `totalItems` | Number of persons the actor follows | no | int32 | -| `prev` | Previous page URL | yes | string | -| `next` | Next page URL | yes | string | -| `orderedItems` | The URL of each profile | no | Array of strings | - -### Inbox - -#### Inbox Create - - POST :nickname/inbox.json - -Query parameters: - -| Field | Description | Optional | Type | -| --------------- | ---------------------------------------------------- | ---------- | ---------- | -| `@context` | Standard compliance | no | string | -| `id` | URL of Actor's object | no | string | -| `type` | https://www.w3.org/ns/activitystreams | no | string | -| `actor` | Actor's URL | no | string | -| `object` | Entity | no | int32 | - -##### Example -###### Request: - - POST https://actor_instance.localhost/nickname/inbox.json - { - "@context": "https://www.w3.org/ns/activitystreams", - "id": "https://actor_instance.com/create-hello-world", - "type": "Create", - "actor": "https://actor_instance.localhost/nickname", - "object": { - "type": "Note", - "reply_to": "http://remote_instance/notice/1337", - "content": "hello, world.", - "to": "https://www.w3.org/ns/activitystreams#Public" - } - } - -###### Return: - - { - "@context": "https://www.w3.org/ns/activitystreams", - "id": "https://actor_instance.com/create-hello-world", - "type": "Create", - "actor": "https://actor_instance.localhost/nickname", - "object": { - "type": "Note", - "reply_to": "http://remote_instance/notice/1337", - "content": "hello, world.", - "to": "https://www.w3.org/ns/activitystreams#Public" - } - } - -### Liked Collection - -#### Getting an Actor's Liked Collection - - GET :nickname/liked.json - -Query parameters: - -| Field | Description | Optional | Type | -| ----------- | ---------------------------------------------------- | ---------- | ---------- | -| `max_id` | Get a list of likes with ID less than this value | yes | int32 | -| `since_id` | Get a list of likes with ID greater than this value | yes | int32 | -| `limit` | Maximum number of likes to get (Default 40, Max 80) | yes | int32 | - -Return: - -| Field | Description | Nullable | Type | -| --------------- | ---------------------------- | -------- | ---------------------------- | -| `id` | URL for current endpoint | no | string | -| `type` | OrderedCollection | no | string | -| `totalItems` | Total number of favorites | no | int32 | -| `orderedItems` | Array of [Notices](#notice) | no | Array of [Notices](#notice) | - -### Profiles - -#### Fetching an Actor's profile - - GET :nickname - -Returns a [Profile](#profile). - -___ - -## Entities - -### Attachment - -| Attribute | Description | Nullable | Type | -| ------------------------ | ----------------------------------------------- | -------- | ------- | -| `id` | ID of the attachment | no | int32 | -| `mimetype` | Mimetype | no | string | -| `url` | URL of the locally hosted version of the image | no | string | -| `meta` | See **attachment metadata** below | yes | Array | -| `title` | Attachment title | no | string | - -**Attachment metadata:** - -Images may contain `width`, `height`, `size`. - -### Error - -The most important part of an error response is the HTTP status code. Standard semantics are followed. The body of an error is a JSON object with this structure: - -| Attribute | Description | Nullable | Type | -| ------------------------ | ----------------------------------- | -------- | ------- | -| `error` | A textual description of the error | no | string | - -### Image - -| Attribute | Description | Nullable | Type | -| ------------------------ | --------------- | -------- | ------- | -| `type` | "Image" | no | string | -| `width` | Image's width | no | int32 | -| `height` | Image's height | no | int32 | -| `url` | Image URL | no | string | - -### Notice - -| Attribute | Description | Nullable | Type | -| ------------------------ | ------------------------------------------------- | -------- | ------------------------------------ | -| `id` | Notice's URL | no | string | -| `type` | Notice's Type | no | string | -| `actor` | URL of Notice owner profile page (can be remote) | no | string | -| `published` | DateTime of notice creation | no | datetime | -| `to` | To | no | string | -| `cc` | CC | no | string | -| `content` | Notice's Content in plain text | no | string | -| `url` | Notice's URL | no | string | -| `reply_to` | ID of the notice this replies | yes | int32 | -| `is_local` | Boolean, true if local, false otherwise | no | bool | -| `conversation` | Notice conversation id | no | int32 | -| `attachment` | Array of [Attachments](#attachment) | no | Array of [Attachments](#attachment) | -| `tag` | Array of [Tags](#tag) | no | Array of [Tags](#tag) | - -### Profile - -| Attribute | Description | Nullable | Type | -| ------------------------ | ------------------------------------------------ | -------- | ---------------- | -| `@context` | Standard compliance | no | string | -| `id` | Actor's id | no | int32 | -| `type` | "Person" | no | string | -| `nickname` | Actor's nickname | no | string | -| `is_local` | True if local, false otherwise | no | bool | -| `inbox` | URL to Actor's inbox endpoint | no | string | -| `outbox` | URL to Actor's outbox endpoint | no | string | -| `display_name` | The Actor's display name | no | string | -| `followers` | URL to Actor's followers endpoint | no | string | -| `followers_count` | Total number of followers | no | int32 | -| `following` | URL to Actor's following endpoint | no | string | -| `following_count` | Total number of following | no | int32 | -| `liked` | URL to Actor's Liked collection endpoint | no | string | -| `liked_count` | Total number of favorites | no | int32 | -| `summary` | Actor's biography | no | string | -| `url` | URL of the Actor's profile page (can be remote) | no | string | -| `avatar` | Actor's avatar | no | [Image](#image) | - -### Tag - -| Attribute | Description | Nullable | Type | -| ------------------------ | -------------------------------------------- | -------- | ---------- | -| `name` | The hashtag, not including the preceding `#` | no | string | -| `url` | The URL of the hashtag | no | string | diff --git a/index.html b/index.html new file mode 100755 index 0000000..75b9157 --- /dev/null +++ b/index.html @@ -0,0 +1,24 @@ + + + + ActivityPub plugin for GNU Social API Documentation + + + + + + + + + + + + + diff --git a/objects_and_activities.md b/objects_and_activities.md new file mode 100644 index 0000000..a48f20f --- /dev/null +++ b/objects_and_activities.md @@ -0,0 +1,101 @@ +ActivityPub Plugin for GNU Social Doc +===================================== + +## Contents + +- [Objects](#entities) + - [Attachment](#attachment) + - [Error](#error) + - [Image](#image) + - [Notice](#notice) + - [Profile](#profile) + - [Tag](#tag) +- [Activities](#activities) + - [Create](#create) + - [Announce](#announce) + - [Delete](#delete) + - [Undo](#undo) + - [Accept](#accept) + - [Reject](#reject) + - [Like](#like) + - [Follow](#follow) + +## Objects + +### Attachment + +| Attribute | Description | Nullable | Type | +| ------------------------ | ----------------------------------------------- | -------- | ------- | +| `id` | ID of the attachment | no | int32 | +| `mimetype` | Mimetype | no | string | +| `url` | URL of the locally hosted version of the image | no | string | +| `meta` | See **attachment metadata** below | yes | Array | +| `title` | Attachment title | no | string | + +**Attachment metadata:** + +Images may contain `width`, `height`, `size`. + +### Error + +The most important part of an error response is the HTTP status code. Standard semantics are followed. The body of an error is a JSON object with this structure: + +| Attribute | Description | Nullable | Type | +| ------------------------ | ----------------------------------- | -------- | ------- | +| `error` | A textual description of the error | no | string | + +### Image + +| Attribute | Description | Nullable | Type | +| ------------------------ | --------------- | -------- | ------- | +| `type` | "Image" | no | string | +| `width` | Image's width | no | int32 | +| `height` | Image's height | no | int32 | +| `url` | Image URL | no | string | + +### Notice + +| Attribute | Description | Nullable | Type | +| ------------------------ | ------------------------------------------------- | -------- | ------------------------------------ | +| `id` | Notice's URL | no | string | +| `type` | Notice's Type | no | string | +| `actor` | URL of Notice owner profile page (can be remote) | no | string | +| `published` | DateTime of notice creation | no | datetime | +| `to` | To | no | string | +| `cc` | CC | no | string | +| `content` | Notice's Content in plain text | no | string | +| `url` | Notice's URL | no | string | +| `reply_to` | ID of the notice this replies | yes | int32 | +| `is_local` | Boolean, true if local, false otherwise | no | bool | +| `conversation` | Notice conversation id | no | int32 | +| `attachment` | Array of [Attachments](#attachment) | no | Array of [Attachments](#attachment) | +| `tag` | Array of [Tags](#tag) | no | Array of [Tags](#tag) | + +### Profile + +| Attribute | Description | Nullable | Type | +| ------------------------ | ------------------------------------------------ | -------- | ---------------- | +| `@context` | Standard compliance | no | string | +| `id` | Actor's id | no | int32 | +| `type` | "Person" | no | string | +| `nickname` | Actor's nickname | no | string | +| `is_local` | True if local, false otherwise | no | bool | +| `inbox` | URL to Actor's inbox endpoint | no | string | +| `outbox` | URL to Actor's outbox endpoint | no | string | +| `display_name` | The Actor's display name | no | string | +| `followers` | URL to Actor's followers endpoint | no | string | +| `followers_count` | Total number of followers | no | int32 | +| `following` | URL to Actor's following endpoint | no | string | +| `following_count` | Total number of following | no | int32 | +| `liked` | URL to Actor's Liked collection endpoint | no | string | +| `liked_count` | Total number of favorites | no | int32 | +| `summary` | Actor's biography | no | string | +| `url` | URL of the Actor's profile page (can be remote) | no | string | +| `avatar` | Actor's avatar | no | [Image](#image) | + +### Tag + +| Attribute | Description | Nullable | Type | +| ------------------------ | -------------------------------------------- | -------- | ---------- | +| `name` | The hashtag, not including the preceding `#` | no | string | +| `url` | The URL of the hashtag | no | string | diff --git a/openapi.json b/openapi.json new file mode 100755 index 0000000..f39d9a3 --- /dev/null +++ b/openapi.json @@ -0,0 +1,673 @@ +{ + "openapi": "3.0.0", + "info": { + "description": "## Retrieving objects\nThe HTTP GET method may be dereferenced against an object's `id` property to retrieve the activity.\nThe plugin supports HTTP content negotiation as defined in [RFC7231](https://tools.ietf.org/html/rfc7231) in every endpoint suffixed with .json .\nThe plugin always presents ActivityStreams object representation in response to every request.\nThe client MUST specify an `Accept` header with the `application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"` media type in order to retrieve the activity.\n\n## Selecting ranges\n\nFor most `GET` operations that return arrays, the query parameters `max_id` and `since_id` can be used to specify the range of IDs to return.\nAPI methods that return collections of items can return a `Link` header containing URLs for the `next` and `prev` pages.\nSee the [Link header RFC](https://tools.ietf.org/html/rfc5988) for more information.\n\n## Pretty output\n\nFor most operations if the `pretty` parameter is set a formated output will be generated (useful for learning about the API or debuging purposes).\n\n## Errors\n\nIf the request you make doesn't go through, the plugin will usually respond with an [Error](#error).\n\n___\n\n> **Note:** Some attributes in the payload can have ``null`` value and are marked as _nullable_ on the tables below. Attributes that are not nullable are guaranteed to return a valid value.", + "version": "1.0.0", + "title": "ActivityPub plugin for GNU Social", + "contact": { + "email": "diogo@fc.up.pt" + }, + "license": { + "name": "AGPLv3", + "url": "https://git.gnu.io/gnu/GS-ActivityPub-plugin/blob/COPYING" + } + }, + "externalDocs": { + "description": "For a complete definition of the objects and activities available click here.", + "url": "https://git.gnu.io/gnu/GS-ActivityPub-plugin/doc/objects_and_activities.md" + }, + "paths": { + "/{nickname}": { + "get": { + "summary": "Fetching an Actor's profile", + "description": "Returns a Profile.", + "responses": { + "200": { + "description": "Returns a Profile", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Profile" + } + } + } + } + } + }, + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/json" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/activity+json" + } + } + ] + } + }, + "/{nickname}/inbox.json": { + "post": { + "summary": "Actor Inbox endpoint", + "description": "Allows the publish of activities with attention to a given Actor", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/json" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/activity+json" + } + } + ], + "responses": { + "200": { + "description": "Returns the same activity it received" + } + } + } + }, + "/{nickname}/liked.json": { + "get": { + "summary": "Liked Collection", + "description": "Getting an Actor's Liked Collection", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/json" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/activity+json" + } + }, + { + "name": "max_id", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + }, + "description": "Get a list of likes with ID less than this value", + "format": "int32" + }, + { + "name": "since_id", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + }, + "description": "Get a list of likes with ID greater than this value" + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": "40" + }, + "description": "Maximum number of likes to get (Max 80)" + } + ], + "responses": { + "200": { + "description": "Returns Actor's Liked Collection", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Liked Collection" + } + } + } + } + } + } + } + }, + "/{nickname}/followers.json": { + "get": { + "summary": "Followers Collection", + "description": "Getting an Actor's Followers Collection", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/json" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/activity+json" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": "1" + }, + "description": "Page index (starts in 1)" + } + ], + "responses": { + "200": { + "description": "Returns Actor's Followers Collection", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Follow Collection" + } + } + } + } + } + } + } + }, + "/{nickname}/following.json": { + "get": { + "summary": "Following Collection", + "description": "Getting an Actor's Following Collection", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/json" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/activity+json" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": "1" + }, + "description": "Page index (starts in 1)" + } + ], + "responses": { + "200": { + "description": "Returns Actor's Following Collection", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Follow Collection" + } + } + } + } + } + } + } + }, + "/inbox.json": { + "post": { + "summary": "SharedInbox endpoint", + "description": "Allows the publish of activities", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/json" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "application/activity+json" + } + } + ], + "responses": { + "200": { + "description": "Returns the same activity it received" + } + } + } + } + }, + "components": { + "schemas": { + "Note": { + "type": "object", + "required": [ + "@context", + "id", + "type", + "actor", + "published", + "to", + "cc", + "content", + "url", + "reply_to", + "is_local", + "conversation", + "attachment", + "tag" + ], + "properties": { + "@context": { + "type": "string", + "value": "https://www.w3.org/ns/activitystreams", + "default": "https://www.w3.org/ns/activitystreams" + }, + "id": { + "description": "Notice's URI", + "type": "string" + }, + "type": { + "description": "Notice's Type", + "type": "string" + }, + "actor": { + "description": "URL of Notice owner profile page (can be remote)", + "type": "string" + }, + "published": { + "description": "DateTime of notice creation", + "type": "string", + "format": "date-time" + }, + "to": { + "description": "To", + "type": "string" + }, + "cc": { + "description": "CC", + "type": "string" + }, + "content": { + "description": "Notice's Content in plain text", + "type": "string" + }, + "url": { + "description": "Notice's URL", + "type": "string" + }, + "reply_to": { + "description": "ID of the notice this replies", + "type": "string" + }, + "is_local": { + "description": "true if local, false otherwise", + "type": "string" + }, + "conversation": { + "description": "Notice conversation id", + "type": "integer", + "format": "int32" + }, + "attachment": { + "description": "Array of Attachments", + "type": "Array of Attachments" + }, + "tag": { + "description": "Array of Tags", + "type": "Array of Tags" + } + }, + "xml": { + "name": "Note" + } + }, + "Image": { + "type": "object", + "required": [ + "@context", + "type", + "width", + "height", + "url" + ], + "properties": { + "@context": { + "type": "string", + "value": "https://www.w3.org/ns/activitystreams", + "default": "https://www.w3.org/ns/activitystreams" + }, + "type": { + "description": "Image", + "type": "string" + }, + "width": { + "description": "Image's width", + "type": "integer", + "format": "int32" + }, + "height": { + "description": "Image's height", + "type": "integer", + "format": "int32" + }, + "url": { + "description": "Image URL", + "type": "string" + } + }, + "xml": { + "name": "Image" + } + }, + "Attachment": { + "type": "object", + "required": [ + "@context", + "id", + "mimetype", + "url", + "title" + ], + "properties": { + "@context": { + "type": "string", + "value": "https://www.w3.org/ns/activitystreams", + "default": "https://www.w3.org/ns/activitystreams" + }, + "id": { + "type": "integer", + "format": "int32", + "description": "Id of the Attachment" + }, + "mimetype": { + "type": "string", + "description": "Mimetype" + }, + "url": { + "type": "string", + "description": "URL of locally hosted version of the attachment" + }, + "meta": { + "type": "array", + "description": "Attachment metadata:\n\nImages may contain *width*, *height*, *size*.", + "items": {} + }, + "title": { + "type": "string", + "description": "Attachment title" + } + }, + "xml": { + "name": "Attachment" + } + }, + "Profile": { + "type": "object", + "required": [ + "@context", + "id", + "nickname", + "is_local", + "inbox", + "outbox", + "display_name", + "followers", + "followers_count", + "following", + "following_count", + "liked", + "liked_count", + "summary", + "url", + "avatar" + ], + "properties": { + "@context": { + "type": "string", + "value": "https://www.w3.org/ns/activitystreams", + "default": "https://www.w3.org/ns/activitystreams" + }, + "id": { + "type": "string", + "description": "Local URI" + }, + "type": "Person", + "nickname": { + "type": "string", + "description": "Actor's nickname" + }, + "is_local": { + "type": "boolean", + "description": "True if local, false otherwise" + }, + "inbox": { + "type": "string", + "description": "URL to Actor's inbox endpoint" + }, + "sharedInbox": { + "type": "string", + "description": "URL to Actor's sharedInbox endpoint" + }, + "outbox": { + "type": "string", + "description": "URL to Actor's outbox endpoint" + }, + "display_name": { + "type": "string", + "description": "The Actor's display name" + }, + "followers": { + "type": "string", + "description": "URL to Actor's followers collection" + }, + "followers_count": { + "type": "integer", + "format": "int32", + "description": "Total number of followers" + }, + "following": { + "type": "string", + "description": "URL to Actor's following collection" + }, + "following_count": { + "type": "integer", + "format": "int32", + "description": "Total number of following" + }, + "liked": { + "type": "string", + "description": "URL to Actor's Liked collection" + }, + "liked_count": { + "type": "integer", + "format": "int32", + "description": "Total number of favorites" + }, + "summary": { + "type": "string", + "description": "Actor's biography" + }, + "url": { + "type": "string", + "description": "URL of the Actor's profile page (can be remote)" + }, + "avatar": { + "type": "Image", + "description": "Actor's avatar" + } + }, + "xml": { + "name": "Profile" + } + }, + "Tag": { + "type": "object", + "required": [ + "@context", + "name", + "url" + ], + "properties": { + "@context": { + "type": "string", + "value": "https://www.w3.org/ns/activitystreams", + "default": "https://www.w3.org/ns/activitystreams" + }, + "name": { + "type": "string", + "description": "The hashtag, not including the preceding #" + }, + "url": { + "type": "string", + "description": "The URL of the hashtag" + } + }, + "xml": { + "name": "Tag" + } + }, + "Liked Collection": { + "type": "object", + "required": [ + "@context", + "id", + "type", + "totalItems", + "orderedItems" + ], + "properties": { + "@context": { + "type": "string", + "value": "https://www.w3.org/ns/activitystreams", + "default": "https://www.w3.org/ns/activitystreams" + }, + "id": { + "type": "string", + "description": "URL for current endpoint" + }, + "type": { + "type": "string", + "description": "OrderedCollection" + }, + "totalItems": { + "type": "integer", + "format": "int32", + "description": "Total number of favorites" + }, + "orderedItems": { + "type": "Array of Notices", + "description": "Array of Notices" + } + } + }, + "Follow Collection": { + "type": "object", + "required": [ + "@context", + "id", + "type", + "totalItems", + "orderedItems" + ], + "properties": { + "@context": { + "type": "string", + "value": "https://www.w3.org/ns/activitystreams", + "default": "https://www.w3.org/ns/activitystreams" + }, + "id": { + "type": "string", + "description": "URL for current endpoint" + }, + "type": { + "type": "string", + "description": "OrderedCollection" + }, + "totalItems": { + "type": "integer", + "format": "int32", + "description": "Total number of items" + }, + "prev": { + "type": "string", + "description": "Previous page URL" + }, + "next": { + "type": "string", + "description": "Next page URL" + }, + "orderedItems": { + "type": "Array of string", + "description": "The URL of each profile" + } + } + } + }, + "links": {}, + "callbacks": {} + }, + "security": [], + "servers": [] +}