A => LICENSE +428 -0
@@ 1,428 @@
+Attribution-ShareAlike 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are
+ intended for use by those authorized to give the public
+ permission to use material in ways otherwise restricted by
+ copyright and certain other rights. Our licenses are
+ irrevocable. Licensors should read and understand the terms
+ and conditions of the license they choose before applying it.
+ Licensors should also secure all rights necessary before
+ applying our licenses so that the public can reuse the
+ material as expected. Licensors should clearly mark any
+ material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If
+ the licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain
+ other rights that a licensor has authority to grant. Use of
+ the licensed material may still be restricted for other
+ reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests,
+ such as asking that all changes be marked or described.
+ Although not required by our licenses, you are encouraged to
+ respect those requests where reasonable. More considerations
+ for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution-ShareAlike 4.0 International Public
+License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution-ShareAlike 4.0 International Public License ("Public
+License"). To the extent this Public License may be interpreted as a
+contract, You are granted the Licensed Rights in consideration of Your
+acceptance of these terms and conditions, and the Licensor grants You
+such rights in consideration of benefits the Licensor receives from
+making the Licensed Material available under these terms and
+conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner requiring
+ permission under the Copyright and Similar Rights held by the
+ Licensor. For purposes of this Public License, where the Licensed
+ Material is a musical work, performance, or sound recording,
+ Adapted Material is always produced where the Licensed Material is
+ synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. BY-SA Compatible License means a license listed at
+ creativecommons.org/compatiblelicenses, approved by Creative
+ Commons as essentially the equivalent of this Public License.
+
+ d. Copyright and Similar Rights means copyright and/or similar rights
+ closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or
+ categorized. For purposes of this Public License, the rights
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
+ Rights.
+
+ e. Effective Technological Measures means those measures that, in the
+ absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright
+ Treaty adopted on December 20, 1996, and/or similar international
+ agreements.
+
+ f. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ g. License Elements means the license attributes listed in the name
+ of a Creative Commons Public License. The License Elements of this
+ Public License are Attribution and ShareAlike.
+
+ h. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ i. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ j. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ k. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the
+ public may access the material from a place and at a time
+ individually chosen by them.
+
+ l. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially
+ equivalent rights anywhere in the world.
+
+ m. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part; and
+
+ b. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public
+ License does not apply, and You do not need to comply with
+ its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section
+ 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter created,
+ and to make technical modifications necessary to do so. The
+ Licensor waives and/or agrees not to assert any right or
+ authority to forbid You from making technical modifications
+ necessary to exercise the Licensed Rights, including
+ technical modifications necessary to circumvent Effective
+ Technological Measures. For purposes of this Public License,
+ simply making modifications authorized by this Section 2(a)
+ (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. Additional offer from the Licensor -- Adapted Material.
+ Every recipient of Adapted Material from You
+ automatically receives an offer from the Licensor to
+ exercise the Licensed Rights in the Adapted Material
+ under the conditions of the Adapter's License You apply.
+
+ c. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or
+ may be construed as permission to assert or imply that You
+ are, or that Your use of the Licensed Material is, connected
+ with, or sponsored, endorsed, or granted official status by,
+ the Licensor or others designated to receive attribution as
+ provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however, to
+ the extent possible, the Licensor waives and/or agrees not to
+ assert any such rights held by the Licensor to the limited
+ extent necessary to allow You to exercise the Licensed
+ Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may be
+ reasonable to satisfy the conditions by providing a URI or
+ hyperlink to a resource that includes the required
+ information.
+
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ b. ShareAlike.
+
+ In addition to the conditions in Section 3(a), if You Share
+ Adapted Material You produce, the following conditions also apply.
+
+ 1. The Adapter's License You apply must be a Creative Commons
+ license with the same License Elements, this version or
+ later, or a BY-SA Compatible License.
+
+ 2. You must include the text of, or the URI or hyperlink to, the
+ Adapter's License You apply. You may satisfy this condition
+ in any reasonable manner based on the medium, means, and
+ context in which You Share Adapted Material.
+
+ 3. You may not offer or impose any additional or different terms
+ or conditions on, or apply any Effective Technological
+ Measures to, Adapted Material that restrict exercise of the
+ rights granted under the Adapter's License You apply.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material,
+
+ including for purposes of Section 3(b); and
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under
+ Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided
+ it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is
+ deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
+
A => README.md +13 -0
@@ 1,13 @@
+# Yue
+
+Yue is a web client for lotide.
+
+## Documentations
+
+Please see [Documentation index][index]
+
+[index]: https://man.sr.ht/~huyngo/yue
+
+## Trivia
+
+In Chinese <i>yue</i> means "moon", the celestial object that control the tide.
A => api.md +88 -0
@@ 1,88 @@
+---
+title: lotide API v0.9.0-pre
+---
+<!-- Generator: Widdershins v4.0.1 -->
+
+This API is generated from [lotide's OpenAPI specification][openapi] with
+widdershins, with some manual modification.
+
+[openapi]: https://git.sr.ht/~vpzom/lotide/tree/master/item/openapi/openapi.json
+
+## Authentication
+
+HTTP Authentication, scheme: bearer
+(Token passed in Authorization header as Bearer)
+
+## API endpoints
+
+- [Look up a remote actor by WebFinger or ActivityPub ID](api/find_actor.md)
+- Instance
+ - [Fetch information about the instance](api/instance/fetch.md)
+ - [Modify instance settings](api/instance/edit.md)
+- Community:
+ - [List communities](api/community/list.md)
+ - [Create a community](api/community/create.md)
+ - [Fetch community info](api/community/fetch.md)
+ - [Edit community details](api/community/edit.md)
+ - [Follow a community](api/community/follow.md)
+ - [Unfollow a community](api/community/unfollow.md)
+ - Moderation
+ - [List moderators of a community](api/community/list_mods.md)
+ - [Add a moderator to a community](api/community/add_mods.md)
+ - [Remove a moderator from a community](api/community/remove_mods.md)
+ - [Modify a post's publishing state](api/community/mod_post_state.md)
+- User
+ - [Find a local user by username](api/user/find.md)
+ - [Fetch information about a user](api/user/fetch.md)
+ - [List content posted by a user](api/user/list_posts.md)
+ - [Edit your personal note for a user](api/user/edit_note.md)
+ - [Edit your account settings](api/user/edit_setting.md)
+ - Authentication
+ - [Register a new account](api/user/register.md)
+ - [Log in](api/user/login.md)
+ - [Log out](api/user/logout.md)
+ - [Request a password reset](api/user/request_password_reset.md)
+ - [Check validity of a password reset key](api/user/validate-reset-key.md)
+ - [Reset password with key](api/user/reset_password.md)
+ - [Fetch current login state](api/user/login_state.md)
+- Post
+ - [List posts](api/post/list.md)
+ - [Create a new post](api/post/create.md)
+ - [Fetch a post](api/post/fetch.md)
+ - [Delete a post](api/post/delete.md)
+ - Utilities
+ - [Upload an image](api/post/media.md)
+ - [Preview Markdown rendering](api/post/render_markdown.md)
+ - Interaction
+ - [List post replies](api/post/list_replies.md)
+ - [Reply to a post](api/post/reply_post.md)
+ - [List likers of a post](api/post/list_likes.md)
+ - [Like a post](api/post/like.md)
+ - [Unlike a post](api/post/unlike.md)
+- Replies:
+ - [Fetch a comment](api/reply/fetch.md)
+ - [Delete a comment](api/reply/delete.md)
+ - [List a comment's replies](api/reply/list_comment_replies.md)
+ - [Reply to a comment](api/reply/reply_comment.md)
+ - [List likers of a comment](api/reply/list_comment_likes.md)
+ - [Like a comment](api/reply/like.md)
+ - [Retract a like of a comment](api/reply/unlike.md)
+- [Fetch your notifications](api/notification.md)
+
+## Schemas
+
+- [PathUserID](schema/pathuserid.md)
+- [SortType](schema/sorttype.md)
+- [LoginUserInfo](schema/loginuserinfo.md)
+- [MinimalCommentInfo](schema/minimal_comment_info.md)
+- [MinimalCommunityInfo](schema/minimal_community_info.md)
+- [MinimalPostInfo](schema/minimal_post_info.md)
+- [NullableMinimalPostInfo](schema/nullable_minimal_post_info.md)
+- [MinimalUserInfo](schema/minimal_user_info.md)
+- [NullableMinimalUserInfo](schema/nullable_minimal_user_info.md)
+- [UserInfo](schema/user_info.md)
+- [CommunityInfo](schema/community_info.md)
+- [SomePostInfo](schema/post_info.md)
+- [PostListPost](schema/post_list.md)
+- [PostCommentInfo](schema/comment_info.md)
+- [YourVote](schema/vote.md)
A => +23 -0
@@ 1,23 @@
## Add a moderator to a community
`PUT /api/unstable/communities/{communityID}/moderators/{userID}`
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|communityID|path|integer|true|none|
|userID|path|integer|true|none|
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully added.|None|
<aside class="warning">
To perform this operation, you must be authenticated by means of one of the following methods:
bearer
</aside>
A => +52 -0
@@ 1,52 @@
## Create a community
`POST /api/unstable/communities`
> Body parameter
```json
{
"name": "string"
}
```
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|body|body|object|true|none|
|» name|body|string|true|none|
> Example responses
> 200 Response
```json
{
"community": {
"id": 0
}
}
```
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successfully created.|Inline|
### Response Schema
Status Code **200**
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|» community|object|true|none|none|
|»» id|integer|true|none|none|
<aside class="warning">
To perform this operation, you must be authenticated by means of one of the following methods:
bearer
</aside>
A => +32 -0
@@ 1,32 @@
## Edit community details
`PATCH /api/unstable/communities/{communityID}`
> Body parameter
```json
{
"description": "string"
}
```
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|communityID|path|integer|true|none|
|body|body|object|true|none|
|» description|body|string|false|none|
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully modified.|None|
<aside class="warning">
To perform this operation, you must be authenticated by means of one of the following methods:
bearer
</aside>
A => +49 -0
@@ 1,49 @@
## Fetch community info
`GET /api/unstable/communities/{communityID}`
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|communityID|path|integer|true|none|
|include_your|query|boolean|false|none|
> Example responses
> 200 Response
```json
{
"description": "string",
"description_html": "string",
"description_text": "string",
"feeds": {
"atom": {
"new": "string"
}
},
"you_are_moderator": true,
"your_follow": {
"accepted": true
},
"id": 0,
"name": "string",
"local": true,
"host": "string",
"remote_url": "string"
}
```
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|[CommunityInfo](#schemacommunityinfo)|
<aside class="warning">
To perform this operation, you must be authenticated by means of one of the following methods:
bearer
</aside>
A => +50 -0
@@ 1,50 @@
## Follow a community
`POST /api/unstable/communities/{communityID}/follow`
> Body parameter
```json
{
"try_wait_for_accept": true
}
```
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|communityID|path|integer|true|none|
|body|body|object|true|none|
|» try_wait_for_accept|body|boolean|false|If true, will wait before responding to give the remote server time to accept the follow|
> Example responses
> 200 Response
```json
{
"accepted": true
}
```
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successfully sent follow request.|Inline|
### Response Schema
Status Code **200**
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|» accepted|boolean|true|none|none|
<aside class="warning">
To perform this operation, you must be authenticated by means of one of the following methods:
bearer
</aside>
A => +84 -0
@@ 1,84 @@
## List communities
`GET /api/unstable/communities`
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|include_your|query|boolean|false|If true, will include `you_are_moderator` and `your_follow` in list. Requires login.|
|search|query|string|false|none|
|your_follow.accepted|query|boolean|false|Filter to either communities you are following or waiting to follow. Requires login.|
|local|query|boolean|false|Filter to either local or remote communities.|
|limit|query|integer|false|none|
|page|query|string|false|none|
|sort|query|string|false|none|
#### Enumerated Values
|Parameter|Value|
|---|---|
|sort|old_local|
|sort|alphabetic|
> Example responses
> 200 Response
```json
{
"items": [
{
"description": "string",
"description_html": "string",
"description_text": "string",
"feeds": {
"atom": {
"new": "string"
}
},
"you_are_moderator": true,
"your_follow": {
"accepted": true
},
"id": 0,
"name": "string",
"local": true,
"host": "string",
"remote_url": "string"
}
],
"next_page": "string"
}
```
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
### Response Schema
Status Code **200**
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|» items|[allOf]|true|none|none|
|»» description|string|true|none|Old field for description. Should not be used.|
|»» description_html|string¦null|true|none|Description as HTML, if available|
|»» description_text|string¦null|true|none|Description as text, if available|
|»» feeds|object|true|none|none|
|»»» atom|object|true|none|none|
|»»»» new|string|true|none|none|
|»» you_are_moderator|boolean|false|none|none|
|»» your_follow|object¦null|false|none|none|
|»»» accepted|boolean|true|none|Whether your follow request has been accepted by the community.|
|» next_page|string¦null|true|none|none|
<aside class="warning">
To perform this operation, you must be authenticated by means of one of the following methods:
bearer
</aside>
A => +57 -0
@@ 1,57 @@
## List moderators of a community
`GET /api/unstable/communities/{communityID}/moderators`
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|communityID|path|integer|true|none|
> Example responses
> 200 Response
```json
[
{
"id": 0,
"username": "string",
"local": true,
"host": "string",
"remote_url": "string",
"is_bot": true,
"avatar": {
"url": "string"
}
}
]
```
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
### Response Schema
Status Code **200**
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|*anonymous*|[[MinimalUserInfo](#schemaminimaluserinfo)]|false|none|none|
|» id|integer|true|none|none|
|» username|string|true|none|none|
|» local|boolean|true|none|none|
|» host|string|true|none|none|
|» remote_url|string¦null|true|none|none|
|» is_bot|boolean|true|none|none|
|» avatar|object|false|none|none|
|»» url|string|true|none|none|
<aside class="success">
This operation does not require authentication
</aside>
A => +34 -0
@@ 1,34 @@
## Modify a post's publishing state
`PATCH /api/unstable/communities/{communityID}/posts/{postID}`
> Body parameter
```json
{
"approved": true,
"sticky": true
}
```
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|communityID|path|integer|true|none|
|postID|path|integer|true|none|
|body|body|object|true|none|
|» approved|body|boolean|false|none|
|» sticky|body|boolean|false|none|
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully modified.|None|
<aside class="success">
This operation does not require authentication
</aside>
A => +23 -0
@@ 1,23 @@
## Remove a moderator from a community
`DELETE /api/unstable/communities/{communityID}/moderators/{userID}`
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|communityID|path|integer|true|none|
|userID|path|integer|true|none|
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully removed.|None|
<aside class="warning">
To perform this operation, you must be authenticated by means of one of the following methods:
bearer
</aside>
A => +22 -0
@@ 1,22 @@
## Unfollow a community
`POST /api/unstable/communities/{communityID}/unfollow`
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|communityID|path|integer|true|none|
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|202|[Accepted](https://tools.ietf.org/html/rfc7231#section-6.3.3)|Successfully unfollowed.|None|
<aside class="warning">
To perform this operation, you must be authenticated by means of one of the following methods:
bearer
</aside>
A => api/find_actor.md +49 -0
@@ 1,49 @@
+## Look up a remote actor by WebFinger or ActivityPub ID
+
+`GET /api/unstable/actors:lookup/{remoteID}`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|remoteID|path|string|true|none|
+
+> Example responses
+
+> 200 Response
+
+```json
+[
+ {
+ "id": 0,
+ "type": "community"
+ }
+]
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» id|integer|true|none|none|
+|» type|string|false|none|none|
+
+#### Enumerated Values
+
+|Property|Value|
+|---|---|
+|type|community|
+|type|user|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/instance/edit.md +30 -0
@@ 1,30 @@
+
+## Modify instance settings
+
+`PATCH /api/unstable/instance`
+
+> Body parameter
+
+```json
+{
+ "description": "string"
+}
+```
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|body|body|object|true|none|
+|» description|body|string|false|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully modified.|None|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/instance/fetch.md +38 -0
@@ 1,38 @@
+
+## Fetch information about the instance
+
+`GET /api/unstable/instance`
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "software": {
+ "name": "lotide",
+ "version": "0.5.0-pre"
+ }
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» software|object|true|none|none|
+|»» name|string|true|none|none|
+|»» version|string|true|none|none|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/notification.md +209 -0
@@ 1,209 @@
+
+## Fetch your notifications. Will also clear `has_unread_notifications`.
+
+`GET /api/unstable/users/~me/notifications`
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "items": [
+ {
+ "unseen": true,
+ "type": "post_reply",
+ "reply": {
+ "id": 0,
+ "remote_url": "string",
+ "content_text": "string",
+ "content_markdown": "string",
+ "content_html": "string",
+ "attachments": [
+ {
+ "url": "string"
+ }
+ ],
+ "author": {
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "avatar": {
+ "url": "string"
+ }
+ },
+ "created": "2019-08-24T14:15:22Z",
+ "deleted": true,
+ "local": true,
+ "replies": {
+ "items": [
+ {}
+ ],
+ "next_page": "string"
+ },
+ "your_vote": {}
+ },
+ "post": {
+ "id": 0,
+ "title": "string",
+ "remote_url": "string",
+ "href": "string",
+ "content_text": "string",
+ "content_html": "string",
+ "author": {
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "is_bot": true,
+ "avatar": {
+ "url": "string"
+ }
+ },
+ "created": "2019-08-24T14:15:22Z",
+ "community": {
+ "id": 0,
+ "name": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string"
+ },
+ "score": 0,
+ "sticky": true,
+ "your_vote": {},
+ "content_markdown": "string",
+ "replies_count_total": 0
+ }
+ }
+ ],
+ "next_page": "string"
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» items|[allOf]|true|none|none|
+
+*allOf*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|»» *anonymous*|object|false|none|none|
+|»»» unseen|boolean|true|none|Whether this notification was generated since the last time notifications were checked.|
+
+*and*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|»» *anonymous*|any|false|none|none|
+
+*oneOf*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|»»» *anonymous*|object|false|none|none|
+|»»»» type|string|true|none|none|
+|»»»» reply|[PostCommentInfo](#schemapostcommentinfo)|true|none|none|
+|»»»»» id|integer|true|none|none|
+|»»»»» remote_url|string¦null|true|none|none|
+|»»»»» content_text|string¦null|true|none|none|
+|»»»»» content_markdown|string¦null|true|none|none|
+|»»»»» content_html|string¦null|true|none|none|
+|»»»»» attachments|[object]|true|none|none|
+|»»»»»» url|string|true|none|none|
+|»»»»» author|[NullableMinimalUserInfo](#schemanullableminimaluserinfo)¦null|true|none|none|
+|»»»»»» id|integer|true|none|none|
+|»»»»»» username|string|true|none|none|
+|»»»»»» local|boolean|true|none|none|
+|»»»»»» host|string|true|none|none|
+|»»»»»» remote_url|string¦null|true|none|none|
+|»»»»»» avatar|object|false|none|none|
+|»»»»»»» url|string|true|none|none|
+|»»»»» created|string(date-time)|true|none|none|
+|»»»»» deleted|boolean|true|none|none|
+|»»»»» local|boolean|true|none|none|
+|»»»»» replies|object¦null|true|none|If null, there are replies to this comment but are omitted due to depth limits. Otherwise, this contains a list of replies. If next_page is not null, some replies have been omitted and can be accessed with pagination.|
+|»»»»»» items|[[PostCommentInfo](#schemapostcommentinfo)]|true|none|none|
+|»»»»»» next_page|string¦null|true|none|none|
+|»»»»» your_vote|[YourVote](#schemayourvote)¦null|false|none|Will be null if you haven't voted, or an empty object if you have.|
+|»»»» post|any|true|none|none|
+
+*allOf*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|»»»»» *anonymous*|[SomePostInfo](#schemasomepostinfo)|false|none|none|
+|»»»»»» id|integer|true|none|none|
+|»»»»»» title|string|true|none|none|
+|»»»»»» remote_url|string¦null|true|none|none|
+|»»»»»» href|string|false|none|none|
+|»»»»»» content_text|string¦null|true|none|Content in text form. Should be displayed if content_html is not present.|
+|»»»»»» content_html|string¦null|true|none|Content in HTML form.|
+|»»»»»» author|[MinimalUserInfo](#schemaminimaluserinfo)|false|none|none|
+|»»»»»»» id|integer|true|none|none|
+|»»»»»»» username|string|true|none|none|
+|»»»»»»» local|boolean|true|none|none|
+|»»»»»»» host|string|true|none|none|
+|»»»»»»» remote_url|string¦null|true|none|none|
+|»»»»»»» is_bot|boolean|true|none|none|
+|»»»»»»» avatar|object|false|none|none|
+|»»»»»»»» url|string|true|none|none|
+|»»»»»» created|string(date-time)|true|none|none|
+|»»»»»» community|object|true|none|none|
+|»»»»»»» id|integer|true|none|none|
+|»»»»»»» name|string|true|none|none|
+|»»»»»»» local|boolean|true|none|none|
+|»»»»»»» host|string|true|none|none|
+|»»»»»»» remote_url|string¦null|true|none|none|
+|»»»»»» score|integer|true|none|none|
+|»»»»»» sticky|boolean|true|none|none|
+|»»»»»» your_vote|[YourVote](#schemayourvote)¦null|false|none|Will be null if you haven't voted, or an empty object if you have.|
+|»»»»»» content_markdown|string¦null|true|none|none|
+
+*and*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|»»»»» *anonymous*|object|false|none|none|
+|»»»»»» replies_count_total|integer|true|none|none|
+
+*xor*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|»»» *anonymous*|object|false|none|none|
+|»»»» type|string|true|none|none|
+|»»»» reply|[PostCommentInfo](#schemapostcommentinfo)|true|none|none|
+|»»»» comment|[PostCommentInfo](#schemapostcommentinfo)|true|none|none|
+|»»»» post|any|true|none|none|
+
+*continued*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» next_page|string¦null|true|none|none|
+
+#### Enumerated Values
+
+|Property|Value|
+|---|---|
+|type|post_reply|
+|type|comment_reply|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
A => api/post/create.md +57 -0
@@ 1,57 @@
+
+## Create a new post
+
+`POST /api/unstable/posts`
+
+> Body parameter
+
+```json
+{
+ "community": 0,
+ "href": "string",
+ "content_markdown": "string",
+ "content_text": "string",
+ "title": "string"
+}
+```
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|body|body|object|true|none|
+|» community|body|integer|true|none|
+|» href|body|string|false|URL target for the post. Can be set to a hosted media file by specifying `local-media://<id>`|
+|» content_markdown|body|string|false|none|
+|» content_text|body|string|false|none|
+|» title|body|string|true|none|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "id": 0
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successfully created.|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» id|integer|true|none|none|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/post/delete.md +22 -0
@@ 1,22 @@
+
+## Delete a post
+
+`DELETE /api/unstable/posts/{postID}`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|postID|path|integer|true|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully deleted.|None|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/post/fetch.md +72 -0
@@ 1,72 @@
+
+## Fetch a post
+
+`GET /api/unstable/posts/{postID}`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|postID|path|integer|true|none|
+|include_your|query|boolean|false|none|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "approved": true,
+ "local": true,
+ "id": 0,
+ "title": "string",
+ "remote_url": "string",
+ "href": "string",
+ "content_text": "string",
+ "content_html": "string",
+ "author": {
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "is_bot": true,
+ "avatar": {
+ "url": "string"
+ }
+ },
+ "created": "2019-08-24T14:15:22Z",
+ "community": {
+ "id": 0,
+ "name": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string"
+ },
+ "score": 0,
+ "sticky": true,
+ "your_vote": {},
+ "content_markdown": "string"
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» approved|boolean|true|none|none|
+|» local|boolean|true|none|none|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/post/like.md +22 -0
@@ 1,22 @@
+
+## Like a post
+
+`PUT /api/unstable/posts/{postID}/your_vote`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|postID|path|integer|true|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully liked.|None|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/post/list.md +128 -0
@@ 1,128 @@
+
+## List posts
+
+`GET /api/unstable/posts`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|include_your|query|boolean|false|none|
+|sort|query|any|false|none|
+|search|query|string|false|none|
+|in_any_local_community|query|boolean|false|Filter by whether the post is approved in a local community|
+|use_aggregate_filters|query|boolean|false|If true, will omit posts from communities marked as hide_posts_from_aggregates|
+|community|query|integer|false|If present, will filter to posts approved in the specified community|
+|in_your_follows|query|boolean|false|Filter by whether the post is approved in one of the communities you follow|
+|created_within|query|string|false|How far into the past to include posts from, as an ISO8601 duration.|
+|sort_sticky|query|boolean|false|If true, will sort sticky posts to the top|
+|limit|query|integer|false|none|
+|page|query|string|false|none|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "items": [
+ {
+ "id": 0,
+ "title": "string",
+ "remote_url": "string",
+ "href": "string",
+ "content_text": "string",
+ "content_html": "string",
+ "author": {
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "is_bot": true,
+ "avatar": {
+ "url": "string"
+ }
+ },
+ "created": "2019-08-24T14:15:22Z",
+ "community": {
+ "id": 0,
+ "name": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string"
+ },
+ "score": 0,
+ "sticky": true,
+ "your_vote": {},
+ "content_markdown": "string",
+ "replies_count_total": 0
+ }
+ ],
+ "next_page": "string"
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» items|[allOf]|true|none|none|
+
+*allOf*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|»» *anonymous*|[SomePostInfo](#schemasomepostinfo)|false|none|none|
+|»»» id|integer|true|none|none|
+|»»» title|string|true|none|none|
+|»»» remote_url|string¦null|true|none|none|
+|»»» href|string|false|none|none|
+|»»» content_text|string¦null|true|none|Content in text form. Should be displayed if content_html is not present.|
+|»»» content_html|string¦null|true|none|Content in HTML form.|
+|»»» author|[MinimalUserInfo](#schemaminimaluserinfo)|false|none|none|
+|»»»» id|integer|true|none|none|
+|»»»» username|string|true|none|none|
+|»»»» local|boolean|true|none|none|
+|»»»» host|string|true|none|none|
+|»»»» remote_url|string¦null|true|none|none|
+|»»»» is_bot|boolean|true|none|none|
+|»»»» avatar|object|false|none|none|
+|»»»»» url|string|true|none|none|
+|»»» created|string(date-time)|true|none|none|
+|»»» community|object|true|none|none|
+|»»»» id|integer|true|none|none|
+|»»»» name|string|true|none|none|
+|»»»» local|boolean|true|none|none|
+|»»»» host|string|true|none|none|
+|»»»» remote_url|string¦null|true|none|none|
+|»»» score|integer|true|none|none|
+|»»» sticky|boolean|true|none|none|
+|»»» your_vote|[YourVote](#schemayourvote)¦null|false|none|Will be null if you haven't voted, or an empty object if you have.|
+|»»» content_markdown|string¦null|true|none|none|
+
+*and*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|»» *anonymous*|object|false|none|none|
+|»»» replies_count_total|integer|true|none|none|
+
+*continued*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» next_page|string¦null|true|none|none|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/post/list_likes.md +65 -0
@@ 1,65 @@
+
+## List likers of a post
+
+`GET /api/unstable/posts/{postID}/votes`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|postID|path|integer|true|none|
+|page|query|string|true|none|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "items": [
+ {
+ "user": {
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "is_bot": true,
+ "avatar": {
+ "url": "string"
+ }
+ }
+ }
+ ],
+ "next_page": "string"
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» items|[object]|true|none|none|
+|»» user|[MinimalUserInfo](#schemaminimaluserinfo)|true|none|none|
+|»»» id|integer|true|none|none|
+|»»» username|string|true|none|none|
+|»»» local|boolean|true|none|none|
+|»»» host|string|true|none|none|
+|»»» remote_url|string¦null|true|none|none|
+|»»» is_bot|boolean|true|none|none|
+|»»» avatar|object|false|none|none|
+|»»»» url|string|true|none|none|
+|» next_page|string¦null|true|none|none|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/post/list_replies.md +107 -0
@@ 1,107 @@
+
+## List post replies
+
+`GET /api/unstable/posts/{postID}/replies`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|postID|path|integer|true|none|
+|include_your|query|boolean|false|none|
+|limit|query|integer|false|none|
+|sort|query|[SortType](#schemasorttype)|false|none|
+|page|query|string|false|none|
+
+#### Enumerated Values
+
+|Parameter|Value|
+|---|---|
+|sort|hot|
+|sort|new|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "items": [
+ {
+ "id": 0,
+ "remote_url": "string",
+ "content_text": "string",
+ "content_markdown": "string",
+ "content_html": "string",
+ "attachments": [
+ {
+ "url": "string"
+ }
+ ],
+ "author": {
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "avatar": {
+ "url": "string"
+ }
+ },
+ "created": "2019-08-24T14:15:22Z",
+ "deleted": true,
+ "local": true,
+ "replies": {
+ "items": [
+ {}
+ ],
+ "next_page": "string"
+ },
+ "your_vote": {}
+ }
+ ],
+ "next_page": "string"
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» items|[[PostCommentInfo](#schemapostcommentinfo)]|true|none|none|
+|»» id|integer|true|none|none|
+|»» remote_url|string¦null|true|none|none|
+|»» content_text|string¦null|true|none|none|
+|»» content_markdown|string¦null|true|none|none|
+|»» content_html|string¦null|true|none|none|
+|»» attachments|[object]|true|none|none|
+|»»» url|string|true|none|none|
+|»» author|[NullableMinimalUserInfo](#schemanullableminimaluserinfo)¦null|true|none|none|
+|»»» id|integer|true|none|none|
+|»»» username|string|true|none|none|
+|»»» local|boolean|true|none|none|
+|»»» host|string|true|none|none|
+|»»» remote_url|string¦null|true|none|none|
+|»»» avatar|object|false|none|none|
+|»»»» url|string|true|none|none|
+|»» created|string(date-time)|true|none|none|
+|»» deleted|boolean|true|none|none|
+|»» local|boolean|true|none|none|
+|»» replies|object¦null|true|none|If null, there are replies to this comment but are omitted due to depth limits. Otherwise, this contains a list of replies. If next_page is not null, some replies have been omitted and can be accessed with pagination.|
+|»»» items|[[PostCommentInfo](#schemapostcommentinfo)]|true|none|none|
+|»»» next_page|string¦null|true|none|none|
+|»» your_vote|[YourVote](#schemayourvote)¦null|false|none|Will be null if you haven't voted, or an empty object if you have.|
+|» next_page|string¦null|true|none|none|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/post/media.md +36 -0
@@ 1,36 @@
+
+## Upload an image
+
+`POST /api/unstable/media`
+
+Uploads an image as hosted media. File content must be sent as the request body.
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "id": "string"
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successfully uploaded.|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» id|string|true|none|none|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/post/render_markdown.md +48 -0
@@ 1,48 @@
+
+## Preview Markdown rendering
+
+`POST /api/unstable/misc/render_markdown`
+
+> Body parameter
+
+```json
+{
+ "content_markdown": "string"
+}
+```
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|body|body|object|true|none|
+|» content_markdown|body|string|true|none|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "content_html": "string"
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» content_html|string|true|none|none|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/post/reply_post.md +53 -0
@@ 1,53 @@
+
+## Reply to a post
+
+`POST /api/unstable/posts/{postID}/replies`
+
+> Body parameter
+
+```json
+{
+ "content_text": "string",
+ "content_markdown": "string",
+ "attachment": "string"
+}
+```
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|postID|path|integer|true|none|
+|body|body|object|true|none|
+|» content_text|body|string|false|none|
+|» content_markdown|body|string|false|none|
+|» attachment|body|string|false|Must be a `local-media://` reference|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "id": 0
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successfully created reply.|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» id|integer|true|none|none|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/post/unlike.md +22 -0
@@ 1,22 @@
+
+## Retract a like of a post
+
+`DELETE /api/unstable/posts/{postID}/your_vote`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|postID|path|integer|true|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully unliked.|None|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/reply/delete.md +22 -0
@@ 1,22 @@
+
+## Delete a comment
+
+`DELETE /api/unstable/comments/{commentID}`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|commentID|path|integer|true|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully deleted.|None|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/reply/fetch.md +91 -0
@@ 1,91 @@
+## Fetch a comment
+
+`GET /api/unstable/comments/{commentID}`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|commentID|path|integer|true|none|
+|include_your|query|boolean|false|none|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "id": 0,
+ "remote_url": "string",
+ "content_text": "string",
+ "content_html": "string",
+ "author": {
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "avatar": {
+ "url": "string"
+ }
+ },
+ "created": "2019-08-24T14:15:22Z",
+ "deleted": true,
+ "replies": {
+ "items": [],
+ "next_page": "string"
+ },
+ "your_vote": {},
+ "parent": {
+ "id": 0
+ },
+ "post": {
+ "id": 0,
+ "title": "string",
+ "remote_url": "string"
+ }
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» id|integer|true|none|none|
+|» remote_url|string¦null|true|none|none|
+|» content_text|string¦null|true|none|none|
+|» content_html|string¦null|true|none|none|
+|» author|[NullableMinimalUserInfo](#schemanullableminimaluserinfo)¦null|true|none|none|
+|»» id|integer|true|none|none|
+|»» username|string|true|none|none|
+|»» local|boolean|true|none|none|
+|»» host|string|true|none|none|
+|»» remote_url|string¦null|true|none|none|
+|»» avatar|object|false|none|none|
+|»»» url|string|true|none|none|
+|» created|string(date-time)|true|none|none|
+|» deleted|boolean|true|none|none|
+|» replies|object¦null|true|none|This endpoint no longer includes replies. However, if there are no replies, this will be non-null and items will be an empty array.|
+|»» items|array|false|none|none|
+|»» next_page|string¦null|false|none|This is actually always null since it only appears when there are no replies.|
+|» your_vote|[YourVote](#schemayourvote)¦null|false|none|Will be null if you haven't voted, or an empty object if you have.|
+|» parent|object¦null|true|none|none|
+|»» id|integer|true|none|none|
+|» post|[NullableMinimalPostInfo](#schemanullableminimalpostinfo)¦null|true|none|none|
+|»» id|integer|true|none|none|
+|»» title|string|true|none|none|
+|»» remote_url|string¦null|true|none|none|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/reply/like.md +22 -0
@@ 1,22 @@
+
+## Like a comment
+
+`PUT /api/unstable/comments/{commentID}/your_vote`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|commentID|path|integer|true|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully liked.|None|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => +64 -0
@@ 1,64 @@
## List likers of a comment
`GET /api/unstable/comments/{commentID}/votes`
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|commentID|path|integer|true|none|
|page|query|string|true|none|
> Example responses
> 200 Response
```json
{
"items": [
{
"user": {
"id": 0,
"username": "string",
"local": true,
"host": "string",
"remote_url": "string",
"is_bot": true,
"avatar": {
"url": "string"
}
}
}
],
"next_page": "string"
}
```
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
### Response Schema
Status Code **200**
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|» items|[object]|true|none|none|
|»» user|[MinimalUserInfo](#schemaminimaluserinfo)|true|none|none|
|»»» id|integer|true|none|none|
|»»» username|string|true|none|none|
|»»» local|boolean|true|none|none|
|»»» host|string|true|none|none|
|»»» remote_url|string¦null|true|none|none|
|»»» is_bot|boolean|true|none|none|
|»»» avatar|object|false|none|none|
|»»»» url|string|true|none|none|
|» next_page|string¦null|true|none|none|
<aside class="success">
This operation does not require authentication
</aside>
A => +107 -0
@@ 1,107 @@
## List comment replies
`GET /api/unstable/comments/{commentID}/replies`
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|commentID|path|integer|true|none|
|include_your|query|boolean|false|none|
|depth|query|integer|false|Number of levels to expand replies for. Defaults to 3.|
|limit|query|integer|false|none|
|sort|query|[SortType](#schemasorttype)|false|none|
|page|query|string|false|none|
#### Enumerated Values
|Parameter|Value|
|---|---|
|sort|hot|
|sort|new|
> Example responses
> 200 Response
```json
{
"items": [
{
"id": 0,
"remote_url": "string",
"content_text": "string",
"content_markdown": "string",
"content_html": "string",
"attachments": [
{
"url": "string"
}
],
"author": {
"id": 0,
"username": "string",
"local": true,
"host": "string",
"remote_url": "string",
"avatar": {
"url": "string"
}
},
"created": "2019-08-24T14:15:22Z",
"deleted": true,
"local": true,
"replies": {
"items": [
{}
],
"next_page": "string"
},
"your_vote": {}
}
],
"next_page": "string"
}
```
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
### Response Schema
Status Code **200**
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|» items|[[PostCommentInfo](#schemapostcommentinfo)]|true|none|none|
|»» id|integer|true|none|none|
|»» remote_url|string¦null|true|none|none|
|»» content_text|string¦null|true|none|none|
|»» content_markdown|string¦null|true|none|none|
|»» content_html|string¦null|true|none|none|
|»» attachments|[object]|true|none|none|
|»»» url|string|true|none|none|
|»» author|[NullableMinimalUserInfo](#schemanullableminimaluserinfo)¦null|true|none|none|
|»»» id|integer|true|none|none|
|»»» username|string|true|none|none|
|»»» local|boolean|true|none|none|
|»»» host|string|true|none|none|
|»»» remote_url|string¦null|true|none|none|
|»»» avatar|object|false|none|none|
|»»»» url|string|true|none|none|
|»» created|string(date-time)|true|none|none|
|»» deleted|boolean|true|none|none|
|»» local|boolean|true|none|none|
|»» replies|object¦null|true|none|If null, there are replies to this comment but are omitted due to depth limits. Otherwise, this contains a list of replies. If next_page is not null, some replies have been omitted and can be accessed with pagination.|
|»»» items|[[PostCommentInfo](#schemapostcommentinfo)]|true|none|none|
|»»» next_page|string¦null|true|none|none|
|»» your_vote|[YourVote](#schemayourvote)¦null|false|none|Will be null if you haven't voted, or an empty object if you have.|
|» next_page|string¦null|true|none|none|
<aside class="success">
This operation does not require authentication
</aside>
A => +57 -0
@@ 1,57 @@
## Reply to a comment
`POST /api/unstable/comments/{commentID}/replies`
> Body parameter
```json
{
"content_text": "string",
"content_markdown": "string",
"attachment": "string"
}
```
### Parameters
|Name|In|Type|Required|Description|
|---|---|---|---|---|
|commentID|path|integer|true|none|
|body|body|object|true|none|
|» content_text|body|string|false|none|
|» content_markdown|body|string|false|none|
|» attachment|body|string|false|Must be a `local-media://` reference|
> Example responses
> 200 Response
```json
{
"id": 0,
"post": {
"id": 0
}
}
```
### Responses
|Status|Meaning|Description|Schema|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successfully created reply.|Inline|
### Response Schema
Status Code **200**
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|» id|integer|true|none|none|
|» post|object|true|none|none|
|»» id|integer|true|none|none|
<aside class="success">
This operation does not require authentication
</aside>
A => api/reply/unlike.md +22 -0
@@ 1,22 @@
+
+## Retract a like of a comment
+
+`DELETE /api/unstable/comments/{commentID}/your_vote`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|commentID|path|integer|true|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully unliked.|None|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/user/edit_note.md +32 -0
@@ 1,32 @@
+
+## Edit your personal note for a user
+
+`PUT /api/unstable/users/{userID}/your_note`
+
+> Body parameter
+
+```json
+{
+ "content_text": "string"
+}
+```
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|userID|path|[PathUserID](#schemapathuserid)|true|none|
+|body|body|object|true|none|
+|» content_text|body|string|true|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully set.|None|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/user/edit_setting.md +37 -0
@@ 1,37 @@
+
+## Edit your account settings
+
+`PATCH /api/unstable/users/~me`
+
+> Body parameter
+
+```json
+{
+ "description": "string",
+ "email_address": "user@example.com",
+ "password": "pa$$word",
+ "avatar": "string"
+}
+```
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|body|body|object|true|none|
+|» description|body|string|false|none|
+|» email_address|body|string(email)|false|none|
+|» password|body|string(password)|false|none|
+|» avatar|body|string|false|User profile image. Must be a `local-media://` link|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully modified.|None|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/user/fetch.md +46 -0
@@ 1,46 @@
+
+## Fetch information about a user
+
+`GET /api/unstable/users/{userID}`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|userID|path|[PathUserID](#schemapathuserid)|true|none|
+|include_your|query|boolean|false|If true, will fetch your_note|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "description": "string",
+ "description_html": "string",
+ "description_text": "string",
+ "your_note": "string",
+ "suspended": true,
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "is_bot": true,
+ "avatar": {
+ "url": "string"
+ }
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|[UserInfo](#schemauserinfo)|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/user/find.md +64 -0
@@ 1,64 @@
+
+## Find a local user by username
+
+`GET /api/unstable/users`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|local|query|boolean|true|Filter by whether the user is local. Currently required to be true.|
+|username|query|string|true|Filter by the user's name|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "items": [
+ {
+ "description": "string",
+ "description_html": "string",
+ "description_text": "string",
+ "your_note": "string",
+ "suspended": true,
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "is_bot": true,
+ "avatar": {
+ "url": "string"
+ }
+ }
+ ],
+ "next_page": "string"
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» items|[allOf]|true|none|none|
+|»» description|string|true|none|Old field for description. Should not be used.|
+|»» description_html|string¦null|true|none|Description as HTML, if available|
+|»» description_text|string¦null|true|none|Description as text, if available|
+|»» your_note|string¦null|false|none|Private note about this user written by you|
+|»» suspended|boolean|false|none|Whether the user is suspended|
+|» next_page|string¦null|true|none|none|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/user/list_posts.md +114 -0
@@ 1,114 @@
+
+## List content posted by a user
+
+`GET /api/unstable/users/{userID}/things`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|userID|path|[PathUserID](#schemapathuserid)|true|none|
+|limit|query|integer|false|none|
+|page|query|string|false|none|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "items": [
+ {
+ "type": "comment",
+ "id": 0,
+ "content_text": "string",
+ "content_html": "string",
+ "created": "2019-08-24T14:15:22Z",
+ "post": {
+ "id": 0,
+ "title": "string",
+ "remote_url": "string"
+ }
+ }
+ ],
+ "next_page": "string"
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» items|[oneOf]|true|none|none|
+
+*oneOf*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|»» *anonymous*|object|false|none|none|
+|»»» type|string|true|none|none|
+|»»» id|integer|true|none|none|
+|»»» content_text|string¦null|true|none|none|
+|»»» content_html|string¦null|true|none|none|
+|»»» created|string(date-time)|true|none|none|
+|»»» post|[MinimalPostInfo](#schemaminimalpostinfo)|true|none|none|
+|»»»» id|integer|true|none|none|
+|»»»» title|string|true|none|none|
+|»»»» remote_url|string¦null|true|none|none|
+
+*xor*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|»» *anonymous*|[SomePostInfo](#schemasomepostinfo)|false|none|none|
+|»»» id|integer|true|none|none|
+|»»» title|string|true|none|none|
+|»»» remote_url|string¦null|true|none|none|
+|»»» href|string|false|none|none|
+|»»» content_text|string¦null|true|none|Content in text form. Should be displayed if content_html is not present.|
+|»»» content_html|string¦null|true|none|Content in HTML form.|
+|»»» author|[MinimalUserInfo](#schemaminimaluserinfo)|false|none|none|
+|»»»» id|integer|true|none|none|
+|»»»» username|string|true|none|none|
+|»»»» local|boolean|true|none|none|
+|»»»» host|string|true|none|none|
+|»»»» remote_url|string¦null|true|none|none|
+|»»»» is_bot|boolean|true|none|none|
+|»»»» avatar|object|false|none|none|
+|»»»»» url|string|true|none|none|
+|»»» created|string(date-time)|true|none|none|
+|»»» community|object|true|none|none|
+|»»»» id|integer|true|none|none|
+|»»»» name|string|true|none|none|
+|»»»» local|boolean|true|none|none|
+|»»»» host|string|true|none|none|
+|»»»» remote_url|string¦null|true|none|none|
+|»»» score|integer|true|none|none|
+|»»» sticky|boolean|true|none|none|
+|»»» your_vote|[YourVote](#schemayourvote)¦null|false|none|Will be null if you haven't voted, or an empty object if you have.|
+|»»» content_markdown|string¦null|true|none|none|
+
+*continued*
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» next_page|string¦null|true|none|none|
+
+#### Enumerated Values
+
+|Property|Value|
+|---|---|
+|type|comment|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/user/login.md +61 -0
@@ 1,61 @@
+
+## Log in to the service
+
+`POST /api/unstable/logins`
+
+> Body parameter
+
+```json
+{
+ "username": "string",
+ "password": "string"
+}
+```
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|body|body|object|true|none|
+|» username|body|string|true|none|
+|» password|body|string|true|none|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "token": "string",
+ "user": {
+ "id": 0,
+ "username": "string",
+ "is_site_admin": true,
+ "has_unread_notification": true
+ }
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successfully logged in.|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» token|string|true|none|none|
+|» user|[LoginUserInfo](#schemaloginuserinfo)|true|none|none|
+|»» id|integer|true|none|none|
+|»» username|string|true|none|none|
+|»» is_site_admin|boolean|true|none|none|
+|»» has_unread_notification|boolean|true|none|none|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/user/login_state.md +43 -0
@@ 1,43 @@
+
+## Fetch current login state
+
+`GET /api/unstable/logins/~current`
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "user": {
+ "id": 0,
+ "username": "string",
+ "is_site_admin": true,
+ "has_unread_notification": true
+ }
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» user|[LoginUserInfo](#schemaloginuserinfo)|true|none|none|
+|»» id|integer|true|none|none|
+|»» username|string|true|none|none|
+|»» is_site_admin|boolean|true|none|none|
+|»» has_unread_notification|boolean|true|none|none|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/user/logout.md +18 -0
@@ 1,18 @@
+
+## Log out
+
+`DELETE /api/unstable/logins/~current`
+
+Invalidates the current login session.
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|204|[No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5)|Successfully ended.|None|
+
+<aside class="warning">
+To perform this operation, you must be authenticated by means of one of the following methods:
+bearer
+</aside>
+
A => api/user/register.md +65 -0
@@ 1,65 @@
+
+## Register a new account
+
+`POST /api/unstable/users`
+
+> Body parameter
+
+```json
+{
+ "username": "string",
+ "password": "string",
+ "email_address": "user@example.com",
+ "login": true
+}
+```
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|body|body|object|true|none|
+|» username|body|string|true|none|
+|» password|body|string|true|none|
+|» email_address|body|string(email)|false|none|
+|» login|body|boolean|false|If true, will also create a login token for the new user|
+
+> Example responses
+
+> 200 Response
+
+```json
+{
+ "user": {
+ "id": 0,
+ "username": "string",
+ "is_site_admin": true,
+ "has_unread_notification": true
+ },
+ "token": "string"
+}
+```
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
+
+### Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» user|[LoginUserInfo](#schemaloginuserinfo)|true|none|none|
+|»» id|integer|true|none|none|
+|»» username|string|true|none|none|
+|»» is_site_admin|boolean|true|none|none|
+|»» has_unread_notification|boolean|true|none|none|
+|» token|string|false|none|none|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/user/request_password_reset.md +30 -0
@@ 1,30 @@
+
+## Request a password reset
+
+`POST /api/unstable/forgot_password/keys`
+
+> Body parameter
+
+```json
+{
+ "email_address": "user@example.com"
+}
+```
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|body|body|object|true|none|
+|» email_address|body|string(email)|true|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successfully requested.|None|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/user/reset_password.md +31 -0
@@ 1,31 @@
+
+## Reset a password using a password reset key
+
+`POST /api/unstable/forgot_password/keys/{key}/reset`
+
+> Body parameter
+
+```json
+{
+ "new_password": "pa$$word"
+}
+```
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|key|path|string|true|none|
+|body|body|object|true|none|
+|» new_password|body|string(password)|true|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successfully reset.|None|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => api/user/validate_reset_key.md +22 -0
@@ 1,22 @@
+
+## Check validity of a password reset key
+
+`GET /api/unstable/forgot_password/keys/{key}`
+
+### Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|key|path|string|true|none|
+
+### Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Key is valid.|None|
+|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|No such key, or is expired.|None|
+
+<aside class="success">
+This operation does not require authentication
+</aside>
+
A => develop.md +7 -0
@@ 1,7 @@
+---
+title: Development guide
+---
+
+# Development guide
+
+TBD
A => index.md +13 -0
@@ 1,13 @@
+---
+title: Yue documentation
+---
+
+# Yue
+
+Yue is a client for lotide.
+
+Content:
+
+0. [Installation](install.md)
+1. [API](api.md)
+2. [Development guide](develop.md)
A => install.md +7 -0
@@ 1,7 @@
+---
+title: Installation
+---
+
+# Installation
+
+TBD
A => l10n.md +7 -0
@@ 1,7 @@
+---
+title: Localization guide
+---
+
+# Localization
+
+TBD
A => +90 -0
@@ 1,90 @@
## PostCommentInfo
<!-- backwards compatibility -->
<a id="schemapostcommentinfo"></a>
<a id="schema_PostCommentInfo"></a>
<a id="tocSpostcommentinfo"></a>
<a id="tocspostcommentinfo"></a>
```json
{
"id": 0,
"remote_url": "string",
"content_text": "string",
"content_markdown": "string",
"content_html": "string",
"attachments": [
{
"url": "string"
}
],
"author": {
"id": 0,
"username": "string",
"local": true,
"host": "string",
"remote_url": "string",
"avatar": {
"url": "string"
}
},
"created": "2019-08-24T14:15:22Z",
"deleted": true,
"local": true,
"replies": {
"items": [
{
"id": 0,
"remote_url": "string",
"content_text": "string",
"content_markdown": "string",
"content_html": "string",
"attachments": [
{
"url": "string"
}
],
"author": {
"id": 0,
"username": "string",
"local": true,
"host": "string",
"remote_url": "string",
"avatar": {
"url": "string"
}
},
"created": "2019-08-24T14:15:22Z",
"deleted": true,
"local": true,
"replies": {},
"your_vote": {}
}
],
"next_page": "string"
},
"your_vote": {}
}
```
### Properties
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|id|integer|true|none|none|
|remote_url|string¦null|true|none|none|
|content_text|string¦null|true|none|none|
|content_markdown|string¦null|true|none|none|
|content_html|string¦null|true|none|none|
|attachments|[object]|true|none|none|
|» url|string|true|none|none|
|author|[NullableMinimalUserInfo](#schemanullableminimaluserinfo)|true|none|none|
|created|string(date-time)|true|none|none|
|deleted|boolean|true|none|none|
|local|boolean|true|none|none|
|replies|object¦null|true|none|If null, there are replies to this comment but are omitted due to depth limits. Otherwise, this contains a list of replies. If next_page is not null, some replies have been omitted and can be accessed with pagination.|
|» items|[[PostCommentInfo](#schemapostcommentinfo)]|true|none|none|
|» next_page|string¦null|true|none|none|
|your_vote|[YourVote](#schemayourvote)|false|none|Will be null if you haven't voted, or an empty object if you have.|
A => +45 -0
@@ 1,45 @@
## CommunityInfo
<!-- backwards compatibility -->
<a id="schemacommunityinfo"></a>
<a id="schema_CommunityInfo"></a>
<a id="tocScommunityinfo"></a>
<a id="tocscommunityinfo"></a>
```json
{
"description": "string",
"description_html": "string",
"description_text": "string",
"feeds": {
"atom": {
"new": "string"
}
},
"you_are_moderator": true,
"your_follow": {
"accepted": true
},
"id": 0,
"name": "string",
"local": true,
"host": "string",
"remote_url": "string"
}
```
### Properties
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|description|string|true|none|Old field for description. Should not be used.|
|description_html|string¦null|true|none|Description as HTML, if available|
|description_text|string¦null|true|none|Description as text, if available|
|feeds|object|true|none|none|
|» atom|object|true|none|none|
|»» new|string|true|none|none|
|you_are_moderator|boolean|false|none|none|
|your_follow|object¦null|false|none|none|
|» accepted|boolean|true|none|Whether your follow request has been accepted by the community.|
A => schema/loginuserinfo.md +27 -0
@@ 1,27 @@
+
+## LoginUserInfo
+<!-- backwards compatibility -->
+<a id="schemaloginuserinfo"></a>
+<a id="schema_LoginUserInfo"></a>
+<a id="tocSloginuserinfo"></a>
+<a id="tocsloginuserinfo"></a>
+
+```json
+{
+ "id": 0,
+ "username": "string",
+ "is_site_admin": true,
+ "has_unread_notification": true
+}
+
+```
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|integer|true|none|none|
+|username|string|true|none|none|
+|is_site_admin|boolean|true|none|none|
+|has_unread_notification|boolean|true|none|none|
+
A => +27 -0
@@ 1,27 @@
## MinimalCommentInfo
<!-- backwards compatibility -->
<a id="schemaminimalcommentinfo"></a>
<a id="schema_MinimalCommentInfo"></a>
<a id="tocSminimalcommentinfo"></a>
<a id="tocsminimalcommentinfo"></a>
```json
{
"id": 0,
"remote_url": "string",
"content_text": "string",
"content_html": "string"
}
```
### Properties
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|id|integer|true|none|none|
|remote_url|string¦null|true|none|none|
|content_text|string|false|none|none|
|content_html|string|false|none|none|
A => +29 -0
@@ 1,29 @@
## MinimalCommunityInfo
<!-- backwards compatibility -->
<a id="schemaminimalcommunityinfo"></a>
<a id="schema_MinimalCommunityInfo"></a>
<a id="tocSminimalcommunityinfo"></a>
<a id="tocsminimalcommunityinfo"></a>
```json
{
"id": 0,
"name": "string",
"local": true,
"host": "string",
"remote_url": "string"
}
```
### Properties
|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|id|integer|true|none|none|
|name|string|false|none|none|
|local|boolean|true|none|none|
|host|string|true|none|none|
|remote_url|string¦null|true|none|none|
A => schema/minimal_post_info.md +25 -0
@@ 1,25 @@
+
+## MinimalPostInfo
+<!-- backwards compatibility -->
+<a id="schemaminimalpostinfo"></a>
+<a id="schema_MinimalPostInfo"></a>
+<a id="tocSminimalpostinfo"></a>
+<a id="tocsminimalpostinfo"></a>
+
+```json
+{
+ "id": 0,
+ "title": "string",
+ "remote_url": "string"
+}
+
+```
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|integer|true|none|none|
+|title|string|true|none|none|
+|remote_url|string¦null|true|none|none|
+
A => schema/minimal_user_info.md +36 -0
@@ 1,36 @@
+
+## MinimalUserInfo
+<!-- backwards compatibility -->
+<a id="schemaminimaluserinfo"></a>
+<a id="schema_MinimalUserInfo"></a>
+<a id="tocSminimaluserinfo"></a>
+<a id="tocsminimaluserinfo"></a>
+
+```json
+{
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "is_bot": true,
+ "avatar": {
+ "url": "string"
+ }
+}
+
+```
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|integer|true|none|none|
+|username|string|true|none|none|
+|local|boolean|true|none|none|
+|host|string|true|none|none|
+|remote_url|string¦null|true|none|none|
+|is_bot|boolean|true|none|none|
+|avatar|object|false|none|none|
+|» url|string|true|none|none|
+
A => schema/nullable_minimal_post_info.md +25 -0
@@ 1,25 @@
+
+## NullableMinimalPostInfo
+<!-- backwards compatibility -->
+<a id="schemanullableminimalpostinfo"></a>
+<a id="schema_NullableMinimalPostInfo"></a>
+<a id="tocSnullableminimalpostinfo"></a>
+<a id="tocsnullableminimalpostinfo"></a>
+
+```json
+{
+ "id": 0,
+ "title": "string",
+ "remote_url": "string"
+}
+
+```
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|integer|true|none|none|
+|title|string|true|none|none|
+|remote_url|string¦null|true|none|none|
+
A => schema/nullable_minimal_user_info.md +34 -0
@@ 1,34 @@
+
+## NullableMinimalUserInfo
+<!-- backwards compatibility -->
+<a id="schemanullableminimaluserinfo"></a>
+<a id="schema_NullableMinimalUserInfo"></a>
+<a id="tocSnullableminimaluserinfo"></a>
+<a id="tocsnullableminimaluserinfo"></a>
+
+```json
+{
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "avatar": {
+ "url": "string"
+ }
+}
+
+```
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|integer|true|none|none|
+|username|string|true|none|none|
+|local|boolean|true|none|none|
+|host|string|true|none|none|
+|remote_url|string¦null|true|none|none|
+|avatar|object|false|none|none|
+|» url|string|true|none|none|
+
A => schema/pathuserid.md +33 -0
@@ 1,33 @@
+
+## PathUserID
+<!-- backwards compatibility -->
+<a id="schemapathuserid"></a>
+<a id="schema_PathUserID"></a>
+<a id="tocSpathuserid"></a>
+<a id="tocspathuserid"></a>
+
+```json
+"~me"
+
+```
+
+### Properties
+
+oneOf
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|*anonymous*|string|false|none|none|
+
+xor
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|*anonymous*|integer|false|none|none|
+
+#### Enumerated Values
+
+|Property|Value|
+|---|---|
+|*anonymous*|~me|
+
A => schema/post_info.md +66 -0
@@ 1,66 @@
+
+## SomePostInfo
+<!-- backwards compatibility -->
+<a id="schemasomepostinfo"></a>
+<a id="schema_SomePostInfo"></a>
+<a id="tocSsomepostinfo"></a>
+<a id="tocssomepostinfo"></a>
+
+```json
+{
+ "id": 0,
+ "title": "string",
+ "remote_url": "string",
+ "href": "string",
+ "content_text": "string",
+ "content_html": "string",
+ "author": {
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "is_bot": true,
+ "avatar": {
+ "url": "string"
+ }
+ },
+ "created": "2019-08-24T14:15:22Z",
+ "community": {
+ "id": 0,
+ "name": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string"
+ },
+ "score": 0,
+ "sticky": true,
+ "your_vote": {},
+ "content_markdown": "string"
+}
+
+```
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|integer|true|none|none|
+|title|string|true|none|none|
+|remote_url|string¦null|true|none|none|
+|href|string|false|none|none|
+|content_text|string¦null|true|none|Content in text form. Should be displayed if content_html is not present.|
+|content_html|string¦null|true|none|Content in HTML form.|
+|author|[MinimalUserInfo](#schemaminimaluserinfo)|false|none|none|
+|created|string(date-time)|true|none|none|
+|community|object|true|none|none|
+|» id|integer|true|none|none|
+|» name|string|true|none|none|
+|» local|boolean|true|none|none|
+|» host|string|true|none|none|
+|» remote_url|string¦null|true|none|none|
+|score|integer|true|none|none|
+|sticky|boolean|true|none|none|
+|your_vote|[YourVote](#schemayourvote)|false|none|Will be null if you haven't voted, or an empty object if you have.|
+|content_markdown|string¦null|true|none|none|
+
A => schema/post_list.md +59 -0
@@ 1,59 @@
+
+## PostListPost
+<!-- backwards compatibility -->
+<a id="schemapostlistpost"></a>
+<a id="schema_PostListPost"></a>
+<a id="tocSpostlistpost"></a>
+<a id="tocspostlistpost"></a>
+
+```json
+{
+ "id": 0,
+ "title": "string",
+ "remote_url": "string",
+ "href": "string",
+ "content_text": "string",
+ "content_html": "string",
+ "author": {
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "is_bot": true,
+ "avatar": {
+ "url": "string"
+ }
+ },
+ "created": "2019-08-24T14:15:22Z",
+ "community": {
+ "id": 0,
+ "name": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string"
+ },
+ "score": 0,
+ "sticky": true,
+ "your_vote": {},
+ "content_markdown": "string",
+ "replies_count_total": 0
+}
+
+```
+
+### Properties
+
+allOf
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|*anonymous*|[SomePostInfo](#schemasomepostinfo)|false|none|none|
+
+and
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|*anonymous*|object|false|none|none|
+|» replies_count_total|integer|true|none|none|
+
A => schema/sorttype.md +26 -0
@@ 1,26 @@
+
+## SortType
+<!-- backwards compatibility -->
+<a id="schemasorttype"></a>
+<a id="schema_SortType"></a>
+<a id="tocSsorttype"></a>
+<a id="tocssorttype"></a>
+
+```json
+"hot"
+
+```
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|*anonymous*|string|false|none|none|
+
+#### Enumerated Values
+
+|Property|Value|
+|---|---|
+|*anonymous*|hot|
+|*anonymous*|new|
+
A => schema/user_info.md +38 -0
@@ 1,38 @@
+
+## UserInfo
+<!-- backwards compatibility -->
+<a id="schemauserinfo"></a>
+<a id="schema_UserInfo"></a>
+<a id="tocSuserinfo"></a>
+<a id="tocsuserinfo"></a>
+
+```json
+{
+ "description": "string",
+ "description_html": "string",
+ "description_text": "string",
+ "your_note": "string",
+ "suspended": true,
+ "id": 0,
+ "username": "string",
+ "local": true,
+ "host": "string",
+ "remote_url": "string",
+ "is_bot": true,
+ "avatar": {
+ "url": "string"
+ }
+}
+
+```
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|description|string|true|none|Old field for description. Should not be used.|
+|description_html|string¦null|true|none|Description as HTML, if available|
+|description_text|string¦null|true|none|Description as text, if available|
+|your_note|string¦null|false|none|Private note about this user written by you|
+|suspended|boolean|false|none|Whether the user is suspended|
+
A => schema/vote.md +19 -0
@@ 1,19 @@
+
+## YourVote
+<!-- backwards compatibility -->
+<a id="schemayourvote"></a>
+<a id="schema_YourVote"></a>
+<a id="tocSyourvote"></a>
+<a id="tocsyourvote"></a>
+
+```json
+{}
+
+```
+
+Will be null if you haven't voted, or an empty object if you have.
+
+### Properties
+
+*None*
+