+
+> **BlockComponentProps**\<`P`\> = `P` & `object`
+
+## Type declaration
+
+### children?
+
+> `optional` **children**: `JSX.Children`
+
+## Type Parameters
+
+### P
+
+`P` = \{\}
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/Context.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/Context.md
new file mode 100644
index 00000000..fea60e96
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/Context.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Type Alias: Context
+
+> **Context** = [`ContextAPIClients`](../../../../type-aliases/ContextAPIClients.md) & [`BaseContext`](../../../../type-aliases/BaseContext.md)
+
+The current app context of the event or render.
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/CustomPostComponent.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/CustomPostComponent.md
new file mode 100644
index 00000000..73d28e00
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/CustomPostComponent.md
@@ -0,0 +1,17 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Type Alias: CustomPostComponent()
+
+> **CustomPostComponent** = (`context`) => `JSX.Element`
+
+## Parameters
+
+### context
+
+[`Context`](Context.md)
+
+## Returns
+
+`JSX.Element`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/ElementChildren.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/ElementChildren.md
new file mode 100644
index 00000000..45e9696d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/ElementChildren.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Type Alias: ElementChildren
+
+> **ElementChildren** = `JSX.Element` \| `JSX.Children` \| `undefined`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/Fragment.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/Fragment.md
new file mode 100644
index 00000000..fe00fa5f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/Fragment.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Type Alias: Fragment
+
+> **Fragment** = `JSX.Fragment`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/StringChild.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/StringChild.md
new file mode 100644
index 00000000..d59c8e23
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/StringChild.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Type Alias: StringChild
+
+> **StringChild** = [`Fragment`](Fragment.md) \| `string` \| `number`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/StringChildren.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/StringChildren.md
new file mode 100644
index 00000000..6aacd561
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/Devvit/type-aliases/StringChildren.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Type Alias: StringChildren
+
+> **StringChildren** = [`StringChild`](StringChild.md) \| ([`StringChild`](StringChild.md) \| [`StringChild`](StringChild.md)[])[] \| `undefined`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/README.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/README.md
new file mode 100644
index 00000000..3f6a5d27
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/README.md
@@ -0,0 +1,82 @@
+[**@devvit/public-api v0.13.0-dev**](../../../README.md)
+
+***
+
+# EventTypes
+
+#events.ts
+
+Code generated by ts-proto. DO NOT EDIT.
+
+## Interfaces
+
+- [AccountDelete](interfaces/AccountDelete.md)
+- [AppInstall](interfaces/AppInstall.md)
+- [AppUpgrade](interfaces/AppUpgrade.md)
+- [AutomoderatorFilterComment](interfaces/AutomoderatorFilterComment.md)
+- [AutomoderatorFilterPost](interfaces/AutomoderatorFilterPost.md)
+- [CommentApprove](interfaces/CommentApprove.md)
+- [CommentCreate](interfaces/CommentCreate.md)
+- [CommentDelete](interfaces/CommentDelete.md)
+- [CommentReport](interfaces/CommentReport.md)
+- [CommentSubmit](interfaces/CommentSubmit.md)
+- [CommentUpdate](interfaces/CommentUpdate.md)
+- [PostApprove](interfaces/PostApprove.md)
+- [PostCreate](interfaces/PostCreate.md)
+- [PostDelete](interfaces/PostDelete.md)
+- [PostFlairUpdate](interfaces/PostFlairUpdate.md)
+- [PostNsfwUpdate](interfaces/PostNsfwUpdate.md)
+- [PostReport](interfaces/PostReport.md)
+- [PostSpoilerUpdate](interfaces/PostSpoilerUpdate.md)
+- [PostSubmit](interfaces/PostSubmit.md)
+- [PostUpdate](interfaces/PostUpdate.md)
+- [SubredditSubscribe](interfaces/SubredditSubscribe.md)
+- [Vote](interfaces/Vote.md)
+
+## Variables
+
+- [AccountDelete](variables/AccountDelete.md)
+- [AppInstall](variables/AppInstall.md)
+- [AppUpgrade](variables/AppUpgrade.md)
+- [AutomoderatorFilterComment](variables/AutomoderatorFilterComment.md)
+- [AutomoderatorFilterPost](variables/AutomoderatorFilterPost.md)
+- [CommentApprove](variables/CommentApprove.md)
+- [CommentCreate](variables/CommentCreate.md)
+- [CommentDelete](variables/CommentDelete.md)
+- [CommentReport](variables/CommentReport.md)
+- [CommentSubmit](variables/CommentSubmit.md)
+- [CommentUpdate](variables/CommentUpdate.md)
+- [PostApprove](variables/PostApprove.md)
+- [PostCreate](variables/PostCreate.md)
+- [PostDelete](variables/PostDelete.md)
+- [PostFlairUpdate](variables/PostFlairUpdate.md)
+- [PostNsfwUpdate](variables/PostNsfwUpdate.md)
+- [PostReport](variables/PostReport.md)
+- [PostSpoilerUpdate](variables/PostSpoilerUpdate.md)
+- [PostSubmit](variables/PostSubmit.md)
+- [PostUpdate](variables/PostUpdate.md)
+- [SubredditSubscribe](variables/SubredditSubscribe.md)
+- [Vote](variables/Vote.md)
+
+## Functions
+
+- [deletionReasonFromJSON](functions/deletionReasonFromJSON.md)
+- [deletionReasonToJSON](functions/deletionReasonToJSON.md)
+- [eventSourceFromJSON](functions/eventSourceFromJSON.md)
+- [eventSourceToJSON](functions/eventSourceToJSON.md)
+
+## References
+
+
+
+### DeletionReason
+
+Re-exports [DeletionReason](../../../enumerations/DeletionReason.md)
+
+***
+
+
+
+### EventSource
+
+Re-exports [EventSource](../../../enumerations/EventSource.md)
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/deletionReasonFromJSON.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/deletionReasonFromJSON.md
new file mode 100644
index 00000000..4f277c83
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/deletionReasonFromJSON.md
@@ -0,0 +1,17 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Function: deletionReasonFromJSON()
+
+> **deletionReasonFromJSON**(`object`): [`DeletionReason`](../../../../enumerations/DeletionReason.md)
+
+## Parameters
+
+### object
+
+`any`
+
+## Returns
+
+[`DeletionReason`](../../../../enumerations/DeletionReason.md)
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/deletionReasonToJSON.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/deletionReasonToJSON.md
new file mode 100644
index 00000000..181e56e0
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/deletionReasonToJSON.md
@@ -0,0 +1,17 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Function: deletionReasonToJSON()
+
+> **deletionReasonToJSON**(`object`): `number`
+
+## Parameters
+
+### object
+
+[`DeletionReason`](../../../../enumerations/DeletionReason.md)
+
+## Returns
+
+`number`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/eventSourceFromJSON.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/eventSourceFromJSON.md
new file mode 100644
index 00000000..3808a778
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/eventSourceFromJSON.md
@@ -0,0 +1,17 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Function: eventSourceFromJSON()
+
+> **eventSourceFromJSON**(`object`): [`EventSource`](../../../../enumerations/EventSource.md)
+
+## Parameters
+
+### object
+
+`any`
+
+## Returns
+
+[`EventSource`](../../../../enumerations/EventSource.md)
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/eventSourceToJSON.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/eventSourceToJSON.md
new file mode 100644
index 00000000..35a546fe
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/functions/eventSourceToJSON.md
@@ -0,0 +1,17 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Function: eventSourceToJSON()
+
+> **eventSourceToJSON**(`object`): `number`
+
+## Parameters
+
+### object
+
+[`EventSource`](../../../../enumerations/EventSource.md)
+
+## Returns
+
+`number`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AccountDelete.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AccountDelete.md
new file mode 100644
index 00000000..6c424f37
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AccountDelete.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: AccountDelete
+
+## Properties
+
+
+
+### deletedAt?
+
+> `optional` **deletedAt**: `Date`
+
+***
+
+
+
+### user?
+
+> `optional` **user**: `UserV2`
+
+***
+
+
+
+### userId
+
+> **userId**: `string`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AppInstall.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AppInstall.md
new file mode 100644
index 00000000..1131edda
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AppInstall.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: AppInstall
+
+## Properties
+
+
+
+### installer?
+
+> `optional` **installer**: `UserV2`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AppUpgrade.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AppUpgrade.md
new file mode 100644
index 00000000..7d8080b2
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AppUpgrade.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: AppUpgrade
+
+## Properties
+
+
+
+### installer?
+
+> `optional` **installer**: `UserV2`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterComment.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterComment.md
new file mode 100644
index 00000000..10d39b67
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterComment.md
@@ -0,0 +1,45 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: AutomoderatorFilterComment
+
+## Properties
+
+
+
+### author
+
+> **author**: `string`
+
+***
+
+
+
+### comment?
+
+> `optional` **comment**: `CommentV2`
+
+***
+
+
+
+### reason
+
+> **reason**: `string`
+
+***
+
+
+
+### removedAt?
+
+> `optional` **removedAt**: `Date`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterPost.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterPost.md
new file mode 100644
index 00000000..68d4b467
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterPost.md
@@ -0,0 +1,45 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: AutomoderatorFilterPost
+
+## Properties
+
+
+
+### author
+
+> **author**: `string`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### reason
+
+> **reason**: `string`
+
+***
+
+
+
+### removedAt?
+
+> `optional` **removedAt**: `Date`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentApprove.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentApprove.md
new file mode 100644
index 00000000..2ed18565
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentApprove.md
@@ -0,0 +1,53 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: CommentApprove
+
+## Properties
+
+
+
+### approvedAt?
+
+> `optional` **approvedAt**: `Date`
+
+***
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### comment?
+
+> `optional` **comment**: `CommentV2`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### source
+
+> **source**: [`EventSource`](../../../../enumerations/EventSource.md)
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentCreate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentCreate.md
new file mode 100644
index 00000000..0d3cdacd
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentCreate.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: CommentCreate
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### comment?
+
+> `optional` **comment**: `CommentV2`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentDelete.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentDelete.md
new file mode 100644
index 00000000..d3f278d1
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentDelete.md
@@ -0,0 +1,77 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: CommentDelete
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### commentId
+
+> **commentId**: `string`
+
+***
+
+
+
+### createdAt?
+
+> `optional` **createdAt**: `Date`
+
+***
+
+
+
+### deletedAt?
+
+> `optional` **deletedAt**: `Date`
+
+***
+
+
+
+### parentId
+
+> **parentId**: `string`
+
+***
+
+
+
+### postId
+
+> **postId**: `string`
+
+***
+
+
+
+### reason
+
+> **reason**: [`DeletionReason`](../../../../enumerations/DeletionReason.md)
+
+***
+
+
+
+### source
+
+> **source**: [`EventSource`](../../../../enumerations/EventSource.md)
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentReport.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentReport.md
new file mode 100644
index 00000000..a25ad23d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentReport.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: CommentReport
+
+## Properties
+
+
+
+### comment?
+
+> `optional` **comment**: `CommentV2`
+
+***
+
+
+
+### reason
+
+> **reason**: `string`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentSubmit.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentSubmit.md
new file mode 100644
index 00000000..faaab9bc
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentSubmit.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: CommentSubmit
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### comment?
+
+> `optional` **comment**: `CommentV2`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentUpdate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentUpdate.md
new file mode 100644
index 00000000..d640a0c4
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/CommentUpdate.md
@@ -0,0 +1,45 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: CommentUpdate
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### comment?
+
+> `optional` **comment**: `CommentV2`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### previousBody
+
+> **previousBody**: `string`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostApprove.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostApprove.md
new file mode 100644
index 00000000..8b156879
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostApprove.md
@@ -0,0 +1,45 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: PostApprove
+
+## Properties
+
+
+
+### approvedAt?
+
+> `optional` **approvedAt**: `Date`
+
+***
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### source
+
+> **source**: [`EventSource`](../../../../enumerations/EventSource.md)
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostCreate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostCreate.md
new file mode 100644
index 00000000..9097a9d1
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostCreate.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: PostCreate
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostDelete.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostDelete.md
new file mode 100644
index 00000000..b38ba495
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostDelete.md
@@ -0,0 +1,61 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: PostDelete
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### createdAt?
+
+> `optional` **createdAt**: `Date`
+
+***
+
+
+
+### deletedAt?
+
+> `optional` **deletedAt**: `Date`
+
+***
+
+
+
+### postId
+
+> **postId**: `string`
+
+***
+
+
+
+### reason
+
+> **reason**: [`DeletionReason`](../../../../enumerations/DeletionReason.md)
+
+***
+
+
+
+### source
+
+> **source**: [`EventSource`](../../../../enumerations/EventSource.md)
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostFlairUpdate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostFlairUpdate.md
new file mode 100644
index 00000000..1fc3c71e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostFlairUpdate.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: PostFlairUpdate
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostNsfwUpdate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostNsfwUpdate.md
new file mode 100644
index 00000000..80870825
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostNsfwUpdate.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: PostNsfwUpdate
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### isNsfw
+
+> **isNsfw**: `boolean`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostReport.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostReport.md
new file mode 100644
index 00000000..8d0f174d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostReport.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: PostReport
+
+## Properties
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### reason
+
+> **reason**: `string`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostSpoilerUpdate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostSpoilerUpdate.md
new file mode 100644
index 00000000..7f1ff1fa
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostSpoilerUpdate.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: PostSpoilerUpdate
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### isSpoiler
+
+> **isSpoiler**: `boolean`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostSubmit.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostSubmit.md
new file mode 100644
index 00000000..730f87da
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostSubmit.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: PostSubmit
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostUpdate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostUpdate.md
new file mode 100644
index 00000000..f69e1143
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/PostUpdate.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: PostUpdate
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `UserV2`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### previousBody
+
+> **previousBody**: `string`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/SubredditSubscribe.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/SubredditSubscribe.md
new file mode 100644
index 00000000..eed5eb1c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/SubredditSubscribe.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: SubredditSubscribe
+
+## Properties
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
+
+***
+
+
+
+### subscriber?
+
+> `optional` **subscriber**: `UserV2`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/Vote.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/Vote.md
new file mode 100644
index 00000000..75133489
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/interfaces/Vote.md
@@ -0,0 +1,53 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Interface: Vote
+
+## Properties
+
+
+
+### comment?
+
+> `optional` **comment**: `CommentV2`
+
+***
+
+
+
+### post?
+
+> `optional` **post**: `PostV2`
+
+***
+
+
+
+### score
+
+> **score**: `number`
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `SubredditV2`
+
+***
+
+
+
+### updatedAt?
+
+> `optional` **updatedAt**: `Date`
+
+***
+
+
+
+### upvoteRatio
+
+> **upvoteRatio**: `number`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AccountDelete.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AccountDelete.md
new file mode 100644
index 00000000..4c17b646
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AccountDelete.md
@@ -0,0 +1,287 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: AccountDelete
+
+> **AccountDelete**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.AccountDelete"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### deletedAt?
+
+`Date`
+
+###### user?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### user.banned?
+
+`boolean`
+
+###### user.description?
+
+`string`
+
+###### user.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### user.flair.backgroundColor?
+
+`string`
+
+###### user.flair.cssClass?
+
+`string`
+
+###### user.flair.enabled?
+
+`boolean`
+
+###### user.flair.subredditId?
+
+`string`
+
+###### user.flair.templateId?
+
+`string`
+
+###### user.flair.text?
+
+`string`
+
+###### user.flair.textColor?
+
+`string`
+
+###### user.flair.userId?
+
+`string`
+
+###### user.iconImage?
+
+`string`
+
+###### user.id?
+
+`string`
+
+###### user.isGold?
+
+`boolean`
+
+###### user.karma?
+
+`number`
+
+###### user.name?
+
+`string`
+
+###### user.snoovatarImage?
+
+`string`
+
+###### user.spam?
+
+`boolean`
+
+###### user.suspended?
+
+`boolean`
+
+###### user.url?
+
+`string`
+
+###### userId?
+
+`string`
+
+#### Returns
+
+[`AccountDelete`](../interfaces/AccountDelete.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`AccountDelete`](../interfaces/AccountDelete.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`AccountDelete`](../interfaces/AccountDelete.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`AccountDelete`](../interfaces/AccountDelete.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### deletedAt?
+
+`Date`
+
+###### user?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### user.banned?
+
+`boolean`
+
+###### user.description?
+
+`string`
+
+###### user.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### user.flair.backgroundColor?
+
+`string`
+
+###### user.flair.cssClass?
+
+`string`
+
+###### user.flair.enabled?
+
+`boolean`
+
+###### user.flair.subredditId?
+
+`string`
+
+###### user.flair.templateId?
+
+`string`
+
+###### user.flair.text?
+
+`string`
+
+###### user.flair.textColor?
+
+`string`
+
+###### user.flair.userId?
+
+`string`
+
+###### user.iconImage?
+
+`string`
+
+###### user.id?
+
+`string`
+
+###### user.isGold?
+
+`boolean`
+
+###### user.karma?
+
+`number`
+
+###### user.name?
+
+`string`
+
+###### user.snoovatarImage?
+
+`string`
+
+###### user.spam?
+
+`boolean`
+
+###### user.suspended?
+
+`boolean`
+
+###### user.url?
+
+`string`
+
+###### userId?
+
+`string`
+
+#### Returns
+
+[`AccountDelete`](../interfaces/AccountDelete.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`AccountDelete`](../interfaces/AccountDelete.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AppInstall.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AppInstall.md
new file mode 100644
index 00000000..cce0475f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AppInstall.md
@@ -0,0 +1,375 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: AppInstall
+
+> **AppInstall**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.AppInstall"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### installer?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### installer.banned?
+
+`boolean`
+
+###### installer.description?
+
+`string`
+
+###### installer.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### installer.flair.backgroundColor?
+
+`string`
+
+###### installer.flair.cssClass?
+
+`string`
+
+###### installer.flair.enabled?
+
+`boolean`
+
+###### installer.flair.subredditId?
+
+`string`
+
+###### installer.flair.templateId?
+
+`string`
+
+###### installer.flair.text?
+
+`string`
+
+###### installer.flair.textColor?
+
+`string`
+
+###### installer.flair.userId?
+
+`string`
+
+###### installer.iconImage?
+
+`string`
+
+###### installer.id?
+
+`string`
+
+###### installer.isGold?
+
+`boolean`
+
+###### installer.karma?
+
+`number`
+
+###### installer.name?
+
+`string`
+
+###### installer.snoovatarImage?
+
+`string`
+
+###### installer.spam?
+
+`boolean`
+
+###### installer.suspended?
+
+`boolean`
+
+###### installer.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`AppInstall`](../interfaces/AppInstall.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`AppInstall`](../interfaces/AppInstall.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`AppInstall`](../interfaces/AppInstall.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`AppInstall`](../interfaces/AppInstall.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### installer?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### installer.banned?
+
+`boolean`
+
+###### installer.description?
+
+`string`
+
+###### installer.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### installer.flair.backgroundColor?
+
+`string`
+
+###### installer.flair.cssClass?
+
+`string`
+
+###### installer.flair.enabled?
+
+`boolean`
+
+###### installer.flair.subredditId?
+
+`string`
+
+###### installer.flair.templateId?
+
+`string`
+
+###### installer.flair.text?
+
+`string`
+
+###### installer.flair.textColor?
+
+`string`
+
+###### installer.flair.userId?
+
+`string`
+
+###### installer.iconImage?
+
+`string`
+
+###### installer.id?
+
+`string`
+
+###### installer.isGold?
+
+`boolean`
+
+###### installer.karma?
+
+`number`
+
+###### installer.name?
+
+`string`
+
+###### installer.snoovatarImage?
+
+`string`
+
+###### installer.spam?
+
+`boolean`
+
+###### installer.suspended?
+
+`boolean`
+
+###### installer.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`AppInstall`](../interfaces/AppInstall.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`AppInstall`](../interfaces/AppInstall.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AppUpgrade.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AppUpgrade.md
new file mode 100644
index 00000000..b39619bc
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AppUpgrade.md
@@ -0,0 +1,375 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: AppUpgrade
+
+> **AppUpgrade**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.AppUpgrade"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### installer?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### installer.banned?
+
+`boolean`
+
+###### installer.description?
+
+`string`
+
+###### installer.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### installer.flair.backgroundColor?
+
+`string`
+
+###### installer.flair.cssClass?
+
+`string`
+
+###### installer.flair.enabled?
+
+`boolean`
+
+###### installer.flair.subredditId?
+
+`string`
+
+###### installer.flair.templateId?
+
+`string`
+
+###### installer.flair.text?
+
+`string`
+
+###### installer.flair.textColor?
+
+`string`
+
+###### installer.flair.userId?
+
+`string`
+
+###### installer.iconImage?
+
+`string`
+
+###### installer.id?
+
+`string`
+
+###### installer.isGold?
+
+`boolean`
+
+###### installer.karma?
+
+`number`
+
+###### installer.name?
+
+`string`
+
+###### installer.snoovatarImage?
+
+`string`
+
+###### installer.spam?
+
+`boolean`
+
+###### installer.suspended?
+
+`boolean`
+
+###### installer.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`AppUpgrade`](../interfaces/AppUpgrade.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`AppUpgrade`](../interfaces/AppUpgrade.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`AppUpgrade`](../interfaces/AppUpgrade.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`AppUpgrade`](../interfaces/AppUpgrade.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### installer?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### installer.banned?
+
+`boolean`
+
+###### installer.description?
+
+`string`
+
+###### installer.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### installer.flair.backgroundColor?
+
+`string`
+
+###### installer.flair.cssClass?
+
+`string`
+
+###### installer.flair.enabled?
+
+`boolean`
+
+###### installer.flair.subredditId?
+
+`string`
+
+###### installer.flair.templateId?
+
+`string`
+
+###### installer.flair.text?
+
+`string`
+
+###### installer.flair.textColor?
+
+`string`
+
+###### installer.flair.userId?
+
+`string`
+
+###### installer.iconImage?
+
+`string`
+
+###### installer.id?
+
+`string`
+
+###### installer.isGold?
+
+`boolean`
+
+###### installer.karma?
+
+`number`
+
+###### installer.name?
+
+`string`
+
+###### installer.snoovatarImage?
+
+`string`
+
+###### installer.spam?
+
+`boolean`
+
+###### installer.suspended?
+
+`boolean`
+
+###### installer.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`AppUpgrade`](../interfaces/AppUpgrade.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`AppUpgrade`](../interfaces/AppUpgrade.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AutomoderatorFilterComment.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AutomoderatorFilterComment.md
new file mode 100644
index 00000000..fa1cd56e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AutomoderatorFilterComment.md
@@ -0,0 +1,407 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: AutomoderatorFilterComment
+
+> **AutomoderatorFilterComment**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.AutomoderatorFilterComment"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+`string`
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### reason?
+
+`string`
+
+###### removedAt?
+
+`Date`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`AutomoderatorFilterComment`](../interfaces/AutomoderatorFilterComment.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`AutomoderatorFilterComment`](../interfaces/AutomoderatorFilterComment.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`AutomoderatorFilterComment`](../interfaces/AutomoderatorFilterComment.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`AutomoderatorFilterComment`](../interfaces/AutomoderatorFilterComment.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+`string`
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### reason?
+
+`string`
+
+###### removedAt?
+
+`Date`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`AutomoderatorFilterComment`](../interfaces/AutomoderatorFilterComment.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`AutomoderatorFilterComment`](../interfaces/AutomoderatorFilterComment.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AutomoderatorFilterPost.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AutomoderatorFilterPost.md
new file mode 100644
index 00000000..5b2995da
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/AutomoderatorFilterPost.md
@@ -0,0 +1,927 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: AutomoderatorFilterPost
+
+> **AutomoderatorFilterPost**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.AutomoderatorFilterPost"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### reason?
+
+`string`
+
+###### removedAt?
+
+`Date`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`AutomoderatorFilterPost`](../interfaces/AutomoderatorFilterPost.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`AutomoderatorFilterPost`](../interfaces/AutomoderatorFilterPost.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`AutomoderatorFilterPost`](../interfaces/AutomoderatorFilterPost.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`AutomoderatorFilterPost`](../interfaces/AutomoderatorFilterPost.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### reason?
+
+`string`
+
+###### removedAt?
+
+`Date`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`AutomoderatorFilterPost`](../interfaces/AutomoderatorFilterPost.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`AutomoderatorFilterPost`](../interfaces/AutomoderatorFilterPost.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentApprove.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentApprove.md
new file mode 100644
index 00000000..6f1e839d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentApprove.md
@@ -0,0 +1,1263 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: CommentApprove
+
+> **CommentApprove**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.CommentApprove"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### approvedAt?
+
+`Date`
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### source?
+
+[`EventSource`](../../../../enumerations/EventSource.md)
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentApprove`](../interfaces/CommentApprove.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`CommentApprove`](../interfaces/CommentApprove.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`CommentApprove`](../interfaces/CommentApprove.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`CommentApprove`](../interfaces/CommentApprove.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### approvedAt?
+
+`Date`
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### source?
+
+[`EventSource`](../../../../enumerations/EventSource.md)
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentApprove`](../interfaces/CommentApprove.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`CommentApprove`](../interfaces/CommentApprove.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentCreate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentCreate.md
new file mode 100644
index 00000000..df8b318e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentCreate.md
@@ -0,0 +1,1247 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: CommentCreate
+
+> **CommentCreate**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.CommentCreate"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentCreate`](../interfaces/CommentCreate.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`CommentCreate`](../interfaces/CommentCreate.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`CommentCreate`](../interfaces/CommentCreate.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`CommentCreate`](../interfaces/CommentCreate.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentCreate`](../interfaces/CommentCreate.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`CommentCreate`](../interfaces/CommentCreate.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentDelete.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentDelete.md
new file mode 100644
index 00000000..225fcd80
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentDelete.md
@@ -0,0 +1,431 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: CommentDelete
+
+> **CommentDelete**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.CommentDelete"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### commentId?
+
+`string`
+
+###### createdAt?
+
+`Date`
+
+###### deletedAt?
+
+`Date`
+
+###### parentId?
+
+`string`
+
+###### postId?
+
+`string`
+
+###### reason?
+
+[`DeletionReason`](../../../../enumerations/DeletionReason.md)
+
+###### source?
+
+[`EventSource`](../../../../enumerations/EventSource.md)
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentDelete`](../interfaces/CommentDelete.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`CommentDelete`](../interfaces/CommentDelete.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`CommentDelete`](../interfaces/CommentDelete.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`CommentDelete`](../interfaces/CommentDelete.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### commentId?
+
+`string`
+
+###### createdAt?
+
+`Date`
+
+###### deletedAt?
+
+`Date`
+
+###### parentId?
+
+`string`
+
+###### postId?
+
+`string`
+
+###### reason?
+
+[`DeletionReason`](../../../../enumerations/DeletionReason.md)
+
+###### source?
+
+[`EventSource`](../../../../enumerations/EventSource.md)
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentDelete`](../interfaces/CommentDelete.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`CommentDelete`](../interfaces/CommentDelete.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentReport.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentReport.md
new file mode 100644
index 00000000..e9d74f2b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentReport.md
@@ -0,0 +1,391 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: CommentReport
+
+> **CommentReport**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.CommentReport"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### reason?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentReport`](../interfaces/CommentReport.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`CommentReport`](../interfaces/CommentReport.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`CommentReport`](../interfaces/CommentReport.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`CommentReport`](../interfaces/CommentReport.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### reason?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentReport`](../interfaces/CommentReport.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`CommentReport`](../interfaces/CommentReport.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentSubmit.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentSubmit.md
new file mode 100644
index 00000000..ceece224
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentSubmit.md
@@ -0,0 +1,1247 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: CommentSubmit
+
+> **CommentSubmit**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.CommentSubmit"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentSubmit`](../interfaces/CommentSubmit.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`CommentSubmit`](../interfaces/CommentSubmit.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`CommentSubmit`](../interfaces/CommentSubmit.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`CommentSubmit`](../interfaces/CommentSubmit.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentSubmit`](../interfaces/CommentSubmit.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`CommentSubmit`](../interfaces/CommentSubmit.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentUpdate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentUpdate.md
new file mode 100644
index 00000000..6056a022
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/CommentUpdate.md
@@ -0,0 +1,1255 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: CommentUpdate
+
+> **CommentUpdate**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.CommentUpdate"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### previousBody?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentUpdate`](../interfaces/CommentUpdate.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`CommentUpdate`](../interfaces/CommentUpdate.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`CommentUpdate`](../interfaces/CommentUpdate.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`CommentUpdate`](../interfaces/CommentUpdate.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### previousBody?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`CommentUpdate`](../interfaces/CommentUpdate.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`CommentUpdate`](../interfaces/CommentUpdate.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostApprove.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostApprove.md
new file mode 100644
index 00000000..dbe9f556
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostApprove.md
@@ -0,0 +1,1087 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: PostApprove
+
+> **PostApprove**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.PostApprove"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### approvedAt?
+
+`Date`
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### source?
+
+[`EventSource`](../../../../enumerations/EventSource.md)
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostApprove`](../interfaces/PostApprove.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`PostApprove`](../interfaces/PostApprove.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`PostApprove`](../interfaces/PostApprove.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`PostApprove`](../interfaces/PostApprove.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### approvedAt?
+
+`Date`
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### source?
+
+[`EventSource`](../../../../enumerations/EventSource.md)
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostApprove`](../interfaces/PostApprove.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`PostApprove`](../interfaces/PostApprove.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostCreate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostCreate.md
new file mode 100644
index 00000000..252a9fda
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostCreate.md
@@ -0,0 +1,1071 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: PostCreate
+
+> **PostCreate**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.PostCreate"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostCreate`](../interfaces/PostCreate.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`PostCreate`](../interfaces/PostCreate.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`PostCreate`](../interfaces/PostCreate.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`PostCreate`](../interfaces/PostCreate.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostCreate`](../interfaces/PostCreate.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`PostCreate`](../interfaces/PostCreate.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostDelete.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostDelete.md
new file mode 100644
index 00000000..ad4face9
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostDelete.md
@@ -0,0 +1,415 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: PostDelete
+
+> **PostDelete**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.PostDelete"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### createdAt?
+
+`Date`
+
+###### deletedAt?
+
+`Date`
+
+###### postId?
+
+`string`
+
+###### reason?
+
+[`DeletionReason`](../../../../enumerations/DeletionReason.md)
+
+###### source?
+
+[`EventSource`](../../../../enumerations/EventSource.md)
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostDelete`](../interfaces/PostDelete.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`PostDelete`](../interfaces/PostDelete.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`PostDelete`](../interfaces/PostDelete.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`PostDelete`](../interfaces/PostDelete.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### createdAt?
+
+`Date`
+
+###### deletedAt?
+
+`Date`
+
+###### postId?
+
+`string`
+
+###### reason?
+
+[`DeletionReason`](../../../../enumerations/DeletionReason.md)
+
+###### source?
+
+[`EventSource`](../../../../enumerations/EventSource.md)
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostDelete`](../interfaces/PostDelete.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`PostDelete`](../interfaces/PostDelete.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostFlairUpdate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostFlairUpdate.md
new file mode 100644
index 00000000..2c0decc6
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostFlairUpdate.md
@@ -0,0 +1,1071 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: PostFlairUpdate
+
+> **PostFlairUpdate**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.PostFlairUpdate"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostFlairUpdate`](../interfaces/PostFlairUpdate.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`PostFlairUpdate`](../interfaces/PostFlairUpdate.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`PostFlairUpdate`](../interfaces/PostFlairUpdate.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`PostFlairUpdate`](../interfaces/PostFlairUpdate.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostFlairUpdate`](../interfaces/PostFlairUpdate.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`PostFlairUpdate`](../interfaces/PostFlairUpdate.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostNsfwUpdate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostNsfwUpdate.md
new file mode 100644
index 00000000..d9642b9c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostNsfwUpdate.md
@@ -0,0 +1,1079 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: PostNsfwUpdate
+
+> **PostNsfwUpdate**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.PostNsfwUpdate"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### isNsfw?
+
+`boolean`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostNsfwUpdate`](../interfaces/PostNsfwUpdate.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`PostNsfwUpdate`](../interfaces/PostNsfwUpdate.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`PostNsfwUpdate`](../interfaces/PostNsfwUpdate.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`PostNsfwUpdate`](../interfaces/PostNsfwUpdate.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### isNsfw?
+
+`boolean`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostNsfwUpdate`](../interfaces/PostNsfwUpdate.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`PostNsfwUpdate`](../interfaces/PostNsfwUpdate.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostReport.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostReport.md
new file mode 100644
index 00000000..3e165767
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostReport.md
@@ -0,0 +1,911 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: PostReport
+
+> **PostReport**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.PostReport"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### reason?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostReport`](../interfaces/PostReport.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`PostReport`](../interfaces/PostReport.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`PostReport`](../interfaces/PostReport.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`PostReport`](../interfaces/PostReport.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### reason?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostReport`](../interfaces/PostReport.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`PostReport`](../interfaces/PostReport.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostSpoilerUpdate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostSpoilerUpdate.md
new file mode 100644
index 00000000..5ae908ef
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostSpoilerUpdate.md
@@ -0,0 +1,1079 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: PostSpoilerUpdate
+
+> **PostSpoilerUpdate**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.PostSpoilerUpdate"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### isSpoiler?
+
+`boolean`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostSpoilerUpdate`](../interfaces/PostSpoilerUpdate.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`PostSpoilerUpdate`](../interfaces/PostSpoilerUpdate.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`PostSpoilerUpdate`](../interfaces/PostSpoilerUpdate.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`PostSpoilerUpdate`](../interfaces/PostSpoilerUpdate.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### isSpoiler?
+
+`boolean`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostSpoilerUpdate`](../interfaces/PostSpoilerUpdate.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`PostSpoilerUpdate`](../interfaces/PostSpoilerUpdate.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostSubmit.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostSubmit.md
new file mode 100644
index 00000000..92a37319
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostSubmit.md
@@ -0,0 +1,1071 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: PostSubmit
+
+> **PostSubmit**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.PostSubmit"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostSubmit`](../interfaces/PostSubmit.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`PostSubmit`](../interfaces/PostSubmit.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`PostSubmit`](../interfaces/PostSubmit.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`PostSubmit`](../interfaces/PostSubmit.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostSubmit`](../interfaces/PostSubmit.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`PostSubmit`](../interfaces/PostSubmit.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostUpdate.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostUpdate.md
new file mode 100644
index 00000000..2cf8730c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/PostUpdate.md
@@ -0,0 +1,1079 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: PostUpdate
+
+> **PostUpdate**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.PostUpdate"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### previousBody?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostUpdate`](../interfaces/PostUpdate.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`PostUpdate`](../interfaces/PostUpdate.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`PostUpdate`](../interfaces/PostUpdate.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`PostUpdate`](../interfaces/PostUpdate.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### author?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### author.banned?
+
+`boolean`
+
+###### author.description?
+
+`string`
+
+###### author.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### author.flair.backgroundColor?
+
+`string`
+
+###### author.flair.cssClass?
+
+`string`
+
+###### author.flair.enabled?
+
+`boolean`
+
+###### author.flair.subredditId?
+
+`string`
+
+###### author.flair.templateId?
+
+`string`
+
+###### author.flair.text?
+
+`string`
+
+###### author.flair.textColor?
+
+`string`
+
+###### author.flair.userId?
+
+`string`
+
+###### author.iconImage?
+
+`string`
+
+###### author.id?
+
+`string`
+
+###### author.isGold?
+
+`boolean`
+
+###### author.karma?
+
+`number`
+
+###### author.name?
+
+`string`
+
+###### author.snoovatarImage?
+
+`string`
+
+###### author.spam?
+
+`boolean`
+
+###### author.suspended?
+
+`boolean`
+
+###### author.url?
+
+`string`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### previousBody?
+
+`string`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+#### Returns
+
+[`PostUpdate`](../interfaces/PostUpdate.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`PostUpdate`](../interfaces/PostUpdate.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/SubredditSubscribe.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/SubredditSubscribe.md
new file mode 100644
index 00000000..b61eba02
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/SubredditSubscribe.md
@@ -0,0 +1,375 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: SubredditSubscribe
+
+> **SubredditSubscribe**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.SubredditSubscribe"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+###### subscriber?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### subscriber.banned?
+
+`boolean`
+
+###### subscriber.description?
+
+`string`
+
+###### subscriber.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### subscriber.flair.backgroundColor?
+
+`string`
+
+###### subscriber.flair.cssClass?
+
+`string`
+
+###### subscriber.flair.enabled?
+
+`boolean`
+
+###### subscriber.flair.subredditId?
+
+`string`
+
+###### subscriber.flair.templateId?
+
+`string`
+
+###### subscriber.flair.text?
+
+`string`
+
+###### subscriber.flair.textColor?
+
+`string`
+
+###### subscriber.flair.userId?
+
+`string`
+
+###### subscriber.iconImage?
+
+`string`
+
+###### subscriber.id?
+
+`string`
+
+###### subscriber.isGold?
+
+`boolean`
+
+###### subscriber.karma?
+
+`number`
+
+###### subscriber.name?
+
+`string`
+
+###### subscriber.snoovatarImage?
+
+`string`
+
+###### subscriber.spam?
+
+`boolean`
+
+###### subscriber.suspended?
+
+`boolean`
+
+###### subscriber.url?
+
+`string`
+
+#### Returns
+
+[`SubredditSubscribe`](../interfaces/SubredditSubscribe.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`SubredditSubscribe`](../interfaces/SubredditSubscribe.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`SubredditSubscribe`](../interfaces/SubredditSubscribe.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`SubredditSubscribe`](../interfaces/SubredditSubscribe.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+###### subscriber?
+
+\{ `banned`: `boolean`; `description`: `string`; `flair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `iconImage`: `string`; `id`: `string`; `isGold`: `boolean`; `karma`: `number`; `name`: `string`; `snoovatarImage`: `string`; `spam`: `boolean`; `suspended`: `boolean`; `url`: `string`; \}
+
+###### subscriber.banned?
+
+`boolean`
+
+###### subscriber.description?
+
+`string`
+
+###### subscriber.flair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### subscriber.flair.backgroundColor?
+
+`string`
+
+###### subscriber.flair.cssClass?
+
+`string`
+
+###### subscriber.flair.enabled?
+
+`boolean`
+
+###### subscriber.flair.subredditId?
+
+`string`
+
+###### subscriber.flair.templateId?
+
+`string`
+
+###### subscriber.flair.text?
+
+`string`
+
+###### subscriber.flair.textColor?
+
+`string`
+
+###### subscriber.flair.userId?
+
+`string`
+
+###### subscriber.iconImage?
+
+`string`
+
+###### subscriber.id?
+
+`string`
+
+###### subscriber.isGold?
+
+`boolean`
+
+###### subscriber.karma?
+
+`number`
+
+###### subscriber.name?
+
+`string`
+
+###### subscriber.snoovatarImage?
+
+`string`
+
+###### subscriber.spam?
+
+`boolean`
+
+###### subscriber.suspended?
+
+`boolean`
+
+###### subscriber.url?
+
+`string`
+
+#### Returns
+
+[`SubredditSubscribe`](../interfaces/SubredditSubscribe.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`SubredditSubscribe`](../interfaces/SubredditSubscribe.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/Vote.md b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/Vote.md
new file mode 100644
index 00000000..92e5b58a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/@devvit/namespaces/EventTypes/variables/Vote.md
@@ -0,0 +1,1103 @@
+[**@devvit/public-api v0.13.0-dev**](../../../../README.md)
+
+***
+
+# Variable: Vote
+
+> **Vote**: `object`
+
+## Type declaration
+
+
+
+### $type
+
+> **$type**: `"devvit.events.v1alpha.Vote"`
+
+
+
+### create()
+
+#### Parameters
+
+##### base?
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### score?
+
+`number`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+###### updatedAt?
+
+`Date`
+
+###### upvoteRatio?
+
+`number`
+
+#### Returns
+
+[`Vote`](../interfaces/Vote.md)
+
+
+
+### decode()
+
+#### Parameters
+
+##### input
+
+`Uint8Array`\<`ArrayBufferLike`\> | `Reader`
+
+##### length?
+
+`number`
+
+#### Returns
+
+[`Vote`](../interfaces/Vote.md)
+
+
+
+### encode()
+
+#### Parameters
+
+##### message
+
+[`Vote`](../interfaces/Vote.md)
+
+##### writer?
+
+`Writer`
+
+#### Returns
+
+`Writer`
+
+
+
+### fromJSON()
+
+#### Parameters
+
+##### object
+
+`any`
+
+#### Returns
+
+[`Vote`](../interfaces/Vote.md)
+
+
+
+### fromPartial()
+
+#### Parameters
+
+##### object
+
+###### comment?
+
+\{ `author`: `string`; `body`: `string`; `collapsedBecauseCrowdControl`: `boolean`; `createdAt`: `number`; `deleted`: `boolean`; `downvotes`: `number`; `elementTypes`: `string`[]; `gilded`: `boolean`; `hasMedia`: `boolean`; `id`: `string`; `languageCode`: `string`; `lastModifiedAt`: `number`; `mediaUrls`: `string`[]; `numReports`: `number`; `parentId`: `string`; `permalink`: `string`; `postId`: `string`; `score`: `number`; `spam`: `boolean`; `subredditId`: `string`; `upvotes`: `number`; \}
+
+###### comment.author?
+
+`string`
+
+###### comment.body?
+
+`string`
+
+###### comment.collapsedBecauseCrowdControl?
+
+`boolean`
+
+###### comment.createdAt?
+
+`number`
+
+###### comment.deleted?
+
+`boolean`
+
+###### comment.downvotes?
+
+`number`
+
+###### comment.elementTypes?
+
+`string`[]
+
+###### comment.gilded?
+
+`boolean`
+
+###### comment.hasMedia?
+
+`boolean`
+
+###### comment.id?
+
+`string`
+
+###### comment.languageCode?
+
+`string`
+
+###### comment.lastModifiedAt?
+
+`number`
+
+###### comment.mediaUrls?
+
+`string`[]
+
+###### comment.numReports?
+
+`number`
+
+###### comment.parentId?
+
+`string`
+
+###### comment.permalink?
+
+`string`
+
+###### comment.postId?
+
+`string`
+
+###### comment.score?
+
+`number`
+
+###### comment.spam?
+
+`boolean`
+
+###### comment.subredditId?
+
+`string`
+
+###### comment.upvotes?
+
+`number`
+
+###### post?
+
+\{ `authorFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}; `authorId`: `string`; `createdAt`: `number`; `crosspostParentId`: `string`; `crowdControlLevel`: `CrowdControlLevel`; `deleted`: `boolean`; `distinguished`: `DistinguishType`; `downvotes`: `number`; `galleryImages`: `string`[]; `gildings`: `number`; `id`: `string`; `ignoreReports`: `boolean`; `isApproved`: `boolean`; `isArchived`: `boolean`; `isClubContent`: `boolean`; `isGallery`: `boolean`; `isImage`: `boolean`; `isLocked`: `boolean`; `isMeta`: `boolean`; `isMultiMedia`: `boolean`; `isPoll`: `boolean`; `isPromoted`: `boolean`; `isSelf`: `boolean`; `isSpoiler`: `boolean`; `isSticky`: `boolean`; `isVideo`: `boolean`; `languageCode`: `string`; `linkFlair`: \{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}; `media`: \{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}; `mediaUrls`: `string`[]; `nsfw`: `boolean`; `numComments`: `number`; `numReports`: `number`; `permalink`: `string`; `score`: `number`; `selftext`: `string`; `spam`: `boolean`; `subredditId`: `string`; `thumbnail`: `string`; `title`: `string`; `type`: `string`; `unlisted`: `boolean`; `updatedAt`: `number`; `upvotes`: `number`; `url`: `string`; \}
+
+###### post.authorFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `enabled`: `boolean`; `subredditId`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; `userId`: `string`; \}
+
+###### post.authorFlair.backgroundColor?
+
+`string`
+
+###### post.authorFlair.cssClass?
+
+`string`
+
+###### post.authorFlair.enabled?
+
+`boolean`
+
+###### post.authorFlair.subredditId?
+
+`string`
+
+###### post.authorFlair.templateId?
+
+`string`
+
+###### post.authorFlair.text?
+
+`string`
+
+###### post.authorFlair.textColor?
+
+`string`
+
+###### post.authorFlair.userId?
+
+`string`
+
+###### post.authorId?
+
+`string`
+
+###### post.createdAt?
+
+`number`
+
+###### post.crosspostParentId?
+
+`string`
+
+###### post.crowdControlLevel?
+
+`CrowdControlLevel`
+
+###### post.deleted?
+
+`boolean`
+
+###### post.distinguished?
+
+`DistinguishType`
+
+###### post.downvotes?
+
+`number`
+
+###### post.galleryImages?
+
+`string`[]
+
+###### post.gildings?
+
+`number`
+
+###### post.id?
+
+`string`
+
+###### post.ignoreReports?
+
+`boolean`
+
+###### post.isApproved?
+
+`boolean`
+
+###### post.isArchived?
+
+`boolean`
+
+###### post.isClubContent?
+
+`boolean`
+
+###### post.isGallery?
+
+`boolean`
+
+###### post.isImage?
+
+`boolean`
+
+Indicates if the post contains a single image rather than a gallery of multiple images, which is indicated by the is_gallery field.
+
+###### post.isLocked?
+
+`boolean`
+
+###### post.isMeta?
+
+`boolean`
+
+###### post.isMultiMedia?
+
+`boolean`
+
+###### post.isPoll?
+
+`boolean`
+
+###### post.isPromoted?
+
+`boolean`
+
+###### post.isSelf?
+
+`boolean`
+
+###### post.isSpoiler?
+
+`boolean`
+
+###### post.isSticky?
+
+`boolean`
+
+###### post.isVideo?
+
+`boolean`
+
+###### post.languageCode?
+
+`string`
+
+###### post.linkFlair?
+
+\{ `backgroundColor`: `string`; `cssClass`: `string`; `templateId`: `string`; `text`: `string`; `textColor`: `string`; \}
+
+###### post.linkFlair.backgroundColor?
+
+`string`
+
+###### post.linkFlair.cssClass?
+
+`string`
+
+###### post.linkFlair.templateId?
+
+`string`
+
+###### post.linkFlair.text?
+
+`string`
+
+###### post.linkFlair.textColor?
+
+`string`
+
+###### post.media?
+
+\{ `oembed`: \{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}; `redditVideo`: \{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}; `type`: `string`; \}
+
+###### post.media.oembed?
+
+\{ `authorName`: `string`; `authorUrl`: `string`; `description`: `string`; `height`: `number`; `html`: `string`; `providerName`: `string`; `providerUrl`: `string`; `thumbnailHeight`: `number`; `thumbnailUrl`: `string`; `thumbnailWidth`: `number`; `title`: `string`; `type`: `string`; `version`: `string`; `width`: `number`; \}
+
+###### post.media.oembed.authorName?
+
+`string`
+
+###### post.media.oembed.authorUrl?
+
+`string`
+
+###### post.media.oembed.description?
+
+`string`
+
+###### post.media.oembed.height?
+
+`number`
+
+###### post.media.oembed.html?
+
+`string`
+
+###### post.media.oembed.providerName?
+
+`string`
+
+###### post.media.oembed.providerUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailHeight?
+
+`number`
+
+###### post.media.oembed.thumbnailUrl?
+
+`string`
+
+###### post.media.oembed.thumbnailWidth?
+
+`number`
+
+###### post.media.oembed.title?
+
+`string`
+
+###### post.media.oembed.type?
+
+`string`
+
+###### post.media.oembed.version?
+
+`string`
+
+###### post.media.oembed.width?
+
+`number`
+
+###### post.media.redditVideo?
+
+\{ `bitrateKbps`: `number`; `dashUrl`: `string`; `duration`: `number`; `fallbackUrl`: `string`; `height`: `number`; `hlsUrl`: `string`; `isGif`: `boolean`; `scrubberMediaUrl`: `string`; `transcodingStatus`: `string`; `width`: `number`; \}
+
+###### post.media.redditVideo.bitrateKbps?
+
+`number`
+
+###### post.media.redditVideo.dashUrl?
+
+`string`
+
+###### post.media.redditVideo.duration?
+
+`number`
+
+###### post.media.redditVideo.fallbackUrl?
+
+`string`
+
+###### post.media.redditVideo.height?
+
+`number`
+
+###### post.media.redditVideo.hlsUrl?
+
+`string`
+
+###### post.media.redditVideo.isGif?
+
+`boolean`
+
+###### post.media.redditVideo.scrubberMediaUrl?
+
+`string`
+
+###### post.media.redditVideo.transcodingStatus?
+
+`string`
+
+###### post.media.redditVideo.width?
+
+`number`
+
+###### post.media.type?
+
+`string`
+
+###### post.mediaUrls?
+
+`string`[]
+
+###### post.nsfw?
+
+`boolean`
+
+###### post.numComments?
+
+`number`
+
+###### post.numReports?
+
+`number`
+
+###### post.permalink?
+
+`string`
+
+###### post.score?
+
+`number`
+
+###### post.selftext?
+
+`string`
+
+rename to text?
+
+###### post.spam?
+
+`boolean`
+
+###### post.subredditId?
+
+`string`
+
+###### post.thumbnail?
+
+`string`
+
+###### post.title?
+
+`string`
+
+###### post.type?
+
+`string`
+
+###### post.unlisted?
+
+`boolean`
+
+###### post.updatedAt?
+
+`number`
+
+###### post.upvotes?
+
+`number`
+
+###### post.url?
+
+`string`
+
+###### score?
+
+`number`
+
+###### subreddit?
+
+\{ `description`: `string`; `id`: `string`; `name`: `string`; `nsfw`: `boolean`; `permalink`: `string`; `quarantined`: `boolean`; `rating`: `SubredditRating`; `spam`: `boolean`; `subscribersCount`: `number`; `title`: `string`; `topics`: `string`[]; `type`: `SubredditType`; \}
+
+###### subreddit.description?
+
+`string`
+
+###### subreddit.id?
+
+`string`
+
+###### subreddit.name?
+
+`string`
+
+###### subreddit.nsfw?
+
+`boolean`
+
+###### subreddit.permalink?
+
+`string`
+
+###### subreddit.quarantined?
+
+`boolean`
+
+###### subreddit.rating?
+
+`SubredditRating`
+
+###### subreddit.spam?
+
+`boolean`
+
+###### subreddit.subscribersCount?
+
+`number`
+
+###### subreddit.title?
+
+`string`
+
+###### subreddit.topics?
+
+`string`[]
+
+###### subreddit.type?
+
+`SubredditType`
+
+###### updatedAt?
+
+`Date`
+
+###### upvoteRatio?
+
+`number`
+
+#### Returns
+
+[`Vote`](../interfaces/Vote.md)
+
+
+
+### toJSON()
+
+#### Parameters
+
+##### message
+
+[`Vote`](../interfaces/Vote.md)
+
+#### Returns
+
+`unknown`
diff --git a/versioned_docs/version-0.13/api/public-api/README.md b/versioned_docs/version-0.13/api/public-api/README.md
new file mode 100644
index 00000000..ac8a85e3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/README.md
@@ -0,0 +1,181 @@
+**@devvit/public-api v0.13.0-dev**
+
+***
+
+# @devvit/public-api v0.13.0-dev
+
+## Namespaces
+
+- [Devvit](@devvit/namespaces/Devvit/README.md)
+- [EventTypes](@devvit/namespaces/EventTypes/README.md)
+
+## Enumerations
+
+- [DeletionReason](enumerations/DeletionReason.md)
+- [EventSource](enumerations/EventSource.md)
+- [SettingScope](enumerations/SettingScope.md)
+
+## Classes
+
+- [Devvit](classes/Devvit.md)
+- [RichTextBuilder](classes/RichTextBuilder.md)
+
+## Type Aliases
+
+- [AllIconName](type-aliases/AllIconName.md)
+- [AppInstall](type-aliases/AppInstall.md)
+- [AppInstallDefinition](type-aliases/AppInstallDefinition.md)
+- [AppUpgrade](type-aliases/AppUpgrade.md)
+- [AppUpgradeDefinition](type-aliases/AppUpgradeDefinition.md)
+- [AsyncError](type-aliases/AsyncError.md)
+- [AsyncUseStateInitializer](type-aliases/AsyncUseStateInitializer.md)
+- [AutomoderatorFilterComment](type-aliases/AutomoderatorFilterComment.md)
+- [AutomoderatorFilterPost](type-aliases/AutomoderatorFilterPost.md)
+- [BaseContext](type-aliases/BaseContext.md)
+- [BaseField](type-aliases/BaseField.md)
+- [BitfieldCommand](type-aliases/BitfieldCommand.md)
+- [BlockElement](type-aliases/BlockElement.md)
+- [BooleanField](type-aliases/BooleanField.md)
+- [CancelJob](type-aliases/CancelJob.md)
+- [CommentCreate](type-aliases/CommentCreate.md)
+- [CommentCreateDefinition](type-aliases/CommentCreateDefinition.md)
+- [CommentDelete](type-aliases/CommentDelete.md)
+- [CommentDeleteDefinition](type-aliases/CommentDeleteDefinition.md)
+- [CommentReport](type-aliases/CommentReport.md)
+- [CommentReportDefinition](type-aliases/CommentReportDefinition.md)
+- [CommentSubmit](type-aliases/CommentSubmit.md)
+- [CommentSubmitDefinition](type-aliases/CommentSubmitDefinition.md)
+- [CommentUpdate](type-aliases/CommentUpdate.md)
+- [CommentUpdateDefinition](type-aliases/CommentUpdateDefinition.md)
+- [Configuration](type-aliases/Configuration.md)
+- [Context](type-aliases/Context.md)
+- [ContextAPIClients](type-aliases/ContextAPIClients.md)
+- [ContextDebugInfo](type-aliases/ContextDebugInfo.md)
+- [CustomPostType](type-aliases/CustomPostType.md)
+- [~~Data~~](type-aliases/Data.md)
+- [DevvitDebug](type-aliases/DevvitDebug.md)
+- [Dispatch](type-aliases/Dispatch.md)
+- [Form](type-aliases/Form.md)
+- [FormDefinition](type-aliases/FormDefinition.md)
+- [FormField](type-aliases/FormField.md)
+- [FormFieldGroup](type-aliases/FormFieldGroup.md)
+- [FormFunction](type-aliases/FormFunction.md)
+- [FormKey](type-aliases/FormKey.md)
+- [FormOnSubmitEvent](type-aliases/FormOnSubmitEvent.md)
+- [FormOnSubmitEventHandler](type-aliases/FormOnSubmitEventHandler.md)
+- [FormToFormValues](type-aliases/FormToFormValues.md)
+- [FormValues](type-aliases/FormValues.md)
+- [IconName](type-aliases/IconName.md)
+- [ImageField](type-aliases/ImageField.md)
+- [JobContext](type-aliases/JobContext.md)
+- [JSONArray](type-aliases/JSONArray.md)
+- [JSONObject](type-aliases/JSONObject.md)
+- [JSONPrimitive](type-aliases/JSONPrimitive.md)
+- [JSONValue](type-aliases/JSONValue.md)
+- [KVStore](type-aliases/KVStore.md)
+- [MediaAsset](type-aliases/MediaAsset.md)
+- [MediaPlugin](type-aliases/MediaPlugin.md)
+- [MenuItem](type-aliases/MenuItem.md)
+- [MenuItemLocation](type-aliases/MenuItemLocation.md)
+- [MenuItemOnPressEvent](type-aliases/MenuItemOnPressEvent.md)
+- [MenuItemPostFilter](type-aliases/MenuItemPostFilter.md)
+- [MenuItemUserType](type-aliases/MenuItemUserType.md)
+- [Metadata](type-aliases/Metadata.md)
+- [ModActionDefinition](type-aliases/ModActionDefinition.md)
+- [ModActionTrigger](type-aliases/ModActionTrigger.md)
+- [ModMailDefinition](type-aliases/ModMailDefinition.md)
+- [ModMailTrigger](type-aliases/ModMailTrigger.md)
+- [MultiTriggerDefinition](type-aliases/MultiTriggerDefinition.md)
+- [NumberField](type-aliases/NumberField.md)
+- [OnAutomoderatorFilterCommentDefinition](type-aliases/OnAutomoderatorFilterCommentDefinition.md)
+- [OnAutomoderatorFilterPostDefinition](type-aliases/OnAutomoderatorFilterPostDefinition.md)
+- [OnTriggerRequest](type-aliases/OnTriggerRequest.md)
+- [OnValidateHandler](type-aliases/OnValidateHandler.md)
+- [ParagraphField](type-aliases/ParagraphField.md)
+- [PartialJSONArray](type-aliases/PartialJSONArray.md)
+- [PartialJSONObject](type-aliases/PartialJSONObject.md)
+- [PartialJSONPrimitive](type-aliases/PartialJSONPrimitive.md)
+- [PartialJSONValue](type-aliases/PartialJSONValue.md)
+- [PluginSettings](type-aliases/PluginSettings.md)
+- [PostCreate](type-aliases/PostCreate.md)
+- [PostCreateDefinition](type-aliases/PostCreateDefinition.md)
+- [PostDelete](type-aliases/PostDelete.md)
+- [PostDeleteDefinition](type-aliases/PostDeleteDefinition.md)
+- [PostFlairUpdate](type-aliases/PostFlairUpdate.md)
+- [PostFlairUpdateDefinition](type-aliases/PostFlairUpdateDefinition.md)
+- [PostNsfwUpdate](type-aliases/PostNsfwUpdate.md)
+- [PostNsfwUpdateDefinition](type-aliases/PostNsfwUpdateDefinition.md)
+- [PostReport](type-aliases/PostReport.md)
+- [PostReportDefinition](type-aliases/PostReportDefinition.md)
+- [PostSpoilerUpdate](type-aliases/PostSpoilerUpdate.md)
+- [PostSpoilerUpdateDefinition](type-aliases/PostSpoilerUpdateDefinition.md)
+- [PostSubmit](type-aliases/PostSubmit.md)
+- [PostSubmitDefinition](type-aliases/PostSubmitDefinition.md)
+- [PostUpdate](type-aliases/PostUpdate.md)
+- [PostUpdateDefinition](type-aliases/PostUpdateDefinition.md)
+- [RedisClient](type-aliases/RedisClient.md)
+- [RunJob](type-aliases/RunJob.md)
+- [ScheduledCronJob](type-aliases/ScheduledCronJob.md)
+- [ScheduledCronJobOptions](type-aliases/ScheduledCronJobOptions.md)
+- [ScheduledJob](type-aliases/ScheduledJob.md)
+- [ScheduledJobEvent](type-aliases/ScheduledJobEvent.md)
+- [ScheduledJobHandler](type-aliases/ScheduledJobHandler.md)
+- [ScheduledJobOptions](type-aliases/ScheduledJobOptions.md)
+- [ScheduledJobType](type-aliases/ScheduledJobType.md)
+- [Scheduler](type-aliases/Scheduler.md)
+- [SelectField](type-aliases/SelectField.md)
+- [SetOptions](type-aliases/SetOptions.md)
+- [SetStateAction](type-aliases/SetStateAction.md)
+- [SettingsClient](type-aliases/SettingsClient.md)
+- [SettingScopeType](type-aliases/SettingScopeType.md)
+- [SettingsFormField](type-aliases/SettingsFormField.md)
+- [SettingsFormFieldGroup](type-aliases/SettingsFormFieldGroup.md)
+- [SettingsFormFieldValidatorEvent](type-aliases/SettingsFormFieldValidatorEvent.md)
+- [SettingsValues](type-aliases/SettingsValues.md)
+- [StateSetter](type-aliases/StateSetter.md)
+- [StringField](type-aliases/StringField.md)
+- [Toast](type-aliases/Toast.md)
+- [TriggerContext](type-aliases/TriggerContext.md)
+- [TriggerDefinition](type-aliases/TriggerDefinition.md)
+- [TriggerEvent](type-aliases/TriggerEvent.md)
+- [TriggerEventType](type-aliases/TriggerEventType.md)
+- [TriggerOnEventHandler](type-aliases/TriggerOnEventHandler.md)
+- [TxClientLike](type-aliases/TxClientLike.md)
+- [UIClient](type-aliases/UIClient.md)
+- [UploadMediaOptions](type-aliases/UploadMediaOptions.md)
+- [UseAsyncResult](type-aliases/UseAsyncResult.md)
+- [UseChannelHook](type-aliases/UseChannelHook.md)
+- [UseChannelResult](type-aliases/UseChannelResult.md)
+- [UseFormHook](type-aliases/UseFormHook.md)
+- [UseIntervalHook](type-aliases/UseIntervalHook.md)
+- [UseIntervalResult](type-aliases/UseIntervalResult.md)
+- [UseStateHook](type-aliases/UseStateHook.md)
+- [UseStateInitializer](type-aliases/UseStateInitializer.md)
+- [UseStateResult](type-aliases/UseStateResult.md)
+- [UseWebViewOnMessage](type-aliases/UseWebViewOnMessage.md)
+- [UseWebViewOptions](type-aliases/UseWebViewOptions.md)
+- [UseWebViewResult](type-aliases/UseWebViewResult.md)
+- [ValidatedBooleanField](type-aliases/ValidatedBooleanField.md)
+- [ValidatedFormField](type-aliases/ValidatedFormField.md)
+- [ValidatedNumberField](type-aliases/ValidatedNumberField.md)
+- [ValidatedParagraphField](type-aliases/ValidatedParagraphField.md)
+- [ValidatedSelectField](type-aliases/ValidatedSelectField.md)
+- [ValidatedStringField](type-aliases/ValidatedStringField.md)
+- [ZMember](type-aliases/ZMember.md)
+- [ZRangeByScoreOptions](type-aliases/ZRangeByScoreOptions.md)
+- [ZRangeOptions](type-aliases/ZRangeOptions.md)
+
+## Variables
+
+- [ALL\_ICON\_NAMES](variables/ALL_ICON_NAMES.md)
+
+## Functions
+
+- [fetchDevvitWeb](functions/fetchDevvitWeb.md)
+- [svg](functions/svg.md)
+- [useAsync](functions/useAsync.md)
+- [useChannel](functions/useChannel.md)
+- [useForm](functions/useForm.md)
+- [useInterval](functions/useInterval.md)
+- [useState](functions/useState.md)
+- [useWebView](functions/useWebView.md)
diff --git a/versioned_docs/version-0.13/api/public-api/classes/Devvit.md b/versioned_docs/version-0.13/api/public-api/classes/Devvit.md
new file mode 100644
index 00000000..298f4b97
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/classes/Devvit.md
@@ -0,0 +1,413 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Class: Devvit
+
+## Extends
+
+- `Actor`
+
+## Properties
+
+
+
+### debug
+
+> `static` **debug**: [`DevvitDebug`](../type-aliases/DevvitDebug.md) = `{}`
+
+## Methods
+
+
+
+### ~~addCustomPostType()~~
+
+> `static` **addCustomPostType**(`customPostType`): `void`
+
+#### Parameters
+
+##### customPostType
+
+[`CustomPostType`](../type-aliases/CustomPostType.md)
+
+The custom post type to add.
+
+#### Returns
+
+`void`
+
+#### Deprecated
+
+Blocks is deprecated. Use [Web](https://developers.reddit.com/docs/capabilities/devvit-web/devvit_web_overview|Devvit) instead
+
+Add a custom post type for your app.
+
+#### Example
+
+```ts
+import { Devvit, useState } from '@devvit/public-api';
+
+Devvit.addCustomPostType({
+ name: 'Counter',
+ description: 'A simple click counter post.',
+ render: (context) => {
+ const [counter, setCounter] = useState();
+
+ return (
+
+ {counter}
+
+
+ );
+ },
+});
+```
+
+***
+
+
+
+### addMenuItem()
+
+> `static` **addMenuItem**(`item`): `void`
+
+Add a menu item to the Reddit UI.
+
+#### Parameters
+
+##### item
+
+[`MenuItem`](../type-aliases/MenuItem.md)
+
+#### Returns
+
+`void`
+
+#### Example
+
+```ts
+Devvit.addMenuItem({
+ label: 'My Menu Item',
+ location: 'subreddit',
+ onPress: (event, context) => {
+ const location = event.location;
+ const targetId = event.targetId;
+ context.ui.showToast(`You clicked on ${location} ${targetId}`);
+ }
+});
+```
+
+***
+
+
+
+### addSchedulerJob()
+
+> `static` **addSchedulerJob**\<`T`\>(`job`): `void`
+
+Add a scheduled job type for your app. This will allow you to schedule jobs using the `scheduler` API.
+
+#### Type Parameters
+
+##### T
+
+`T` *extends* `undefined` \| [`JSONObject`](../type-aliases/JSONObject.md)
+
+#### Parameters
+
+##### job
+
+[`ScheduledJobType`](../type-aliases/ScheduledJobType.md)\<`T`\>
+
+The scheduled job type to add.
+
+#### Returns
+
+`void`
+
+#### Example
+
+```ts
+Devvit.addSchedulerJob({
+ name: 'checkNewPosts',
+ onRun: async (event, context) => {
+ const newPosts = await context.reddit.getNewPosts({ limit: 5 }).all();
+ for (const post of newPosts) {
+ if (post.title.includes('bad word')) {
+ await post.remove();
+ }
+ }
+ }
+});
+
+Devvit.addMenuItem({
+ label: 'Check for new posts',
+ location: 'location',
+ onPress: (event, context) => {
+ const = await context.scheduler.runJob({
+ name: 'checkNewPosts',
+ when: new Date(Date.now() + 5000) // in 5 seconds
+ });
+ }
+});
+```
+
+***
+
+
+
+### addSettings()
+
+> `static` **addSettings**(`fields`): `void`
+
+Add settings that can be configured to customize the behavior of your app.
+
+There are two levels of settings:
+- App settings (scope: 'app')
+- Installation settings (scope: 'installation' or unspecified scope).
+
+Installation settings are meant to be configured by the user that installs your app.
+This is a good place to add anything that a user might want to change to personalize the app (e.g. the default city to show the weather for or a
+specific sport team that a subreddit follows). Note that these are good for subreddit level customization but not necessarily good for things
+that might be different for two users in a subreddit (e.g. setting the default city to show the weather for is only useful at a sub level if
+the sub is for a specific city or region).
+Installation settings can be viewed and configured here: https://developers.reddit.com/r/subreddit-name/apps/app-name.
+
+App settings can be accessed and consumed by all installations of the app. This is mainly useful for developer secrets/API keys that your
+app needs to function. They can only be changed/viewed by you via the CLI (devvit settings set and devvit settings list). This ensures secrets
+are persisted in an encrypted store and don't get committed in the source code.
+
+Warning: You should never paste your actual key into any fields passed into Devvit.addSettings - this is merely where you state what your API key's name and description are. You will be able to set the actual value of the key via CLI.
+
+Note: setting names must be unique across all settings.
+
+#### Parameters
+
+##### fields
+
+Fields for the app and installation settings.
+
+[`SettingsFormField`](../type-aliases/SettingsFormField.md) | [`SettingsFormField`](../type-aliases/SettingsFormField.md)[]
+
+#### Returns
+
+`void`
+
+#### Examples
+
+```ts
+Devvit.addSettings([
+ {
+ type: 'string',
+ name: 'weather-api-key',
+ label: 'My weather.com API key',
+ scope: SettingScope.App,
+ isSecret: true
+ },
+ {
+ type: 'string',
+ name: 'Default City',
+ label: 'Default city to show the weather for by default',
+ scope: SettingScope.Installation,
+ onValidate: ({ value }) => {
+ if (!isValidCity(value)) {
+ return 'You must ender a valid city: ${validCities.join(", ")}';
+ }
+ }
+ },
+ {
+ type: 'number',
+ name: 'Default Forecast Window (in days)',
+ label: 'The number of days to show for forecast for by default',
+ scope: SettingScope.Installation,
+ onValidate: ({ value }) => {
+ if (value > 10 || value < 1) {
+ return 'Forecast window must be from 1 to 10 days';
+ }
+ }
+ },
+]);
+```
+
+```ts
+Devvit.addSettings({
+ type: 'string',
+ name: 'weather-api-key',
+ label: 'My weather.com API key',
+ scope: SettingScope.App,
+ isSecret: true
+});
+```
+
+***
+
+
+
+### addTrigger()
+
+#### Call Signature
+
+> `static` **addTrigger**\<`T`\>(`definition`): *typeof* [`Devvit`](../@devvit/namespaces/Devvit/README.md)
+
+Add a trigger handler that will be invoked when the given event
+occurs in a subreddit where the app is installed.
+
+##### Type Parameters
+
+###### T
+
+`T` *extends* keyof [`TriggerEventType`](../type-aliases/TriggerEventType.md)
+
+##### Parameters
+
+###### definition
+
+###### event
+
+`T`
+
+###### onEvent
+
+[`TriggerOnEventHandler`](../type-aliases/TriggerOnEventHandler.md)\<[`TriggerEventType`](../type-aliases/TriggerEventType.md)\[`T`\]\>
+
+##### Returns
+
+*typeof* [`Devvit`](../@devvit/namespaces/Devvit/README.md)
+
+##### Example
+
+```ts
+Devvit.addTrigger({
+ event: 'PostSubmit',
+ async onEvent(event, context) {
+ console.log("a new post was created!")
+ }
+});
+
+Devvit.addTrigger({
+ events: ['PostSubmit', 'PostReport'],
+ async onEvent(event, context){
+ if (event.type === 'PostSubmit') {
+ console.log("a new post was created!")
+ } else if (event.type === 'PostReport') {
+ console.log("a post was reported!")
+ }
+ }
+});
+```
+
+#### Call Signature
+
+> `static` **addTrigger**\<`Event`\>(`triggerDefinition`): *typeof* [`Devvit`](../@devvit/namespaces/Devvit/README.md)
+
+Add a trigger handler that will be invoked when the given event
+occurs in a subreddit where the app is installed.
+
+##### Type Parameters
+
+###### Event
+
+`Event` *extends* [`TriggerEvent`](../type-aliases/TriggerEvent.md)
+
+##### Parameters
+
+###### triggerDefinition
+
+[`MultiTriggerDefinition`](../type-aliases/MultiTriggerDefinition.md)\<`Event`\>
+
+The trigger definition.
+
+##### Returns
+
+*typeof* [`Devvit`](../@devvit/namespaces/Devvit/README.md)
+
+##### Example
+
+```ts
+Devvit.addTrigger({
+ event: 'PostSubmit',
+ async onEvent(event, context) {
+ console.log("a new post was created!")
+ }
+});
+
+Devvit.addTrigger({
+ events: ['PostSubmit', 'PostReport'],
+ async onEvent(event, context){
+ if (event.type === 'PostSubmit') {
+ console.log("a new post was created!")
+ } else if (event.type === 'PostReport') {
+ console.log("a post was reported!")
+ }
+ }
+});
+```
+
+***
+
+
+
+### configure()
+
+> `static` **configure**(`config`): `void`
+
+To use certain APIs and features of Devvit, you must enable them using this function.
+
+#### Parameters
+
+##### config
+
+[`Configuration`](../type-aliases/Configuration.md)
+
+The configuration object.
+
+#### Returns
+
+`void`
+
+#### Example
+
+```ts
+Devvit.configure({
+ http: true,
+ redditAPI: true,
+ redis: true,
+ media: true
+});
+```
+
+***
+
+
+
+### createForm()
+
+> `static` **createForm**\<`T`\>(`form`, `onSubmit`): [`FormKey`](../type-aliases/FormKey.md)
+
+Create a form that can be opened from menu items and custom posts.
+
+#### Type Parameters
+
+##### T
+
+`T` *extends* [`Form`](../type-aliases/Form.md) \| [`FormFunction`](../type-aliases/FormFunction.md)
+
+#### Parameters
+
+##### form
+
+`T`
+
+The form or a function that returns the form.
+
+##### onSubmit
+
+[`FormOnSubmitEventHandler`](../type-aliases/FormOnSubmitEventHandler.md)\<[`FormToFormValues`](../type-aliases/FormToFormValues.md)\<`T`\>\>
+
+The function to call when the form is submitted.
+
+#### Returns
+
+[`FormKey`](../type-aliases/FormKey.md)
+
+A unique key for the form that can used with `ui.showForm`.
diff --git a/versioned_docs/version-0.13/api/public-api/classes/RichTextBuilder.md b/versioned_docs/version-0.13/api/public-api/classes/RichTextBuilder.md
new file mode 100644
index 00000000..0ea6cc09
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/classes/RichTextBuilder.md
@@ -0,0 +1,358 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Class: RichTextBuilder
+
+## Mixes
+
+ParagraphContainer
+
+## Mixes
+
+HeadingContainer
+
+## Mixes
+
+HorizontalRuleContainer
+
+## Mixes
+
+BlockQuoteContainer
+
+## Mixes
+
+CodeBlockContainer
+
+## Mixes
+
+EmbedContainer
+
+## Mixes
+
+ListContainer
+
+## Mixes
+
+TableContainer
+
+## Mixes
+
+ImageContainer
+
+## Mixes
+
+VideoContainer
+
+## Implements
+
+- `ParagraphContainer`\<`RichTextBuilder`\>
+- `HeadingContainer`\<`RichTextBuilder`\>
+- `HorizontalRuleContainer`\<`RichTextBuilder`\>
+- `BlockQuoteContainer`\<`RichTextBuilder`\>
+- `CodeBlockContainer`\<`RichTextBuilder`\>
+- `EmbedContainer`\<`RichTextBuilder`\>
+- `ListContainer`\<`RichTextBuilder`\>
+- `TableContainer`\<`RichTextBuilder`\>
+- `ImageContainer`\<`RichTextBuilder`\>
+- `VideoContainer`\<`RichTextBuilder`\>
+
+## Constructors
+
+
+
+### new RichTextBuilder()
+
+> **new RichTextBuilder**(): `RichTextBuilder`
+
+#### Returns
+
+`RichTextBuilder`
+
+## Methods
+
+
+
+### animatedImage()
+
+> **animatedImage**(`_opts`): `RichTextBuilder`
+
+Append an Animated Image
+
+#### Parameters
+
+##### \_opts
+
+`MediaOptions`
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`ImageContainer.animatedImage`
+
+***
+
+
+
+### blockQuote()
+
+> **blockQuote**(`_opts`, `_cb`): `RichTextBuilder`
+
+Append a Block Quote element
+
+#### Parameters
+
+##### \_opts
+
+`BlockQuoteOptions`
+
+##### \_cb
+
+(`blockQuote`) => `void`
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`BlockQuoteContainer.blockQuote`
+
+***
+
+
+
+### build()
+
+> **build**(): `string`
+
+Serializes the document to a JSON string
+
+#### Returns
+
+`string`
+
+***
+
+
+
+### codeBlock()
+
+> **codeBlock**(`_opts`, `_cb`): `RichTextBuilder`
+
+Append a Code Block element
+
+#### Parameters
+
+##### \_opts
+
+`CodeBlockOptions`
+
+##### \_cb
+
+(`codeBlock`) => `void`
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`CodeBlockContainer.codeBlock`
+
+***
+
+
+
+### embed()
+
+> **embed**(`_opts`): `RichTextBuilder`
+
+Append an embedded iframe
+
+#### Parameters
+
+##### \_opts
+
+`EmbedOptions`
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`EmbedContainer.embed`
+
+***
+
+
+
+### heading()
+
+> **heading**(`_opts`, `_cb`): `RichTextBuilder`
+
+Append a Heading
+
+#### Parameters
+
+##### \_opts
+
+`HeadingOptions`
+
+##### \_cb
+
+(`heading`) => `void`
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`HeadingContainer.heading`
+
+***
+
+
+
+### horizontalRule()
+
+> **horizontalRule**(): `RichTextBuilder`
+
+Append a Horizontal Rule
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`HorizontalRuleContainer.horizontalRule`
+
+***
+
+
+
+### image()
+
+> **image**(`_opts`): `RichTextBuilder`
+
+Append an Image
+
+#### Parameters
+
+##### \_opts
+
+`MediaOptions`
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`ImageContainer.image`
+
+***
+
+
+
+### list()
+
+> **list**(`_opts`, `_cb`): `RichTextBuilder`
+
+Append a List
+
+#### Parameters
+
+##### \_opts
+
+`ListOptions`
+
+##### \_cb
+
+(`list`) => `void`
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`ListContainer.list`
+
+***
+
+
+
+### paragraph()
+
+> **paragraph**(`_cb`): `RichTextBuilder`
+
+Append a Paragraph
+
+#### Parameters
+
+##### \_cb
+
+(`paragraph`) => `void`
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`ParagraphContainer.paragraph`
+
+***
+
+
+
+### table()
+
+> **table**(`_cb`): `RichTextBuilder`
+
+Append a Table
+
+#### Parameters
+
+##### \_cb
+
+(`table`) => `void`
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`TableContainer.table`
+
+***
+
+
+
+### video()
+
+> **video**(`_opts`): `RichTextBuilder`
+
+Append a Video
+
+#### Parameters
+
+##### \_opts
+
+`VideoOptions`
+
+#### Returns
+
+`RichTextBuilder`
+
+#### Implementation of
+
+`VideoContainer.video`
diff --git a/versioned_docs/version-0.13/api/public-api/enumerations/DeletionReason.md b/versioned_docs/version-0.13/api/public-api/enumerations/DeletionReason.md
new file mode 100644
index 00000000..35c552aa
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/enumerations/DeletionReason.md
@@ -0,0 +1,61 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Enumeration: DeletionReason
+
+## Enumeration Members
+
+
+
+### EXPLICIT\_CONTENT
+
+> **EXPLICIT\_CONTENT**: `5`
+
+***
+
+
+
+### LEGAL
+
+> **LEGAL**: `2`
+
+***
+
+
+
+### OTHER
+
+> **OTHER**: `3`
+
+***
+
+
+
+### SPAM
+
+> **SPAM**: `1`
+
+***
+
+
+
+### UNKNOWN
+
+> **UNKNOWN**: `4`
+
+***
+
+
+
+### UNRECOGNIZED
+
+> **UNRECOGNIZED**: `-1`
+
+***
+
+
+
+### UNSPECIFIED\_DELETION\_REASON
+
+> **UNSPECIFIED\_DELETION\_REASON**: `0`
diff --git a/versioned_docs/version-0.13/api/public-api/enumerations/EventSource.md b/versioned_docs/version-0.13/api/public-api/enumerations/EventSource.md
new file mode 100644
index 00000000..27c7f51b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/enumerations/EventSource.md
@@ -0,0 +1,45 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Enumeration: EventSource
+
+## Enumeration Members
+
+
+
+### ADMIN
+
+> **ADMIN**: `2`
+
+***
+
+
+
+### MODERATOR
+
+> **MODERATOR**: `3`
+
+***
+
+
+
+### UNKNOWN\_EVENT\_SOURCE
+
+> **UNKNOWN\_EVENT\_SOURCE**: `0`
+
+***
+
+
+
+### UNRECOGNIZED
+
+> **UNRECOGNIZED**: `-1`
+
+***
+
+
+
+### USER
+
+> **USER**: `1`
diff --git a/versioned_docs/version-0.13/api/public-api/enumerations/SettingScope.md b/versioned_docs/version-0.13/api/public-api/enumerations/SettingScope.md
new file mode 100644
index 00000000..d8cc0193
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/enumerations/SettingScope.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Enumeration: SettingScope
+
+## Enumeration Members
+
+
+
+### App
+
+> **App**: `"app"`
+
+***
+
+
+
+### Installation
+
+> **Installation**: `"installation"`
diff --git a/versioned_docs/version-0.13/api/public-api/functions/fetchDevvitWeb.md b/versioned_docs/version-0.13/api/public-api/functions/fetchDevvitWeb.md
new file mode 100644
index 00000000..af31c75b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/functions/fetchDevvitWeb.md
@@ -0,0 +1,36 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Function: fetchDevvitWeb()
+
+> **fetchDevvitWeb**(`ctx`, `endpoint`, `init`?): `Promise`\<`Response`\>
+
+Makes a fetch request to the devvit web backend server from your block app
+This is a migration tool to help you migrate your block app to the new Devvit Web architecture.
+
+## Parameters
+
+### ctx
+
+[`BaseContext`](../type-aliases/BaseContext.md)
+
+the devvit context
+
+### endpoint
+
+`string`
+
+the endpoint to make the request to
+
+### init?
+
+`RequestInit`
+
+the request init options
+
+## Returns
+
+`Promise`\<`Response`\>
+
+a promise that resolves to the fetch response
diff --git a/versioned_docs/version-0.13/api/public-api/functions/svg.md b/versioned_docs/version-0.13/api/public-api/functions/svg.md
new file mode 100644
index 00000000..c22caa4c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/functions/svg.md
@@ -0,0 +1,45 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Function: svg()
+
+> **svg**(`strings`, ...`args`): `""` \| `` `data:image/svg+xml;charset=UTF-8,${string}` ``
+
+**`Experimental`**
+
+A helper to allow SVG functionality within image tags.
+
+## Parameters
+
+### strings
+
+`TemplateStringsArray`
+
+### args
+
+...(`string` \| `number`)[]
+
+## Returns
+
+`""` \| `` `data:image/svg+xml;charset=UTF-8,${string}` ``
+
+## Example
+
+```ts
+import { Devvit, svg } from '@devvit/public-api';
+const App = () => {
+ const color = 'gold'
+ return (
+
+
+
+ `}
+ imageHeight={100}
+ imageWidth={100}
+ />
+
+ )
+}
+```
diff --git a/versioned_docs/version-0.13/api/public-api/functions/useAsync.md b/versioned_docs/version-0.13/api/public-api/functions/useAsync.md
new file mode 100644
index 00000000..6cdf4139
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/functions/useAsync.md
@@ -0,0 +1,33 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Function: useAsync()
+
+> **useAsync**\<`S`\>(`initializer`, `options`): [`UseAsyncResult`](../type-aliases/UseAsyncResult.md)\<`S`\>
+
+This is the preferred way to handle async state in Devvit.
+
+## Type Parameters
+
+### S
+
+`S` *extends* [`JSONValue`](../type-aliases/JSONValue.md)
+
+## Parameters
+
+### initializer
+
+[`AsyncUseStateInitializer`](../type-aliases/AsyncUseStateInitializer.md)\<`S`\>
+
+any async function that returns a JSONValue
+
+### options
+
+`AsyncOptions`\<`S`\> = `{}`
+
+## Returns
+
+[`UseAsyncResult`](../type-aliases/UseAsyncResult.md)\<`S`\>
+
+UseAsyncResult
diff --git a/versioned_docs/version-0.13/api/public-api/functions/useChannel.md b/versioned_docs/version-0.13/api/public-api/functions/useChannel.md
new file mode 100644
index 00000000..7bce9e80
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/functions/useChannel.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Function: useChannel()
+
+> **useChannel**\<`Message`\>(`opts`): [`UseChannelResult`](../type-aliases/UseChannelResult.md)\<`Message`\>
+
+## Type Parameters
+
+### Message
+
+`Message` *extends* [`JSONValue`](../type-aliases/JSONValue.md)
+
+## Parameters
+
+### opts
+
+`Readonly`\<`ChannelOptions`\<`Message`\>\>
+
+## Returns
+
+[`UseChannelResult`](../type-aliases/UseChannelResult.md)\<`Message`\>
diff --git a/versioned_docs/version-0.13/api/public-api/functions/useForm.md b/versioned_docs/version-0.13/api/public-api/functions/useForm.md
new file mode 100644
index 00000000..02215bc0
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/functions/useForm.md
@@ -0,0 +1,27 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Function: useForm()
+
+> **useForm**\<`T`\>(`form`, `onSubmit`): [`FormKey`](../type-aliases/FormKey.md)
+
+## Type Parameters
+
+### T
+
+`T` *extends* [`Form`](../type-aliases/Form.md) \| [`FormFunction`](../type-aliases/FormFunction.md)
+
+## Parameters
+
+### form
+
+`T`
+
+### onSubmit
+
+(`values`) => `void` \| `Promise`\<`void`\>
+
+## Returns
+
+[`FormKey`](../type-aliases/FormKey.md)
diff --git a/versioned_docs/version-0.13/api/public-api/functions/useInterval.md b/versioned_docs/version-0.13/api/public-api/functions/useInterval.md
new file mode 100644
index 00000000..14a623ed
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/functions/useInterval.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Function: useInterval()
+
+> **useInterval**(`callback`, `requestedDelayMs`): [`UseIntervalResult`](../type-aliases/UseIntervalResult.md)
+
+## Parameters
+
+### callback
+
+() => `void` \| `Promise`\<`void`\>
+
+### requestedDelayMs
+
+`number`
+
+## Returns
+
+[`UseIntervalResult`](../type-aliases/UseIntervalResult.md)
diff --git a/versioned_docs/version-0.13/api/public-api/functions/useState.md b/versioned_docs/version-0.13/api/public-api/functions/useState.md
new file mode 100644
index 00000000..6cea20f0
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/functions/useState.md
@@ -0,0 +1,67 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Function: useState()
+
+## Call Signature
+
+> **useState**(`initialState`): [`UseStateResult`](../type-aliases/UseStateResult.md)\<`boolean`\>
+
+### Parameters
+
+#### initialState
+
+[`UseStateInitializer`](../type-aliases/UseStateInitializer.md)\<`boolean`\>
+
+### Returns
+
+[`UseStateResult`](../type-aliases/UseStateResult.md)\<`boolean`\>
+
+## Call Signature
+
+> **useState**(`initialState`): [`UseStateResult`](../type-aliases/UseStateResult.md)\<`number`\>
+
+### Parameters
+
+#### initialState
+
+[`UseStateInitializer`](../type-aliases/UseStateInitializer.md)\<`number`\>
+
+### Returns
+
+[`UseStateResult`](../type-aliases/UseStateResult.md)\<`number`\>
+
+## Call Signature
+
+> **useState**(`initialState`): [`UseStateResult`](../type-aliases/UseStateResult.md)\<`string`\>
+
+### Parameters
+
+#### initialState
+
+[`UseStateInitializer`](../type-aliases/UseStateInitializer.md)\<`string`\>
+
+### Returns
+
+[`UseStateResult`](../type-aliases/UseStateResult.md)\<`string`\>
+
+## Call Signature
+
+> **useState**\<`S`\>(`initialState`): [`UseStateResult`](../type-aliases/UseStateResult.md)\<`S`\>
+
+### Type Parameters
+
+#### S
+
+`S` *extends* [`JSONValue`](../type-aliases/JSONValue.md)
+
+### Parameters
+
+#### initialState
+
+[`UseStateInitializer`](../type-aliases/UseStateInitializer.md)\<`S`\>
+
+### Returns
+
+[`UseStateResult`](../type-aliases/UseStateResult.md)\<`S`\>
diff --git a/versioned_docs/version-0.13/api/public-api/functions/useWebView.md b/versioned_docs/version-0.13/api/public-api/functions/useWebView.md
new file mode 100644
index 00000000..742a92ef
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/functions/useWebView.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Function: useWebView()
+
+> **useWebView**\<`From`, `To`\>(`options`): [`UseWebViewResult`](../type-aliases/UseWebViewResult.md)\<`To`\>
+
+Use this hook to handle a web view's visibility state and any messages sent to your app.
+
+## Type Parameters
+
+### From
+
+`From` *extends* [`JSONValue`](../type-aliases/JSONValue.md) = [`JSONValue`](../type-aliases/JSONValue.md)
+
+### To
+
+`To` *extends* [`JSONValue`](../type-aliases/JSONValue.md) = [`JSONValue`](../type-aliases/JSONValue.md)
+
+## Parameters
+
+### options
+
+[`UseWebViewOptions`](../type-aliases/UseWebViewOptions.md)\<`From`, `To`\>
+
+## Returns
+
+[`UseWebViewResult`](../type-aliases/UseWebViewResult.md)\<`To`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/AllIconName.md b/versioned_docs/version-0.13/api/public-api/type-aliases/AllIconName.md
new file mode 100644
index 00000000..a1399ff4
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/AllIconName.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: AllIconName
+
+> **AllIconName** = *typeof* [`ALL_ICON_NAMES`](../variables/ALL_ICON_NAMES.md)\[`number`\]
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/AppInstall.md b/versioned_docs/version-0.13/api/public-api/type-aliases/AppInstall.md
new file mode 100644
index 00000000..38e757ad
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/AppInstall.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: AppInstall
+
+> **AppInstall** = `"AppInstall"`
+
+The event name for when your app is installed
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/AppInstallDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/AppInstallDefinition.md
new file mode 100644
index 00000000..8dbb7637
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/AppInstallDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: AppInstallDefinition
+
+> **AppInstallDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`AppInstall`](AppInstall.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`AppInstall`](../@devvit/namespaces/EventTypes/interfaces/AppInstall.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/AppUpgrade.md b/versioned_docs/version-0.13/api/public-api/type-aliases/AppUpgrade.md
new file mode 100644
index 00000000..06a05f14
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/AppUpgrade.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: AppUpgrade
+
+> **AppUpgrade** = `"AppUpgrade"`
+
+The event name for when your app is upgraded
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/AppUpgradeDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/AppUpgradeDefinition.md
new file mode 100644
index 00000000..23bec8d5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/AppUpgradeDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: AppUpgradeDefinition
+
+> **AppUpgradeDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`AppUpgrade`](AppUpgrade.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`AppUpgrade`](../@devvit/namespaces/EventTypes/interfaces/AppUpgrade.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/AsyncError.md b/versioned_docs/version-0.13/api/public-api/type-aliases/AsyncError.md
new file mode 100644
index 00000000..a449bf07
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/AsyncError.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: AsyncError
+
+> **AsyncError** = `object`
+
+## Properties
+
+
+
+### details
+
+> **details**: `string` \| `null`
+
+***
+
+
+
+### message
+
+> **message**: `string`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/AsyncUseStateInitializer.md b/versioned_docs/version-0.13/api/public-api/type-aliases/AsyncUseStateInitializer.md
new file mode 100644
index 00000000..6ffd0483
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/AsyncUseStateInitializer.md
@@ -0,0 +1,17 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: AsyncUseStateInitializer()\
+
+> **AsyncUseStateInitializer**\<`S`\> = () => `Promise`\<`S`\>
+
+## Type Parameters
+
+### S
+
+`S`
+
+## Returns
+
+`Promise`\<`S`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/AutomoderatorFilterComment.md b/versioned_docs/version-0.13/api/public-api/type-aliases/AutomoderatorFilterComment.md
new file mode 100644
index 00000000..32bc9111
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/AutomoderatorFilterComment.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: AutomoderatorFilterComment
+
+> **AutomoderatorFilterComment** = `"AutomoderatorFilterComment"`
+
+The event name for when a comment is filtered by automoderator
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/AutomoderatorFilterPost.md b/versioned_docs/version-0.13/api/public-api/type-aliases/AutomoderatorFilterPost.md
new file mode 100644
index 00000000..c00cdbf7
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/AutomoderatorFilterPost.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: AutomoderatorFilterPost
+
+> **AutomoderatorFilterPost** = `"AutomoderatorFilterPost"`
+
+The event name for when a post is filtered by automoderator
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/BaseContext.md b/versioned_docs/version-0.13/api/public-api/type-aliases/BaseContext.md
new file mode 100644
index 00000000..41327273
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/BaseContext.md
@@ -0,0 +1,184 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: BaseContext
+
+> **BaseContext** = `object`
+
+## Properties
+
+
+
+### ~~appAccountId~~
+
+> **appAccountId**: `string`
+
+The ID of the current app's account
+
+#### Deprecated
+
+Use [BaseContext.appSlug](#appslug) instead to get the app's username
+
+***
+
+
+
+### ~~appName~~
+
+> **appName**: `string`
+
+The slug of the app that is running
+
+#### Deprecated
+
+Use [BaseContext.appSlug](#appslug) instead.
+
+***
+
+
+
+### appSlug
+
+> **appSlug**: `string`
+
+The slug of the app that is running
+
+***
+
+
+
+### appVersion
+
+> **appVersion**: `string`
+
+The version of the app that is running
+
+***
+
+
+
+### commentId?
+
+> `optional` **commentId**: `string`
+
+The ID of the current comment
+
+***
+
+
+
+### debug
+
+> **debug**: [`ContextDebugInfo`](ContextDebugInfo.md)
+
+More useful things, but probably not for the average developer
+
+***
+
+
+
+### loid?
+
+> `optional` **loid**: `string`
+
+**`Experimental`**
+
+LOID (logged-out ID) is a token assigned on first visit and persists across sessions, account creation, and sign-in.
+Logged-in users retain a LOID for attribution, analytics, and cross-session tracking.
+
+***
+
+
+
+### metadata
+
+> **metadata**: [`Metadata`](Metadata.md)
+
+Request headers.
+
+***
+
+
+
+### postData
+
+> **postData**: `PostData` \| `undefined`
+
+***
+
+
+
+### postId?
+
+> `optional` **postId**: `string`
+
+The ID of the current post
+
+***
+
+
+
+### snoovatar?
+
+> `optional` **snoovatar**: `string`
+
+**`Experimental`**
+
+The current user's snoovtar URL if logged in
+
+***
+
+
+
+### subredditId
+
+> **subredditId**: `string`
+
+The ID of the current subreddit
+
+***
+
+
+
+### subredditName?
+
+> `optional` **subredditName**: `string`
+
+The name of the current subreddit
+
+***
+
+
+
+### userId?
+
+> `optional` **userId**: `string`
+
+The current user's ID if this event was triggered by a logged in user
+
+***
+
+
+
+### username?
+
+> `optional` **username**: `string`
+
+**`Experimental`**
+
+The current user's handle if logged in
+
+## Methods
+
+
+
+### toJSON()
+
+> **toJSON**(): `Omit`\<`BaseContext`, `"toJSON"`\>
+
+Returns a JSON representation of the context
+
+#### Returns
+
+`Omit`\<`BaseContext`, `"toJSON"`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/BaseField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/BaseField.md
new file mode 100644
index 00000000..a0b48146
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/BaseField.md
@@ -0,0 +1,86 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: BaseField\
+
+> **BaseField**\<`ValueType`\> = `object`
+
+## Type Parameters
+
+### ValueType
+
+`ValueType`
+
+## Properties
+
+
+
+### defaultValue?
+
+> `optional` **defaultValue**: `ValueType`
+
+The default value of the field
+
+***
+
+
+
+### disabled?
+
+> `optional` **disabled**: `boolean`
+
+If true the field will be disabled
+
+***
+
+
+
+### helpText?
+
+> `optional` **helpText**: `string`
+
+An optional help text that will be displayed below the field
+
+***
+
+
+
+### label
+
+> **label**: `string`
+
+The label of the field. This will be displayed to the user
+
+***
+
+
+
+### name
+
+> **name**: `string`
+
+The name of the field. This will be used as the key in the `values` object
+when the form is submitted.
+
+***
+
+
+
+### required?
+
+> `optional` **required**: `boolean`
+
+If true the field will be required and the user will not be able to submit
+the form without filling it in.
+
+***
+
+
+
+### scope?
+
+> `optional` **scope**: [`SettingScopeType`](SettingScopeType.md)
+
+This indicates whether the field (setting) is an app level or install level
+setting. App setting values can be used by any installation.
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/BitfieldCommand.md b/versioned_docs/version-0.13/api/public-api/type-aliases/BitfieldCommand.md
new file mode 100644
index 00000000..92522253
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/BitfieldCommand.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: BitfieldCommand
+
+> **BitfieldCommand** = `BitfieldGet` \| `BitfieldSet` \| `BitfieldIncrBy` \| `BitfieldOverflow`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/BlockElement.md b/versioned_docs/version-0.13/api/public-api/type-aliases/BlockElement.md
new file mode 100644
index 00000000..d68757df
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/BlockElement.md
@@ -0,0 +1,31 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: BlockElement
+
+> **BlockElement** = `object`
+
+## Properties
+
+
+
+### children
+
+> **children**: `JSX.Element`[]
+
+***
+
+
+
+### props
+
+> **props**: \{\} \| `undefined`
+
+***
+
+
+
+### type
+
+> **type**: `JSX.ComponentFunction` \| `string` \| `undefined`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/BooleanField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/BooleanField.md
new file mode 100644
index 00000000..073117d0
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/BooleanField.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: BooleanField
+
+> **BooleanField** = `Prettify`\<`Omit`\<[`BaseField`](BaseField.md)\<`boolean`\>, `"required"`\> & `FieldConfig_Boolean` & `object`\>
+
+A boolean field displayed as a toggle
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CancelJob.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CancelJob.md
new file mode 100644
index 00000000..6cc4c87c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CancelJob.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CancelJob()
+
+> **CancelJob** = (`jobId`) => `Promise`\<`void`\>
+
+Cancel a scheduled job
+
+## Parameters
+
+### jobId
+
+`string`
+
+The id of the job to cancel
+
+## Returns
+
+`Promise`\<`void`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CommentCreate.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentCreate.md
new file mode 100644
index 00000000..876d5d17
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentCreate.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CommentCreate
+
+> **CommentCreate** = `"CommentCreate"`
+
+The event name for when a comment is created, after safety delay
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CommentCreateDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentCreateDefinition.md
new file mode 100644
index 00000000..747d9b56
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentCreateDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CommentCreateDefinition
+
+> **CommentCreateDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`CommentCreate`](CommentCreate.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`CommentCreate`](../@devvit/namespaces/EventTypes/interfaces/CommentCreate.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CommentDelete.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentDelete.md
new file mode 100644
index 00000000..32bd414c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentDelete.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CommentDelete
+
+> **CommentDelete** = `"CommentDelete"`
+
+The event name for when a comment is deleted
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CommentDeleteDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentDeleteDefinition.md
new file mode 100644
index 00000000..363c31dd
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentDeleteDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CommentDeleteDefinition
+
+> **CommentDeleteDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`CommentDelete`](CommentDelete.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`CommentDelete`](../@devvit/namespaces/EventTypes/interfaces/CommentDelete.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CommentReport.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentReport.md
new file mode 100644
index 00000000..dc8f7bf1
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentReport.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CommentReport
+
+> **CommentReport** = `"CommentReport"`
+
+The event name for when a comment is reported
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CommentReportDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentReportDefinition.md
new file mode 100644
index 00000000..927a0f33
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentReportDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CommentReportDefinition
+
+> **CommentReportDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`CommentReport`](CommentReport.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`CommentReport`](../@devvit/namespaces/EventTypes/interfaces/CommentReport.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CommentSubmit.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentSubmit.md
new file mode 100644
index 00000000..5a985cc0
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentSubmit.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CommentSubmit
+
+> **CommentSubmit** = `"CommentSubmit"`
+
+The event name for when a comment is submitted
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CommentSubmitDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentSubmitDefinition.md
new file mode 100644
index 00000000..e758d85d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentSubmitDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CommentSubmitDefinition
+
+> **CommentSubmitDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`CommentSubmit`](CommentSubmit.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`CommentSubmit`](../@devvit/namespaces/EventTypes/interfaces/CommentSubmit.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CommentUpdate.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentUpdate.md
new file mode 100644
index 00000000..b4096feb
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentUpdate.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CommentUpdate
+
+> **CommentUpdate** = `"CommentUpdate"`
+
+The event name for when a comment is updated
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CommentUpdateDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentUpdateDefinition.md
new file mode 100644
index 00000000..93eb65e3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CommentUpdateDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CommentUpdateDefinition
+
+> **CommentUpdateDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`CommentUpdate`](CommentUpdate.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`CommentUpdate`](../@devvit/namespaces/EventTypes/interfaces/CommentUpdate.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/Configuration.md b/versioned_docs/version-0.13/api/public-api/type-aliases/Configuration.md
new file mode 100644
index 00000000..844020d1
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/Configuration.md
@@ -0,0 +1,105 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: Configuration
+
+> **Configuration** = `object`
+
+## Properties
+
+
+
+### blob?
+
+> `optional` **blob**: [`PluginSettings`](PluginSettings.md) \| `boolean`
+
+Allows your app to use the Blob Plugin
+
+***
+
+
+
+### http?
+
+> `optional` **http**: [`PluginSettings`](PluginSettings.md) \| `boolean` \| \{ `domains`: `string`[]; \}
+
+Allows your app to use the HTTP/Fetch API
+
+***
+
+
+
+### kvStore?
+
+> `optional` **kvStore**: [`PluginSettings`](PluginSettings.md) \| `boolean`
+
+Allows your app to use the Key-Value Store
+
+***
+
+
+
+### media?
+
+> `optional` **media**: [`PluginSettings`](PluginSettings.md) \| `boolean`
+
+Allows media uploads from apps
+
+***
+
+
+
+### realtime?
+
+> `optional` **realtime**: [`PluginSettings`](PluginSettings.md) \| `boolean`
+
+Allows your app to use the Realtime Plugin
+
+***
+
+
+
+### redditAPI?
+
+> `optional` **redditAPI**: [`PluginSettings`](PluginSettings.md) \| `boolean`
+
+Allows your app to use the reddit API
+
+***
+
+
+
+### redis?
+
+> `optional` **redis**: [`PluginSettings`](PluginSettings.md) \| `boolean`
+
+Allows your app to use the Redis Plugin
+
+***
+
+
+
+### userActions?
+
+> `optional` **userActions**: `boolean` \| \{ `enabled`: `boolean`; \} \| \{ `scopes`: `Scope`[]; \}
+
+Allows your app to call Reddit APIs on behalf of the User. Passing a boolean allows you to submit post/comments on behalf of the user.
+
+#### Type declaration
+
+`boolean`
+
+\{ `enabled`: `boolean`; \}
+
+#### enabled
+
+> **enabled**: `boolean`
+
+Defaults to SUBMIT_POST and SUBMIT_COMMENT.
+
+\{ `scopes`: `Scope`[]; \}
+
+#### scopes
+
+> **scopes**: `Scope`[]
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/Context.md b/versioned_docs/version-0.13/api/public-api/type-aliases/Context.md
new file mode 100644
index 00000000..73655c8c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/Context.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: Context
+
+> **Context** = [`ContextAPIClients`](ContextAPIClients.md) & [`BaseContext`](BaseContext.md)
+
+The current app context of the event or render
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ContextAPIClients.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ContextAPIClients.md
new file mode 100644
index 00000000..91a919dd
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ContextAPIClients.md
@@ -0,0 +1,450 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ContextAPIClients
+
+> **ContextAPIClients** = `object`
+
+## Properties
+
+
+
+### assets
+
+> **assets**: `AssetsClient`
+
+A client for resolving static assets to public URLs
+
+***
+
+
+
+### cache
+
+> **cache**: `CacheHelper`
+
+**`Experimental`**
+
+The cache helper will let you cache JSON-able objects in your devvit apps for a limited amount of time.
+
+Under the covers, It's just Redis, so you do need to enable the redis feature. This provides a pattern for e.g. fetching
+remote calls without overwhelming someone's server.
+
+```ts
+Devvit.configure({
+ redis: true, // Enable access to Redis
+});
+
+/// ...
+
+let component = (context) => {
+ let cached = context.cache(async () => {
+ let rsp = await fetch("https://google.com")
+ return rsp.body
+ },
+ {
+ key: "some-fetch",
+ ttl: 10_000 // millis
+ }
+ doSomethingWith(cached);
+ return yay
+}
+```
+
+***
+
+
+
+### dimensions?
+
+> `optional` **dimensions**: `UIDimensions`
+
+**`Experimental`**
+
+Information about about a custom post's layout. Will be undefined
+for non custom post surface areas such as menu items and task schedulers.
+
+***
+
+
+
+### kvStore
+
+> **kvStore**: [`KVStore`](KVStore.md)
+
+A client for the Key Value Store
+
+***
+
+
+
+### media
+
+> **media**: [`MediaPlugin`](MediaPlugin.md)
+
+A client for media API
+
+***
+
+
+
+### realtime
+
+> **realtime**: `RealtimeClient`
+
+A client for Realtime API
+
+***
+
+
+
+### reddit
+
+> **reddit**: `RedditAPIClient`
+
+A client for the Reddit API
+
+***
+
+
+
+### redis
+
+> **redis**: [`RedisClient`](RedisClient.md)
+
+A client for the Redis API
+
+***
+
+
+
+### scheduler
+
+> **scheduler**: [`Scheduler`](Scheduler.md)
+
+A client for the Scheduler API
+
+***
+
+
+
+### settings
+
+> **settings**: [`SettingsClient`](SettingsClient.md)
+
+A client for the Settings API
+
+***
+
+
+
+### ui
+
+> **ui**: [`UIClient`](UIClient.md)
+
+A client for the User Interface API
+
+***
+
+
+
+### uiEnvironment?
+
+> `optional` **uiEnvironment**: `UIEnvironment`
+
+**`Experimental`**
+
+Additional information about client environment.
+Will be undefined for non-ui contexts such as task schedulers or triggers.
+
+***
+
+
+
+### ~~useChannel()~~
+
+> **useChannel**: \<`Message`\>(`options`) => [`UseChannelResult`](UseChannelResult.md)\<`Message`\>
+
+A hook for managing a realtime pubsub channel between Block renders.
+This is only available within a Block Component.
+
+#### Type Parameters
+
+##### Message
+
+`Message` *extends* [`JSONValue`](JSONValue.md) = [`JSONValue`](JSONValue.md)
+
+#### Parameters
+
+##### options
+
+`ChannelOptions`\<`Message`\>
+
+#### Returns
+
+[`UseChannelResult`](UseChannelResult.md)\<`Message`\>
+
+#### Deprecated
+
+Using hooks from context is deprecated and will be removed in a future release. Import and use hooks directly from the public-api.
+```ts
+// Old:
+const channel = context.useChannel(...);
+
+// New:
+import { useChannel } from '@devvit/public-api'
+
+const channel = useChannel(...);
+```
+
+***
+
+
+
+### ~~useForm()~~
+
+> **useForm**: \<`T`\>(`form`, `onSubmit`) => [`FormKey`](FormKey.md)
+
+A hook for managing a form between Block renders.
+This is only available within a Block Component.
+
+#### Type Parameters
+
+##### T
+
+`T` *extends* [`Form`](Form.md) \| [`FormFunction`](FormFunction.md) = [`Form`](Form.md) \| [`FormFunction`](FormFunction.md)
+
+#### Parameters
+
+##### form
+
+`T`
+
+##### onSubmit
+
+(`values`) => `void` \| `Promise`\<`void`\>
+
+#### Returns
+
+[`FormKey`](FormKey.md)
+
+#### Deprecated
+
+Using hooks from context is deprecated and will be removed in a future release. Import and use hooks directly from the public-api.
+```ts
+// Old:
+const myForm = context.useForm(...);
+
+// New:
+import { useForm } from '@devvit/public-api'
+
+const myForm = useForm(...);
+```
+
+***
+
+
+
+### ~~useInterval~~
+
+> **useInterval**: [`UseIntervalHook`](UseIntervalHook.md)
+
+A hook for managing a callback that runs on an interval between Block renders.
+This is only available within a Block Component.
+
+#### Deprecated
+
+Using hooks from context is deprecated and will be removed in a future release. Import and use hooks directly from the public-api.
+```ts
+// Old:
+const interval = context.useInterval(() => {}, 1000);
+
+// New:
+import { useInterval } from '@devvit/public-api'
+
+const interval = useInterval(() => {}, 1000);
+```
+
+## Methods
+
+
+
+### ~~useState()~~
+
+#### Call Signature
+
+> **useState**(`initialState`): [`UseStateResult`](UseStateResult.md)\<`boolean`\>
+
+A hook for managing a state between Block renders. This is only available
+within a Block Component. Returns a tuple containing the current state and
+a function to update it.
+
+```ts
+const [counter, setCounter] = useState(0);
+setCounter(1); // counter = 1
+setCounter((count) => count + 1) // counter = 2
+```
+
+##### Parameters
+
+###### initialState
+
+`boolean` | () => `boolean` \| `Promise`\<`boolean`\>
+
+##### Returns
+
+[`UseStateResult`](UseStateResult.md)\<`boolean`\>
+
+##### Deprecated
+
+Using hooks from context is deprecated and will be removed in a future release. Import and use hooks directly from the public-api.
+```ts
+// Old:
+const [counter, setCounter] = context.useState(0);
+
+// New:
+import { useState } from '@devvit/public-api'
+
+const [counter, setCounter] = useState(0);
+```
+
+#### Call Signature
+
+> **useState**(`initialState`): [`UseStateResult`](UseStateResult.md)\<`number`\>
+
+A hook for managing a state between Block renders. This is only available
+within a Block Component. Returns a tuple containing the current state and
+a function to update it.
+
+```ts
+const [counter, setCounter] = useState(0);
+setCounter(1); // counter = 1
+setCounter((count) => count + 1) // counter = 2
+```
+
+##### Parameters
+
+###### initialState
+
+`number` | () => `number` \| `Promise`\<`number`\>
+
+##### Returns
+
+[`UseStateResult`](UseStateResult.md)\<`number`\>
+
+##### Deprecated
+
+Using hooks from context is deprecated and will be removed in a future release. Import and use hooks directly from the public-api.
+```ts
+// Old:
+const [counter, setCounter] = context.useState(0);
+
+// New:
+import { useState } from '@devvit/public-api'
+
+const [counter, setCounter] = useState(0);
+```
+
+#### Call Signature
+
+> **useState**(`initialState`): [`UseStateResult`](UseStateResult.md)\<`string`\>
+
+A hook for managing a state between Block renders. This is only available
+within a Block Component. Returns a tuple containing the current state and
+a function to update it.
+
+```ts
+const [counter, setCounter] = useState(0);
+setCounter(1); // counter = 1
+setCounter((count) => count + 1) // counter = 2
+```
+
+##### Parameters
+
+###### initialState
+
+`string` | () => `string` \| `Promise`\<`string`\>
+
+##### Returns
+
+[`UseStateResult`](UseStateResult.md)\<`string`\>
+
+##### Deprecated
+
+Using hooks from context is deprecated and will be removed in a future release. Import and use hooks directly from the public-api.
+```ts
+// Old:
+const [counter, setCounter] = context.useState(0);
+
+// New:
+import { useState } from '@devvit/public-api'
+
+const [counter, setCounter] = useState(0);
+```
+
+#### Call Signature
+
+> **useState**\<`S`\>(`initialState`): [`UseStateResult`](UseStateResult.md)\<`S`\>
+
+A hook for managing a state between Block renders. This is only available
+within a Block Component. Returns a tuple containing the current state and
+a function to update it.
+
+```ts
+const [counter, setCounter] = useState(0);
+setCounter(1); // counter = 1
+setCounter((count) => count + 1) // counter = 2
+```
+
+##### Type Parameters
+
+###### S
+
+`S` *extends* `undefined` \| `void` \| [`JSONValue`](JSONValue.md)
+
+##### Parameters
+
+###### initialState
+
+A hook for managing a state between Block renders. This is only available
+within a Block Component. Returns a tuple containing the current state and
+a function to update it.
+
+```ts
+const [counter, setCounter] = useState(0);
+setCounter(1); // counter = 1
+setCounter((count) => count + 1) // counter = 2
+```
+
+**Deprecated**
+
+Using hooks from context is deprecated and will be removed in a future release. Import and use hooks directly from the public-api.
+```ts
+// Old:
+const [counter, setCounter] = context.useState(0);
+
+// New:
+import { useState } from '@devvit/public-api'
+
+const [counter, setCounter] = useState(0);
+```
+
+`S` | () => `S` \| `Promise`\<`S`\>
+
+##### Returns
+
+[`UseStateResult`](UseStateResult.md)\<`S`\>
+
+##### Deprecated
+
+Using hooks from context is deprecated and will be removed in a future release. Import and use hooks directly from the public-api.
+```ts
+// Old:
+const [counter, setCounter] = context.useState(0);
+
+// New:
+import { useState } from '@devvit/public-api'
+
+const [counter, setCounter] = useState(0);
+```
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ContextDebugInfo.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ContextDebugInfo.md
new file mode 100644
index 00000000..58c76abd
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ContextDebugInfo.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ContextDebugInfo
+
+> **ContextDebugInfo** = `object` & `{ [key in AppDebug]?: string }`
+
+## Type declaration
+
+### effects?
+
+> `optional` **effects**: `EffectEmitter`
+
+### ~~metadata~~
+
+> **metadata**: [`Metadata`](Metadata.md)
+
+#### Deprecated
+
+Use Context.metadata.
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/CustomPostType.md b/versioned_docs/version-0.13/api/public-api/type-aliases/CustomPostType.md
new file mode 100644
index 00000000..3e25678a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/CustomPostType.md
@@ -0,0 +1,47 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: CustomPostType
+
+> **CustomPostType** = `object`
+
+## Properties
+
+
+
+### description?
+
+> `optional` **description**: `string`
+
+A description of the custom post type
+
+***
+
+
+
+### height?
+
+> `optional` **height**: [`RootHeight`](../@devvit/namespaces/Devvit/namespaces/Blocks/type-aliases/RootHeight.md)
+
+The fixed height of the post, defaults to 'regular'
+
+***
+
+
+
+### name
+
+> **name**: `string`
+
+The name of the custom post type
+
+***
+
+
+
+### render
+
+> **render**: [`CustomPostComponent`](../@devvit/namespaces/Devvit/type-aliases/CustomPostComponent.md)
+
+A function component that renders the custom post
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/Data.md b/versioned_docs/version-0.13/api/public-api/type-aliases/Data.md
new file mode 100644
index 00000000..32e3f3c3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/Data.md
@@ -0,0 +1,11 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ~~Data~~
+
+> **Data** = [`JSONObject`](JSONObject.md)
+
+## Deprecated
+
+Use JSONObject instead.
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/DevvitDebug.md b/versioned_docs/version-0.13/api/public-api/type-aliases/DevvitDebug.md
new file mode 100644
index 00000000..070e3ec1
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/DevvitDebug.md
@@ -0,0 +1,34 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: DevvitDebug
+
+> **DevvitDebug** = `object`
+
+Home for debug flags, settings, and other information. Any type removals
+may cause type errors but not runtime errors.
+
+**Favor ContextDebugInfo since request-based state is preferred.**
+
+## Properties
+
+
+
+### emitSnapshots?
+
+> `optional` **emitSnapshots**: `boolean`
+
+Should debug block rendering in console.log according to the reified JSX/XML output. Example:
+
+ hi world
+
+***
+
+
+
+### emitState?
+
+> `optional` **emitState**: `boolean`
+
+Should console.log the state of the app after every event.
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/Dispatch.md b/versioned_docs/version-0.13/api/public-api/type-aliases/Dispatch.md
new file mode 100644
index 00000000..de7e4f55
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/Dispatch.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: Dispatch()\
+
+> **Dispatch**\<`A`\> = (`value`) => `void`
+
+## Type Parameters
+
+### A
+
+`A`
+
+## Parameters
+
+### value
+
+`A`
+
+## Returns
+
+`void`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/Form.md b/versioned_docs/version-0.13/api/public-api/type-aliases/Form.md
new file mode 100644
index 00000000..ddc2aee3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/Form.md
@@ -0,0 +1,57 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: Form
+
+> **Form** = `object`
+
+## Properties
+
+
+
+### acceptLabel?
+
+> `optional` **acceptLabel**: `string`
+
+An optional label for the submit button
+
+***
+
+
+
+### cancelLabel?
+
+> `optional` **cancelLabel**: `string`
+
+An optional label for the cancel button
+
+***
+
+
+
+### description?
+
+> `optional` **description**: `string`
+
+An optional description for the form
+
+***
+
+
+
+### fields
+
+> **fields**: [`FormField`](FormField.md)[]
+
+The fields that will be displayed in the form
+
+***
+
+
+
+### title?
+
+> `optional` **title**: `string`
+
+An optional title for the form
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/FormDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/FormDefinition.md
new file mode 100644
index 00000000..0a7ca6e8
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/FormDefinition.md
@@ -0,0 +1,33 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: FormDefinition\
+
+> **FormDefinition**\<`T`\> = `object`
+
+## Type Parameters
+
+### T
+
+`T` *extends* [`Form`](Form.md) \| [`FormFunction`](FormFunction.md) = [`Form`](Form.md) \| [`FormFunction`](FormFunction.md)
+
+## Properties
+
+
+
+### form
+
+> **form**: `T`
+
+A form or a function that returns a form
+
+***
+
+
+
+### onSubmit
+
+> **onSubmit**: [`FormOnSubmitEventHandler`](FormOnSubmitEventHandler.md)\<[`FormToFormValues`](FormToFormValues.md)\<`T`\>\>
+
+A callback that will be invoked when the form is submitted
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/FormField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/FormField.md
new file mode 100644
index 00000000..b56bf18f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/FormField.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: FormField
+
+> **FormField** = [`StringField`](StringField.md) \| [`ImageField`](ImageField.md) \| [`ParagraphField`](ParagraphField.md) \| [`NumberField`](NumberField.md) \| [`BooleanField`](BooleanField.md) \| [`SelectField`](SelectField.md) \| [`FormFieldGroup`](FormFieldGroup.md)
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/FormFieldGroup.md b/versioned_docs/version-0.13/api/public-api/type-aliases/FormFieldGroup.md
new file mode 100644
index 00000000..487cd790
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/FormFieldGroup.md
@@ -0,0 +1,55 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: FormFieldGroup
+
+> **FormFieldGroup** = `object`
+
+A grouping of fields
+
+## Properties
+
+
+
+### fields
+
+> **fields**: [`FormField`](FormField.md)[]
+
+The fields that will be displayed in the group
+
+***
+
+
+
+### helpText?
+
+> `optional` **helpText**: `string`
+
+An optional help text that will be displayed below the group
+
+***
+
+
+
+### label
+
+> **label**: `string`
+
+The label of the group that will be displayed to the user
+
+***
+
+
+
+### required?
+
+> `optional` **required**: `never`
+
+***
+
+
+
+### type
+
+> **type**: `"group"`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/FormFunction.md b/versioned_docs/version-0.13/api/public-api/type-aliases/FormFunction.md
new file mode 100644
index 00000000..b48bea89
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/FormFunction.md
@@ -0,0 +1,41 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: FormFunction()\
+
+> **FormFunction**\<`T`\> = (`data`) => [`Form`](Form.md)
+
+A function that returns a form. You can use this to dynamically generate a form.
+
+## Type Parameters
+
+### T
+
+`T` *extends* `object` = \{\}
+
+## Parameters
+
+### data
+
+`T`
+
+## Returns
+
+[`Form`](Form.md)
+
+## Example
+
+```ts
+const formKey = Devvit.createForm((data) => ({
+ fields: data.fields,
+ title: data.title,
+}), callback);
+
+...
+
+ui.showForm(formKey, {
+ fields: [{ type: 'string', name: 'title', label: 'Title' }]
+ title: 'My dynamic form'
+});
+```
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/FormKey.md b/versioned_docs/version-0.13/api/public-api/type-aliases/FormKey.md
new file mode 100644
index 00000000..5891edce
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/FormKey.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: FormKey
+
+> **FormKey** = `` `form.${number}` `` \| `` `form.hook.${string}.${number}` ``
+
+A unique key generated by `Devvit.createForm` or the `useForm` hook.
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/FormOnSubmitEvent.md b/versioned_docs/version-0.13/api/public-api/type-aliases/FormOnSubmitEvent.md
new file mode 100644
index 00000000..6f9c3e14
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/FormOnSubmitEvent.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: FormOnSubmitEvent\
+
+> **FormOnSubmitEvent**\<`T`\> = `object`
+
+## Type Parameters
+
+### T
+
+`T` *extends* `Partial`\<[`JSONObject`](JSONObject.md)\>
+
+## Properties
+
+
+
+### values
+
+> **values**: `T`
+
+The form values that were submitted
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/FormOnSubmitEventHandler.md b/versioned_docs/version-0.13/api/public-api/type-aliases/FormOnSubmitEventHandler.md
new file mode 100644
index 00000000..ae713148
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/FormOnSubmitEventHandler.md
@@ -0,0 +1,27 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: FormOnSubmitEventHandler()\
+
+> **FormOnSubmitEventHandler**\<`Data`\> = (`event`, `context`) => `void` \| `Promise`\<`void`\>
+
+## Type Parameters
+
+### Data
+
+`Data` *extends* `Partial`\<[`JSONObject`](JSONObject.md)\>
+
+## Parameters
+
+### event
+
+[`FormOnSubmitEvent`](FormOnSubmitEvent.md)\<`Data`\>
+
+### context
+
+[`Context`](../@devvit/namespaces/Devvit/type-aliases/Context.md)
+
+## Returns
+
+`void` \| `Promise`\<`void`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/FormToFormValues.md b/versioned_docs/version-0.13/api/public-api/type-aliases/FormToFormValues.md
new file mode 100644
index 00000000..0aa4386f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/FormToFormValues.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: FormToFormValues\
+
+> **FormToFormValues**\<`T`\> = `FormFieldsToFormValues`\<`T` *extends* [`FormFunction`](FormFunction.md) ? `ReturnType`\<`T`\> : `T`\[`"fields"`\]\>
+
+## Type Parameters
+
+### T
+
+`T` *extends* [`Form`](Form.md) \| [`FormFunction`](FormFunction.md) = [`Form`](Form.md) \| [`FormFunction`](FormFunction.md)
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/FormValues.md b/versioned_docs/version-0.13/api/public-api/type-aliases/FormValues.md
new file mode 100644
index 00000000..7b074211
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/FormValues.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: FormValues
+
+> **FormValues** = `FormValuesTyped`\<[`JSONObject`](JSONObject.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/IconName.md b/versioned_docs/version-0.13/api/public-api/type-aliases/IconName.md
new file mode 100644
index 00000000..a062aa05
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/IconName.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: IconName
+
+> **IconName** = `` `${AllIconName}` `` \| `` `${AllIconName}-outline` `` \| `` `${AllIconName}-fill` ``
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ImageField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ImageField.md
new file mode 100644
index 00000000..1ca068b3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ImageField.md
@@ -0,0 +1,18 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ImageField
+
+> **ImageField** = `Omit`\<[`BaseField`](BaseField.md)\<`string`\>, `"defaultValue"`\> & `object`
+
+**`Experimental`**
+
+Allows a user to upload an image as part of submitting the form. The string value that's
+given back is the URL of the image.
+
+## Type declaration
+
+### type
+
+> **type**: `"image"`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/JSONArray.md b/versioned_docs/version-0.13/api/public-api/type-aliases/JSONArray.md
new file mode 100644
index 00000000..4caeffee
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/JSONArray.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: JSONArray
+
+> **JSONArray** = [`JSONValue`](JSONValue.md)[]
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/JSONObject.md b/versioned_docs/version-0.13/api/public-api/type-aliases/JSONObject.md
new file mode 100644
index 00000000..4c83a032
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/JSONObject.md
@@ -0,0 +1,11 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: JSONObject
+
+> **JSONObject** = `object`
+
+## Index Signature
+
+\[`key`: `string`\]: [`JSONValue`](JSONValue.md)
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/JSONPrimitive.md b/versioned_docs/version-0.13/api/public-api/type-aliases/JSONPrimitive.md
new file mode 100644
index 00000000..f276c0e5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/JSONPrimitive.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: JSONPrimitive
+
+> **JSONPrimitive** = `boolean` \| `null` \| `number` \| `string`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/JSONValue.md b/versioned_docs/version-0.13/api/public-api/type-aliases/JSONValue.md
new file mode 100644
index 00000000..4342d1c9
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/JSONValue.md
@@ -0,0 +1,19 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: JSONValue
+
+> **JSONValue** = [`JSONPrimitive`](JSONPrimitive.md) \| [`JSONArray`](JSONArray.md) \| [`JSONObject`](JSONObject.md)
+
+Any JSON type. Ie, a string, number, boolean, null, an array of these JSON
+types, or an object with JSON type values, recursively.
+
+This type is often used to type-check attempts to serialize and deserialize
+classes, functions, and other _JavaScript_-only types that cannot be
+represented losslessly in plain JSON.
+
+## See
+
+ - https://github.com/microsoft/TypeScript/issues/1897
+ - https://www.json.org
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/JobContext.md b/versioned_docs/version-0.13/api/public-api/type-aliases/JobContext.md
new file mode 100644
index 00000000..856a728d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/JobContext.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: JobContext
+
+> **JobContext** = `Omit`\<[`Context`](../@devvit/namespaces/Devvit/type-aliases/Context.md), `"ui"` \| `"dimensions"` \| `"modLog"` \| `"uiEnvironment"`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/KVStore.md b/versioned_docs/version-0.13/api/public-api/type-aliases/KVStore.md
new file mode 100644
index 00000000..0267dc5e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/KVStore.md
@@ -0,0 +1,91 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: KVStore
+
+> **KVStore** = `object`
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(`key`): `Promise`\<`void`\>
+
+Deletes a key from the store if present
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### get()
+
+> **get**\<`T`\>(`key`): `Promise`\<`undefined` \| `T`\>
+
+Retrieves a value from the store at the given key
+
+#### Type Parameters
+
+##### T
+
+`T` *extends* [`JSONValue`](JSONValue.md) = [`JSONValue`](JSONValue.md)
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`undefined` \| `T`\>
+
+***
+
+
+
+### list()
+
+> **list**(): `Promise`\<`string`[]\>
+
+Returns a list of keys in the store
+
+#### Returns
+
+`Promise`\<`string`[]\>
+
+***
+
+
+
+### put()
+
+> **put**(`key`, `value`): `Promise`\<`void`\>
+
+Assigns a value to a key in the store
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### value
+
+[`JSONValue`](JSONValue.md)
+
+#### Returns
+
+`Promise`\<`void`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/MediaAsset.md b/versioned_docs/version-0.13/api/public-api/type-aliases/MediaAsset.md
new file mode 100644
index 00000000..c64c8e88
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/MediaAsset.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: MediaAsset
+
+> **MediaAsset** = `object`
+
+## Properties
+
+
+
+### mediaId
+
+> **mediaId**: `string`
+
+***
+
+
+
+### mediaUrl
+
+> **mediaUrl**: `string`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/MediaPlugin.md b/versioned_docs/version-0.13/api/public-api/type-aliases/MediaPlugin.md
new file mode 100644
index 00000000..e9cbfdfd
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/MediaPlugin.md
@@ -0,0 +1,41 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: MediaPlugin
+
+> **MediaPlugin** = `object`
+
+## Methods
+
+
+
+### upload()
+
+> **upload**(`opts`): `Promise`\<[`MediaAsset`](MediaAsset.md)\>
+
+Uploads media from external URL to Reddit
+
+#### Parameters
+
+##### opts
+
+[`UploadMediaOptions`](UploadMediaOptions.md)
+
+#### Returns
+
+`Promise`\<[`MediaAsset`](MediaAsset.md)\>
+
+A Promise that resolves to a MediaAsset object.
+
+#### Example
+
+```ts
+ const response = await context.media.upload({
+ url: "https://media2.giphy.com/media/xTiN0CNHgoRf1Ha7CM/giphy.gif",
+ type: "gif"
+ });
+ res.json({
+ imageUrl: response.mediaUrl // This reddit hosted URL can be displayed by your client
+ });
+```
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItem.md b/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItem.md
new file mode 100644
index 00000000..0b132437
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItem.md
@@ -0,0 +1,83 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: MenuItem
+
+> **MenuItem** = `object`
+
+## Properties
+
+
+
+### description?
+
+> `optional` **description**: `string`
+
+An optional description for the menu item
+
+***
+
+
+
+### forUserType?
+
+> `optional` **forUserType**: [`MenuItemUserType`](MenuItemUserType.md) \| [`MenuItemUserType`](MenuItemUserType.md)[]
+
+The user type(s) that the menu item should be displayed for
+
+***
+
+
+
+### label
+
+> **label**: `string`
+
+The label of the menu item
+
+***
+
+
+
+### location
+
+> **location**: [`MenuItemLocation`](MenuItemLocation.md) \| [`MenuItemLocation`](MenuItemLocation.md)[]
+
+The location(s) where the menu item should be displayed
+
+***
+
+
+
+### onPress()
+
+> **onPress**: (`event`, `context`) => `void` \| `Promise`\<`void`\>
+
+A function that is called when the menu item is pressed
+
+#### Parameters
+
+##### event
+
+[`MenuItemOnPressEvent`](MenuItemOnPressEvent.md)
+
+##### context
+
+[`Context`](../@devvit/namespaces/Devvit/type-aliases/Context.md)
+
+#### Returns
+
+`void` \| `Promise`\<`void`\>
+
+***
+
+
+
+### postFilter?
+
+> `optional` **postFilter**: [`MenuItemPostFilter`](MenuItemPostFilter.md)
+
+**`Experimental`**
+
+The filter that applies to post menu items and has no effect on non-post actions
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemLocation.md b/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemLocation.md
new file mode 100644
index 00000000..7ee13103
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemLocation.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: MenuItemLocation
+
+> **MenuItemLocation** = `"subreddit"` \| `"post"` \| `"comment"`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemOnPressEvent.md b/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemOnPressEvent.md
new file mode 100644
index 00000000..22d351eb
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemOnPressEvent.md
@@ -0,0 +1,31 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: MenuItemOnPressEvent
+
+> **MenuItemOnPressEvent** = `object`
+
+## Properties
+
+
+
+### location
+
+> **location**: [`MenuItemLocation`](MenuItemLocation.md)
+
+The location where the menu item was pressed
+
+***
+
+
+
+### targetId
+
+> **targetId**: `string`
+
+The ID of subreddit, post, or comment that the menu item was pressed;
+includes Thing ID prefix:
+- t1_ - comment
+- t5_ - subreddit
+- t3_ - post
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemPostFilter.md b/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemPostFilter.md
new file mode 100644
index 00000000..d721eb65
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemPostFilter.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: MenuItemPostFilter
+
+> **MenuItemPostFilter** = `"currentApp"`
+
+You can use the "currentApp" filter to only display the menu item on custom posts that were created by your app.
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemUserType.md b/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemUserType.md
new file mode 100644
index 00000000..d48f821c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/MenuItemUserType.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: MenuItemUserType
+
+> **MenuItemUserType** = `"loggedOut"` \| `"moderator"`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/Metadata.md b/versioned_docs/version-0.13/api/public-api/type-aliases/Metadata.md
new file mode 100644
index 00000000..5bf37487
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/Metadata.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: Metadata
+
+> **Metadata** = `object`
+
+Optional RPC metadata passed with every request.
+
+## Index Signature
+
+\[`key`: `string`\]: `Strings`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ModActionDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ModActionDefinition.md
new file mode 100644
index 00000000..c9cbe442
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ModActionDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ModActionDefinition
+
+> **ModActionDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`ModActionTrigger`](ModActionTrigger.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<`protos.ModAction`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ModActionTrigger.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ModActionTrigger.md
new file mode 100644
index 00000000..0c0dd8d6
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ModActionTrigger.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ModActionTrigger
+
+> **ModActionTrigger** = `"ModAction"`
+
+The event name for when a moderator action is recorded to a subreddit's modlog
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ModMailDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ModMailDefinition.md
new file mode 100644
index 00000000..699f0cb0
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ModMailDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ModMailDefinition
+
+> **ModMailDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`ModMailTrigger`](ModMailTrigger.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<`protos.ModMail`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ModMailTrigger.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ModMailTrigger.md
new file mode 100644
index 00000000..8669cf02
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ModMailTrigger.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ModMailTrigger
+
+> **ModMailTrigger** = `"ModMail"`
+
+The event name for when a mod mail is sent/received
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/MultiTriggerDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/MultiTriggerDefinition.md
new file mode 100644
index 00000000..6e8db7fd
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/MultiTriggerDefinition.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: MultiTriggerDefinition\
+
+> **MultiTriggerDefinition**\<`Event`\> = `object`
+
+## Type Parameters
+
+### Event
+
+`Event` *extends* [`TriggerEvent`](TriggerEvent.md)
+
+## Properties
+
+
+
+### events
+
+> **events**: readonly `Event`[]
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`TriggerEventType`](TriggerEventType.md)\[`Event`\]\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/NumberField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/NumberField.md
new file mode 100644
index 00000000..3089fc44
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/NumberField.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: NumberField
+
+> **NumberField** = `Prettify`\<[`BaseField`](BaseField.md)\<`number`\> & `Omit`\<`FieldConfig_Number`, `"min"` \| `"max"` \| `"step"`\> & `object`\>
+
+A number field
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/OnAutomoderatorFilterCommentDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/OnAutomoderatorFilterCommentDefinition.md
new file mode 100644
index 00000000..af49cca7
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/OnAutomoderatorFilterCommentDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: OnAutomoderatorFilterCommentDefinition
+
+> **OnAutomoderatorFilterCommentDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`AutomoderatorFilterComment`](AutomoderatorFilterComment.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`AutomoderatorFilterComment`](../@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterComment.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/OnAutomoderatorFilterPostDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/OnAutomoderatorFilterPostDefinition.md
new file mode 100644
index 00000000..f90d426a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/OnAutomoderatorFilterPostDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: OnAutomoderatorFilterPostDefinition
+
+> **OnAutomoderatorFilterPostDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`AutomoderatorFilterPost`](AutomoderatorFilterPost.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`AutomoderatorFilterPost`](../@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterPost.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/OnTriggerRequest.md b/versioned_docs/version-0.13/api/public-api/type-aliases/OnTriggerRequest.md
new file mode 100644
index 00000000..bc2d8181
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/OnTriggerRequest.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: OnTriggerRequest
+
+> **OnTriggerRequest** = [`PostFlairUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostFlairUpdate.md) \| [`PostSubmit`](../@devvit/namespaces/EventTypes/interfaces/PostSubmit.md) \| [`PostCreate`](../@devvit/namespaces/EventTypes/interfaces/PostCreate.md) \| [`PostUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostUpdate.md) \| [`PostReport`](../@devvit/namespaces/EventTypes/interfaces/PostReport.md) \| [`PostDelete`](../@devvit/namespaces/EventTypes/interfaces/PostDelete.md) \| [`CommentSubmit`](../@devvit/namespaces/EventTypes/interfaces/CommentSubmit.md) \| [`CommentCreate`](../@devvit/namespaces/EventTypes/interfaces/CommentCreate.md) \| [`CommentUpdate`](../@devvit/namespaces/EventTypes/interfaces/CommentUpdate.md) \| [`CommentReport`](../@devvit/namespaces/EventTypes/interfaces/CommentReport.md) \| [`CommentDelete`](../@devvit/namespaces/EventTypes/interfaces/CommentDelete.md) \| [`AppInstall`](../@devvit/namespaces/EventTypes/interfaces/AppInstall.md) \| [`AppUpgrade`](../@devvit/namespaces/EventTypes/interfaces/AppUpgrade.md) \| `protos.ModAction` \| `protos.ModMail` \| [`PostNsfwUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostNsfwUpdate.md) \| [`PostSpoilerUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostSpoilerUpdate.md) \| [`AutomoderatorFilterPost`](../@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterPost.md) \| [`AutomoderatorFilterComment`](../@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterComment.md)
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/OnValidateHandler.md b/versioned_docs/version-0.13/api/public-api/type-aliases/OnValidateHandler.md
new file mode 100644
index 00000000..4359f312
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/OnValidateHandler.md
@@ -0,0 +1,27 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: OnValidateHandler()\
+
+> **OnValidateHandler**\<`ValueType`\> = (`event`, `context`) => `void` \| `string` \| `Promise`\<`void` \| `string`\>
+
+## Type Parameters
+
+### ValueType
+
+`ValueType`
+
+## Parameters
+
+### event
+
+[`SettingsFormFieldValidatorEvent`](SettingsFormFieldValidatorEvent.md)\<`ValueType`\>
+
+### context
+
+[`Context`](../@devvit/namespaces/Devvit/type-aliases/Context.md)
+
+## Returns
+
+`void` \| `string` \| `Promise`\<`void` \| `string`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ParagraphField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ParagraphField.md
new file mode 100644
index 00000000..87b9ecf6
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ParagraphField.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ParagraphField
+
+> **ParagraphField** = `Prettify`\<[`BaseField`](BaseField.md)\<`string`\> & `Omit`\<`FieldConfig_Paragraph`, `"maxCharacters"`\> & `object`\>
+
+A paragraph or textarea field
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONArray.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONArray.md
new file mode 100644
index 00000000..fb3596f8
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONArray.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PartialJSONArray
+
+> **PartialJSONArray** = [`PartialJSONValue`](PartialJSONValue.md)[]
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONObject.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONObject.md
new file mode 100644
index 00000000..76f8b13b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONObject.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PartialJSONObject
+
+> **PartialJSONObject** = `Partial`\<\{\}\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONPrimitive.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONPrimitive.md
new file mode 100644
index 00000000..cc172e86
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONPrimitive.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PartialJSONPrimitive
+
+> **PartialJSONPrimitive** = `boolean` \| `null` \| `number` \| `string` \| `undefined`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONValue.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONValue.md
new file mode 100644
index 00000000..b92ce734
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PartialJSONValue.md
@@ -0,0 +1,25 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PartialJSONValue
+
+> **PartialJSONValue** = [`PartialJSONPrimitive`](PartialJSONPrimitive.md) \| [`PartialJSONArray`](PartialJSONArray.md) \| [`PartialJSONObject`](PartialJSONObject.md)
+
+Like JSONValue but deeply allow lossy undefined values that are easier to
+type but may de/serialize differently or incorrectly. For example:
+
+- `JSON.stringify({a: 1, b: 2, c: undefined, d: 3})`: `'{"a":1,"b":2,"d":3}'`.
+- `JSON.stringify([1, 2, undefined, 3])`: `'[1,2,null,3]'`.
+- `JSON.stringify(undefined)`: `undefined`.
+
+JSON.stringify() accepts an `any` input so there are no typing guards. Prefer
+plain JSONValue when possible.
+
+One mostly only cares about stringify since creating a JSON string with
+undefineds in it would require deliberate effort. These all throw errors:
+
+- `JSON.parse('{a: 1, b: 2, c: undefined, d: 3}')`.
+- `JSON.parse('[1, 2, undefined, 3]')`.
+- `JSON.parse('undefined')`.
+- `JSON.parse(undefined)` (also a typing error).
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PluginSettings.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PluginSettings.md
new file mode 100644
index 00000000..ce9d9500
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PluginSettings.md
@@ -0,0 +1,17 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PluginSettings
+
+> **PluginSettings** = `object`
+
+## Properties
+
+
+
+### enabled
+
+> **enabled**: `boolean`
+
+Whether the plugin is enabled
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostCreate.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostCreate.md
new file mode 100644
index 00000000..afa3c702
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostCreate.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostCreate
+
+> **PostCreate** = `"PostCreate"`
+
+The event name for when a post is created, after safety delay
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostCreateDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostCreateDefinition.md
new file mode 100644
index 00000000..24715595
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostCreateDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostCreateDefinition
+
+> **PostCreateDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`PostCreate`](PostCreate.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`PostCreate`](../@devvit/namespaces/EventTypes/interfaces/PostCreate.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostDelete.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostDelete.md
new file mode 100644
index 00000000..ce910333
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostDelete.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostDelete
+
+> **PostDelete** = `"PostDelete"`
+
+The event name for when a post is deleted
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostDeleteDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostDeleteDefinition.md
new file mode 100644
index 00000000..d78341e5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostDeleteDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostDeleteDefinition
+
+> **PostDeleteDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`PostDelete`](PostDelete.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`PostDelete`](../@devvit/namespaces/EventTypes/interfaces/PostDelete.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostFlairUpdate.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostFlairUpdate.md
new file mode 100644
index 00000000..79f47c7a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostFlairUpdate.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostFlairUpdate
+
+> **PostFlairUpdate** = `"PostFlairUpdate"`
+
+The event name for when the flair of a post is updated
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostFlairUpdateDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostFlairUpdateDefinition.md
new file mode 100644
index 00000000..b17ad5ce
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostFlairUpdateDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostFlairUpdateDefinition
+
+> **PostFlairUpdateDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`PostFlairUpdate`](PostFlairUpdate.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`PostFlairUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostFlairUpdate.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostNsfwUpdate.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostNsfwUpdate.md
new file mode 100644
index 00000000..32f7214b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostNsfwUpdate.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostNsfwUpdate
+
+> **PostNsfwUpdate** = `"PostNsfwUpdate"`
+
+The event name for when a post is marked/unmarked as nsfw
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostNsfwUpdateDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostNsfwUpdateDefinition.md
new file mode 100644
index 00000000..717ecb9c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostNsfwUpdateDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostNsfwUpdateDefinition
+
+> **PostNsfwUpdateDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`PostNsfwUpdate`](PostNsfwUpdate.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`PostNsfwUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostNsfwUpdate.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostReport.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostReport.md
new file mode 100644
index 00000000..2a010c7b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostReport.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostReport
+
+> **PostReport** = `"PostReport"`
+
+The event name for when a post is reported
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostReportDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostReportDefinition.md
new file mode 100644
index 00000000..22589e02
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostReportDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostReportDefinition
+
+> **PostReportDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`PostReport`](PostReport.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`PostReport`](../@devvit/namespaces/EventTypes/interfaces/PostReport.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostSpoilerUpdate.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostSpoilerUpdate.md
new file mode 100644
index 00000000..679706ff
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostSpoilerUpdate.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostSpoilerUpdate
+
+> **PostSpoilerUpdate** = `"PostSpoilerUpdate"`
+
+The event name for when a post is marked/unmarked as spoiler
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostSpoilerUpdateDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostSpoilerUpdateDefinition.md
new file mode 100644
index 00000000..491ba212
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostSpoilerUpdateDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostSpoilerUpdateDefinition
+
+> **PostSpoilerUpdateDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`PostSpoilerUpdate`](PostSpoilerUpdate.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`PostSpoilerUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostSpoilerUpdate.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostSubmit.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostSubmit.md
new file mode 100644
index 00000000..4825f6fc
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostSubmit.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostSubmit
+
+> **PostSubmit** = `"PostSubmit"`
+
+The event name for when a post is submitted
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostSubmitDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostSubmitDefinition.md
new file mode 100644
index 00000000..c2d109ae
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostSubmitDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostSubmitDefinition
+
+> **PostSubmitDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`PostSubmit`](PostSubmit.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`PostSubmit`](../@devvit/namespaces/EventTypes/interfaces/PostSubmit.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostUpdate.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostUpdate.md
new file mode 100644
index 00000000..e293d4f7
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostUpdate.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostUpdate
+
+> **PostUpdate** = `"PostUpdate"`
+
+The event name for when a post is updated
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/PostUpdateDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/PostUpdateDefinition.md
new file mode 100644
index 00000000..0cf90261
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/PostUpdateDefinition.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: PostUpdateDefinition
+
+> **PostUpdateDefinition** = `object`
+
+## Properties
+
+
+
+### event
+
+> **event**: [`PostUpdate`](PostUpdate.md)
+
+***
+
+
+
+### onEvent
+
+> **onEvent**: [`TriggerOnEventHandler`](TriggerOnEventHandler.md)\<[`PostUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostUpdate.md)\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/RedisClient.md b/versioned_docs/version-0.13/api/public-api/type-aliases/RedisClient.md
new file mode 100644
index 00000000..ceaf598f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/RedisClient.md
@@ -0,0 +1,2212 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: RedisClient
+
+> **RedisClient** = `object`
+
+## Properties
+
+
+
+### global
+
+> **global**: `Omit`\<`RedisClient`, `"global"`\>
+
+Allows read/write operations to global keys in Redis
+Global redis enables apps to persist and access state across subreddit installations
+
+## Methods
+
+
+
+### bitfield()
+
+> **bitfield**(`key`, ...`cmds`): `Promise`\<`number`[]\>
+
+Performs operations on a redis string treating it as an array of bits.
+Operations available:
+ - get -- Returns the specified bit field.
+ - set -- Sets the specified bit field and returns its old value.
+ - incrBy -- Increments or decrements (if a negative increment is given) the specified bit field and returns the new value.
+ - overflow [wrap|sat|fail] -- Alters the overflow behavior of subsequent set's and incrBy's until the next overflow command
+https://redis.io/docs/latest/commands/bitfield/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### cmds
+
+\[\] | [`BitfieldCommand`](BitfieldCommand.md) | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"get"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"set"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"incrBy"`, `` `i${number}` `` \| `` `u${number}` ``, `BitfieldOffset`, `number` \| `` `${number}` ``, ...(string \| number)\[\]\] | \[`"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, `"overflow"`, `"wrap"` \| `"sat"` \| `"fail"`, ...(string \| number)\[\]\]
+
+#### Returns
+
+`Promise`\<`number`[]\>
+
+an array with the result of each command, in order
+
+#### Arg
+
+key the redis key containing the string to operate on
+
+#### Arg
+
+cmds the commands to perform on the string
+
+#### Example
+
+```ts
+async function bitfieldExample(context: Devvit.Context) {
+ const fooResults : number[] =
+ await context.redis.bitfield('foo', 'incrBy', 'i5', 100, 1, 'get', 'u4', 0);
+ console.log("fooResults: " + fooResults); // [1, 0]
+
+ const barResults : number[] =
+ await context.redis.bitfield('bar',
+ 'set', 'u2', 0, 3,
+ 'get', 'u2', 0,
+ 'incrBy', 'u2', 0, 1,
+ 'overflow', 'sat',
+ 'get', 'u2', 0,
+ 'set', 'u2', 0, 3,
+ 'incrBy', 'u2', 0, 1);
+ console.log("barResults: " + barResults); // [0, 3, 0, 0, 3, 3]
+}
+```
+
+***
+
+
+
+### del()
+
+> **del**(...`keys`): `Promise`\<`void`\>
+
+Removes the specified keys. A key is ignored if it does not exist.
+https://redis.io/commands/del/
+
+#### Parameters
+
+##### keys
+
+...`string`[]
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Arg
+
+keys
+
+#### Example
+
+```ts
+async function delExample(context: Devvit.Context) {
+ await context.redis.set("quantity", "5");
+ await context.redis.del("quantity");
+}
+```
+
+***
+
+
+
+### exists()
+
+> **exists**(...`keys`): `Promise`\<`number`\>
+
+Returns number of given keys that exists
+https://redis.io/commands/exists/
+
+#### Parameters
+
+##### keys
+
+...`string`[]
+
+#### Returns
+
+`Promise`\<`number`\>
+
+number of keys in the list of keys that exist (note: double counts if an existing key is passed twice)
+
+#### Arg
+
+keys Keys to check for existence
+
+#### Example
+
+```ts
+async function existsExample(context: Devvit.Context) {
+ const exists : number = await context.redis.exists("someKey");
+ console.log("Exists: " + exists); // 0
+
+ await context.redis.set("someKey", "someValue");
+ const exists2 : number = await context.redis.exists("someKey", "someOtherKey");
+ console.log("Exists2: " + exists2); // 1
+
+ await context.redis.set("someOtherKey", "someOtherValue");
+ const exists3 : number = await context.redis.exists("someKey", "someKey", "someOtherKey");
+ console.log("Exists3: " + exists3); // 3, since "someKey" is counted twice
+}
+```
+
+***
+
+
+
+### expire()
+
+> **expire**(`key`, `seconds`): `Promise`\<`void`\>
+
+Set a timeout on key.
+https://redis.io/commands/expire/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### seconds
+
+`number`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Arg
+
+key
+
+#### Arg
+
+seconds
+
+#### Example
+
+```ts
+async function expireExample(context: Devvit.Context) {
+ await context.redis.set("product", "milk");
+ await context.redis.expire("product", 60); // Set the product to expire in 60 seconds
+}
+```
+
+***
+
+
+
+### expireTime()
+
+> **expireTime**(`key`): `Promise`\<`number`\>
+
+Returns the absolute Unix timestamp in seconds at which the given key will expire
+https://redis.io/commands/expiretime/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+expiration Unix timestamp in seconds, or a negative value in order to signal an error
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function expireTimeExample(context: Devvit.Context) {
+ await context.redis.set("product", "milk");
+ const expireTime : number = await context.redis.expireTime("product");
+ console.log("Expire time: " + expireTime);
+}
+```
+
+***
+
+
+
+### get()
+
+> **get**(`key`): `Promise`\<`undefined` \| `string`\>
+
+Get the value of key. If the key does not exist the special value nil is returned.
+An exception will be raised if the value of key is not a valid utf-8 encoding.
+https://redis.io/commands/get/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`undefined` \| `string`\>
+
+value of key or null when key does not exist.
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function getExample(context: Devvit.Context) {
+ await context.redis.set("quantity", "5");
+ const quantity : string | undefined = await context.redis.get("quantity");
+ console.log("Quantity: " + quantity);
+}
+```
+
+***
+
+
+
+### getBuffer()
+
+> **getBuffer**(`key`): `Promise`\<`undefined` \| `Buffer`\>
+
+Get the value of key and return it as a buffer.
+Use getBytes instead of get if you need to tolerate values that are not valid utf-8.
+If the key does not exist the special value nil is returned.
+https://redis.io/commands/get/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`undefined` \| `Buffer`\>
+
+value of key or null when key does not exist.
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function getExample(context: Devvit.Context) {
+ await context.redis.bitfield("nonutf8", "set", "u8", "0", "192");
+ const buf : string | undefined = await context.redis.getBuffer("nonutf8");
+ console.log("Bytes: " + JSON.stringify(buf));
+}
+```
+
+***
+
+
+
+### getRange()
+
+> **getRange**(`key`, `start`, `end`): `Promise`\<`string`\>
+
+Returns the substring of the string value stored at key, determined by
+the offsets start and end (both are inclusive).
+https://redis.io/commands/getrange/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### start
+
+`number`
+
+##### end
+
+`number`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+substring determined by offsets [start, end]
+
+#### Arg
+
+key
+
+#### Arg
+
+start
+
+#### Arg
+
+end
+
+#### Example
+
+```ts
+async function getRangeExample(context: Devvit.Context) {
+ await context.redis.set("word", "tacocat");
+ const range : string = await context.redis.getRange("word", 0, 3)
+ console.log("Range from index 0 to 3: " + range);
+}
+```
+
+***
+
+
+
+### ~~hdel()~~
+
+> **hdel**(`key`, `fields`): `Promise`\<`number`\>
+
+Removes the specified fields from the hash stored at key.
+https://redis.io/commands/hdel/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### fields
+
+`string`[]
+
+#### Returns
+
+`Promise`\<`number`\>
+
+number of fields that were removed from the hash
+
+#### Deprecated
+
+Use [RedisClient.hDel](#hdel-2) instead.
+
+#### Arg
+
+key
+
+#### Arg
+
+fields
+
+***
+
+
+
+### hDel()
+
+> **hDel**(`key`, `fields`): `Promise`\<`number`\>
+
+Removes the specified fields from the hash stored at key.
+https://redis.io/commands/hdel/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### fields
+
+`string`[]
+
+#### Returns
+
+`Promise`\<`number`\>
+
+number of fields that were removed from the hash
+
+#### Arg
+
+key
+
+#### Arg
+
+fields
+
+#### Example
+
+```ts
+async function hDelExample(context: Devvit.Context) {
+ await context.redis.hSet("fruits", {"apple": "5", "orange": "7", "kiwi": "9"});
+ const numFieldsRemoved = await context.redis.hDel("fruits", ["apple", "kiwi"]);
+ console.log("Number of fields removed: " + numFieldsRemoved);
+}
+```
+
+***
+
+
+
+### ~~hget()~~
+
+> **hget**(`key`, `field`): `Promise`\<`undefined` \| `string`\>
+
+Returns the value associated with field in the hash stored at key.
+https://redis.io/commands/hget
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### field
+
+`string`
+
+#### Returns
+
+`Promise`\<`undefined` \| `string`\>
+
+value associated with field
+
+#### Deprecated
+
+Use [RedisClient.hGet](#hget-2) instead.
+
+#### Arg
+
+key
+
+#### Arg
+
+field
+
+***
+
+
+
+### hGet()
+
+> **hGet**(`key`, `field`): `Promise`\<`undefined` \| `string`\>
+
+Returns the value associated with field in the hash stored at key.
+https://redis.io/commands/hget
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### field
+
+`string`
+
+#### Returns
+
+`Promise`\<`undefined` \| `string`\>
+
+value associated with field
+
+#### Arg
+
+key
+
+#### Arg
+
+field
+
+#### Example
+
+```ts
+async function hGetExample(context: Devvit.Context) {
+ await context.redis.hSet("fruits", {"apple": "5", "orange": "7", "kiwi": "9"});
+ const result : string | undefined = await context.redis.hGet("fruits", "orange");
+ console.log("Value of orange: " + result);
+}
+```
+
+***
+
+
+
+### ~~hgetall()~~
+
+> **hgetall**(`key`): `Promise`\<`Record`\<`string`, `string`\>\>
+
+Returns all fields and values of the hash stored at key
+https://redis.io/commands/hgetall
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`Record`\<`string`, `string`\>\>
+
+a map of fields and their values stored in the hash,
+
+#### Deprecated
+
+Use [RedisClient.hGetAll](#hgetall-2) instead.
+
+#### Arg
+
+key
+
+***
+
+
+
+### hGetAll()
+
+> **hGetAll**(`key`): `Promise`\<`Record`\<`string`, `string`\>\>
+
+Returns all fields and values of the hash stored at key
+https://redis.io/commands/hgetall
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`Record`\<`string`, `string`\>\>
+
+a map of fields and their values stored in the hash,
+
+#### Arg
+
+key
+
+#### Example
+
+```
+async function hGetAllExample(context: Devvit.Context) {
+ await context.redis.hSet("groceryList", {
+ "eggs": "12",
+ "apples": "3",
+ "milk": "1"
+ });
+
+ const record : Record = await context.redis.hGetAll("groceryList");
+
+ if (record.eggs !== undefined) {
+ console.log(`Eggs: ${record.eggs}`);
+ }
+}
+```
+
+***
+
+
+
+### ~~hincrby()~~
+
+> **hincrby**(`key`, `field`, `value`): `Promise`\<`number`\>
+
+Increments the number stored at field in the hash stored at key by increment.
+https://redis.io/commands/hincrby/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### field
+
+`string`
+
+##### value
+
+`number`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+value of key after the increment
+
+#### Deprecated
+
+Use [RedisClient.hIncrBy](#hincrby-2) instead.
+
+#### Arg
+
+key
+
+#### Arg
+
+field
+
+#### Arg
+
+value
+
+***
+
+
+
+### hIncrBy()
+
+> **hIncrBy**(`key`, `field`, `value`): `Promise`\<`number`\>
+
+Increments the number stored at field in the hash stored at key by increment.
+https://redis.io/commands/hincrby/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### field
+
+`string`
+
+##### value
+
+`number`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+value of key after the increment
+
+#### Arg
+
+key
+
+#### Arg
+
+field
+
+#### Arg
+
+value
+
+#### Example
+
+```ts
+async function hIncrByExample(context: Devvit.Context) {
+ await context.redis.hSet("user123", { "karma": "100" });
+ await context.redis.hIncrBy("user123", "karma", 5);
+}
+```
+
+***
+
+
+
+### ~~hkeys()~~
+
+> **hkeys**(`key`): `Promise`\<`string`[]\>
+
+Returns all field names in the hash stored at key.
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`string`[]\>
+
+#### Deprecated
+
+Use [RedisClient.hKeys](#hkeys-2) instead.
+
+#### Arg
+
+key
+
+***
+
+
+
+### hKeys()
+
+> **hKeys**(`key`): `Promise`\<`string`[]\>
+
+Returns all field names in the hash stored at key.
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`string`[]\>
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function hKeysExample(context: Devvit.Context) {
+ await context.redis.hSet("prices", {
+ "chair": "48",
+ "desk": "95",
+ "whiteboard": "23"
+ });
+ const keys : string[] = await context.redis.hKeys("prices");
+ console.log("Keys: " + keys);
+}
+```
+
+***
+
+
+
+### ~~hlen()~~
+
+> **hlen**(`key`): `Promise`\<`number`\>
+
+Returns the number of fields contained in the hash stored at key.
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+the number of fields in the hash, or 0 when the key does not exist.
+
+#### Deprecated
+
+Use [RedisClient.hLen](#hlen-2) instead.
+
+#### Arg
+
+key
+
+***
+
+
+
+### hLen()
+
+> **hLen**(`key`): `Promise`\<`number`\>
+
+Returns the number of fields contained in the hash stored at key.
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+the number of fields in the hash, or 0 when the key does not exist.
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function hLenExample(context: Devvit.Context) {
+ await context.redis.hSet("supplies", {
+ "paperclips": "25",
+ "pencils": "10",
+ "erasers": "5",
+ "pens": "7"
+ });
+ const numberOfFields : number = await context.redis.hLen("supplies");
+ console.log("Number of fields: " + numberOfFields);
+}
+```
+
+***
+
+
+
+### hMGet()
+
+> **hMGet**(`key`, `fields`): `Promise`\<(`null` \| `string`)[]\>
+
+Returns the values associated with fields in the hash stored at key.
+https://redis.io/commands/hmget
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### fields
+
+`string`[]
+
+#### Returns
+
+`Promise`\<(`null` \| `string`)[]\>
+
+values associated with each field in the order they appear in fields
+
+#### Arg
+
+key
+
+#### Arg
+
+fields
+
+#### Example
+
+```ts
+async function hMGetExample(context: Devvit.Context) {
+ await context.redis.hSet("fruits", {"apple": "5", "orange": "7", "kiwi": "9"});
+ const result : string[] | undefined = await context.redis.hMGet("fruits", ["orange", "grape", "apple"]);
+ console.log("Value of fields: " + result); // "Value of fields: ["7", undefined, "5"]
+}
+```
+
+***
+
+
+
+### ~~hscan()~~
+
+> **hscan**(`key`, `cursor`, `pattern`?, `count`?): `Promise`\<`HScanResponse`\>
+
+Iterates fields of Hash types and their associated values.
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### cursor
+
+`number`
+
+##### pattern?
+
+`string`
+
+##### count?
+
+`number`
+
+#### Returns
+
+`Promise`\<`HScanResponse`\>
+
+#### Deprecated
+
+Use [RedisClient.hScan](#hscan-2) instead.
+
+#### Arg
+
+key
+
+#### Arg
+
+cursor
+
+#### Arg
+
+pattern
+
+#### Arg
+
+count
+
+***
+
+
+
+### hScan()
+
+> **hScan**(`key`, `cursor`, `pattern`?, `count`?): `Promise`\<`HScanResponse`\>
+
+Iterates fields of Hash types and their associated values.
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### cursor
+
+`number`
+
+##### pattern?
+
+`string`
+
+##### count?
+
+`number`
+
+#### Returns
+
+`Promise`\<`HScanResponse`\>
+
+#### Arg
+
+key
+
+#### Arg
+
+cursor
+
+#### Arg
+
+pattern
+
+#### Arg
+
+count
+
+#### Example
+
+```ts
+async function hScanExample(context: Devvit.Context) {
+ await context.redis.hSet("userInfo", {
+ "name": "Bob",
+ "startDate": "01-05-20",
+ "totalAwards": "12"
+ });
+
+ const hScanResponse = await context.redis.hScan("userInfo", 0);
+
+ hScanResponse.fieldValues.forEach(x => {
+ console.log("Field: '" + x.field + "', Value: '" + x.value + "'");
+ });
+}
+```
+
+***
+
+
+
+### ~~hset()~~
+
+> **hset**(`key`, `fieldValues`): `Promise`\<`number`\>
+
+Sets the specified fields to their respective values in the hash stored at key.
+https://redis.io/commands/hset
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### fieldValues
+
+#### Returns
+
+`Promise`\<`number`\>
+
+number of fields that were added
+
+#### Deprecated
+
+Use [RedisClient.hSet](#hset-2) instead.
+
+#### Arg
+
+key
+
+#### Arg
+
+fieldValues
+
+***
+
+
+
+### hSet()
+
+> **hSet**(`key`, `fieldValues`): `Promise`\<`number`\>
+
+Sets the specified fields to their respective values in the hash stored at key.
+https://redis.io/commands/hset
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### fieldValues
+
+#### Returns
+
+`Promise`\<`number`\>
+
+number of fields that were added
+
+#### Arg
+
+key
+
+#### Arg
+
+fieldValues
+
+#### Example
+
+```ts
+async function hSetExample(context: Devvit.Context) {
+ const numFieldsAdded = await context.redis.hSet("fruits", {"apple": "5", "orange": "7", "kiwi": "9"});
+ console.log("Number of fields added: " + numFieldsAdded);
+}
+```
+
+***
+
+
+
+### hSetNX()
+
+> **hSetNX**(`key`, `field`, `value`): `Promise`\<`number`\>
+
+Sets field in the hash stored at key to value, only if field does not yet exist.
+https://redis.io/commands/hsetnx/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### field
+
+`string`
+
+##### value
+
+`string`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+1 if field is a new field in the hash and value was set, 0 if field already exists in the hash and no operation was performed.
+
+#### Example
+
+```ts
+async function hSetNXExample(context: Devvit.Context) {
+ const result : number = await context.redis.hSetNX("myhash", "field1", "value1");
+ console.log("HSETNX result: " + result);
+}
+```
+
+***
+
+
+
+### incrBy()
+
+> **incrBy**(`key`, `value`): `Promise`\<`number`\>
+
+Increments the number stored at key by increment.
+https://redis.io/commands/incrby/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### value
+
+`number`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+value of key after the increment
+
+#### Arg
+
+key
+
+#### Arg
+
+value
+
+#### Example
+
+```ts
+async function incrByExample(context: Devvit.Context) {
+ await context.redis.set("totalPoints", "53")
+ const updatedPoints : number = await context.redis.incrBy("totalPoints", 100);
+ console.log("Updated points: " + updatedPoints);
+}
+```
+
+***
+
+
+
+### ~~mget()~~
+
+> **mget**(`keys`): `Promise`\<(`null` \| `string`)[]\>
+
+Returns the values of all specified keys.
+https://redis.io/commands/mget/
+
+#### Parameters
+
+##### keys
+
+`string`[]
+
+#### Returns
+
+`Promise`\<(`null` \| `string`)[]\>
+
+list of values at the specified keys
+
+#### Deprecated
+
+Use [RedisClient.mGet](#mget-2) instead.
+
+#### Arg
+
+keys
+
+***
+
+
+
+### mGet()
+
+> **mGet**(`keys`): `Promise`\<(`null` \| `string`)[]\>
+
+Returns the values of all specified keys.
+https://redis.io/commands/mget/
+
+#### Parameters
+
+##### keys
+
+`string`[]
+
+#### Returns
+
+`Promise`\<(`null` \| `string`)[]\>
+
+list of values at the specified keys
+
+#### Arg
+
+keys
+
+#### Example
+
+```ts
+async function mGetExample(context: Devvit.Context) {
+ await context.redis.mSet({"name": "Zeek", "occupation": "Developer"});
+ const result : (string | null)[] = await context.redis.mGet(["name", "occupation"]);
+ result.forEach(x => {
+ console.log(x);
+ });
+}
+```
+
+***
+
+
+
+### ~~mset()~~
+
+> **mset**(`keyValues`): `Promise`\<`void`\>
+
+Sets the given keys to their respective values.
+https://redis.io/commands/mset/
+
+#### Parameters
+
+##### keyValues
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Deprecated
+
+Use [RedisClient.mSet](#mset-2) instead.
+
+#### Arg
+
+keyValues
+
+***
+
+
+
+### mSet()
+
+> **mSet**(`keyValues`): `Promise`\<`void`\>
+
+Sets the given keys to their respective values.
+https://redis.io/commands/mset/
+
+#### Parameters
+
+##### keyValues
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Arg
+
+keyValues
+
+#### Example
+
+```ts
+async function mSetExample(context: Devvit.Context) {
+ await context.redis.mSet({"name": "Zeek", "occupation": "Developer"});
+}
+```
+
+***
+
+
+
+### rename()
+
+> **rename**(`key`, `newKey`): `Promise`\<`string`\>
+
+Renames key to newKey. It returns an error when key does not exist.
+https://redis.io/commands/rename/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### newKey
+
+`string`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+string returns "OK" if the key was renamed successfully
+
+#### Arg
+
+key key to be renamed
+
+#### Arg
+
+newKey new key name
+
+#### Example
+
+```ts
+async function renameExample(context: Devvit.Context) {
+ await context.redis.set("quantity", "5");
+ await context.redis.rename("quantity", "amount");
+ const value : string = await context.redis.get("amount");
+ console.log("Value: " + value);
+}
+```
+
+***
+
+
+
+### set()
+
+> **set**(`key`, `value`, `options`?): `Promise`\<`string`\>
+
+Set key to hold the string value. If key already holds a value, it is overwritten
+https://redis.io/commands/set/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### value
+
+`string`
+
+##### options?
+
+[`SetOptions`](SetOptions.md)
+
+#### Returns
+
+`Promise`\<`string`\>
+
+#### Arg
+
+key
+
+#### Arg
+
+value
+
+#### Arg
+
+options
+
+#### Example
+
+```ts
+async function setExample(context: Devvit.Context) {
+ await context.redis.set("quantity", "5");
+}
+```
+
+***
+
+
+
+### setRange()
+
+> **setRange**(`key`, `offset`, `value`): `Promise`\<`number`\>
+
+Overwrites part of the string stored at key, starting at the
+specified offset, for the entire length of value.
+https://redis.io/commands/setrange/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### offset
+
+`number`
+
+##### value
+
+`string`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+length of the string after it was modified by the command
+
+#### Arg
+
+key
+
+#### Arg
+
+offset
+
+#### Example
+
+```ts
+async function setRangeExample(context: Devvit.Context) {
+ await context.redis.set("word", "tacocat");
+ await context.redis.setRange("word", 0, "blue");
+}
+```
+
+***
+
+
+
+### ~~strlen()~~
+
+> **strlen**(`key`): `Promise`\<`number`\>
+
+Returns the length of the string value stored at key.
+An error is returned when key holds a non-string value.
+https://redis.io/commands/strlen/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+length of the string stored at key
+
+#### Deprecated
+
+Use [RedisClient.strLen](#strlen-2) instead.
+
+#### Arg
+
+key
+
+***
+
+
+
+### strLen()
+
+> **strLen**(`key`): `Promise`\<`number`\>
+
+Returns the length of the string value stored at key.
+An error is returned when key holds a non-string value.
+https://redis.io/commands/strlen/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+length of the string stored at key
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function strLenExample(context: Devvit.Context) {
+ await context.redis.set("word", "tacocat");
+ const length : number = await context.redis.strLen("word");
+ console.log("Length of word: " + length);
+}
+```
+
+***
+
+
+
+### type()
+
+> **type**(`key`): `Promise`\<`string`\>
+
+Returns the string representation of the type of the value stored at key
+https://redis.io/commands/type/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+string representation of the type
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function typeExample(context: Devvit.Context) {
+ await context.redis.set("quantity", "5");
+ const type : string = await context.redis.type("quantity");
+ console.log("Key type: " + type);
+}
+```
+
+***
+
+
+
+### watch()
+
+> **watch**(...`keys`): `Promise`\<[`TxClientLike`](TxClientLike.md)\>
+
+Marks the given keys to be watched for conditional execution of a transaction.
+https://redis.io/commands/watch/
+
+#### Parameters
+
+##### keys
+
+...`string`[]
+
+#### Returns
+
+`Promise`\<[`TxClientLike`](TxClientLike.md)\>
+
+#### Arg
+
+keys - given keys to be watched
+
+#### Example
+
+```ts
+async function watchExample(context: Devvit.Context) {
+ await context.redis.set("karma", "32");
+
+ const txn = await context.redis.watch("quantity");
+
+ await txn.multi(); // Begin a transaction
+ await txn.incrBy("karma", 10);
+ await txn.exec(); // Execute the commands in the transaction
+}
+```
+
+***
+
+
+
+### zAdd()
+
+> **zAdd**(`key`, ...`members`): `Promise`\<`number`\>
+
+Adds all the specified members with the specified scores to the sorted set stored at key.
+https://redis.io/commands/zadd/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### members
+
+...[`ZMember`](ZMember.md)[]
+
+#### Returns
+
+`Promise`\<`number`\>
+
+number of elements added to the sorted set
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function zAddExample(context: Devvit.Context) {
+ const numMembersAdded : number = await context.redis.zAdd("leaderboard",
+ {member: "louis", score: 37},
+ {member: "fernando", score: 10},
+ {member: "caesar", score: 20},
+ {member: "alexander", score: 25},
+ );
+ console.log("Number of members added: " + numMembersAdded);
+}
+```
+
+***
+
+
+
+### zCard()
+
+> **zCard**(`key`): `Promise`\<`number`\>
+
+Returns the cardinality (number of elements) of the sorted set stored at key.
+https://redis.io/commands/zcard/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+cardinality of the sorted set
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function zCardExample(context: Devvit.Context) {
+ await context.redis.zAdd("leaderboard",
+ {member: "louis", score: 37},
+ {member: "fernando", score: 10},
+ {member: "caesar", score: 20},
+ {member: "alexander", score: 25},
+ );
+ const cardinality : number = await context.redis.zCard("leaderboard");
+ console.log("Cardinality: " + cardinality);
+}
+```
+
+***
+
+
+
+### zIncrBy()
+
+> **zIncrBy**(`key`, `member`, `value`): `Promise`\<`number`\>
+
+Increments the score of member in the sorted set stored at key by value
+https://redis.io/commands/zincrby/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### member
+
+`string`
+
+##### value
+
+`number`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+the new score of member as a double precision floating point number
+
+#### Arg
+
+key
+
+#### Arg
+
+member
+
+#### Arg
+
+value
+
+#### Example
+
+```ts
+async function zIncrByExample(context: Devvit.Context) {
+ await context.redis.zAdd("animals",
+ {member: "zebra", score: 92},
+ {member: "cat", score: 100},
+ {member: "dog", score: 95},
+ {member: "elephant", score: 97}
+ );
+ const updatedScore : number = await context.redis.zIncrBy("animals", "dog", 10);
+ console.log("Dog's updated score: " + updatedScore);
+}
+```
+
+***
+
+
+
+### zRange()
+
+> **zRange**(`key`, `start`, `stop`, `options`?): `Promise`\<`object`[]\>
+
+Returns the specified range of elements in the sorted set stored at key.
+https://redis.io/commands/zrange/
+
+When using `by: 'lex'`, the start and stop inputs will be prepended with `[` by default, unless they already begin with `[`, `(` or are one of the special values `+` or `-`.
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### start
+
+`string` | `number`
+
+##### stop
+
+`string` | `number`
+
+##### options?
+
+[`ZRangeOptions`](ZRangeOptions.md)
+
+#### Returns
+
+`Promise`\<`object`[]\>
+
+list of elements in the specified range
+
+#### Arg
+
+key
+
+#### Arg
+
+start
+
+#### Arg
+
+stop
+
+#### Arg
+
+options
+
+#### Example
+
+```ts
+async function zRangeExample(context: Devvit.Context) {
+ await context.redis.zAdd("leaderboard",
+ {member: "louis", score: 37},
+ {member: "fernando", score: 10},
+ {member: "caesar", score: 20},
+ {member: "alexander", score: 25},
+ );
+
+ // View elements with scores between 0 and 30 inclusive, sorted by score
+ const scores : {member : string, score : number}[] = await context.redis.zRange("leaderboard", 0, 30, { by: "score" });
+
+ scores.forEach(x => {
+ console.log("Member: " + x.member, ", Score: " + x.score);
+ });
+}
+```
+
+***
+
+
+
+### zRank()
+
+> **zRank**(`key`, `member`): `Promise`\<`undefined` \| `number`\>
+
+Returns the rank of member in the sorted set stored at key
+https://redis.io/commands/zrank/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### member
+
+`string`
+
+#### Returns
+
+`Promise`\<`undefined` \| `number`\>
+
+rank of the member if opts is undefined or opts.withScore = false,
+or returns { rank, score } of the member if opts.withScore = true. The rank (or index)
+is 0-based which means that the member with the lowest score has rank 0
+
+#### Arg
+
+key
+
+#### Arg
+
+member
+
+#### Example
+
+```ts
+async function zRankExample(context: Devvit.Context) {
+ await context.redis.zAdd("animals",
+ {member: "zebra", score: 92},
+ {member: "cat", score: 100},
+ {member: "dog", score: 95},
+ {member: "elephant", score: 97}
+ );
+ const rank : number | undefined = await context.redis.zRank("animals", "dog");
+ if(rank !== undefined) {
+ console.log("Dog's rank: " + rank);
+ }
+}
+```
+
+***
+
+
+
+### zRem()
+
+> **zRem**(`key`, `members`): `Promise`\<`number`\>
+
+Removes the specified members from the sorted set stored at key.
+https://redis.io/commands/zrem/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### members
+
+`string`[]
+
+#### Returns
+
+`Promise`\<`number`\>
+
+number of members removed from the sorted set
+
+#### Arg
+
+key
+
+#### Arg
+
+members
+
+#### Example
+
+```ts
+async function zRemExample(context: Devvit.Context) {
+ await context.redis.zAdd("leaderboard",
+ {member: "louis", score: 37},
+ {member: "fernando", score: 10},
+ {member: "caesar", score: 20},
+ {member: "alexander", score: 25},
+ );
+ const numberOfMembersRemoved : number = await context.redis.zRem("leaderboard", ["fernando", "alexander"]);
+ console.log("Number of members removed: " + numberOfMembersRemoved);
+}
+```
+
+***
+
+
+
+### zRemRangeByLex()
+
+> **zRemRangeByLex**(`key`, `min`, `max`): `Promise`\<`number`\>
+
+removes all elements in the sorted set stored at key between the
+lexicographical range specified by min and max
+https://redis.io/commands/zremrangebylex/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### min
+
+`string`
+
+##### max
+
+`string`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+number of members removed from the sorted set
+
+#### Arg
+
+key
+
+#### Arg
+
+min
+
+#### Arg
+
+max
+
+#### Example
+
+```ts
+async function zRemRangeByLexExample(context: Devvit.Context) {
+ await context.redis.zAdd("fruits",
+ {member: "kiwi", score: 0},
+ {member: "mango", score: 0},
+ {member: "banana", score: 0},
+ {member: "orange", score: 0},
+ {member: "apple", score: 0},
+ );
+
+ // Remove fruits alphabetically ordered between 'kiwi' inclusive and 'orange' exclusive
+ // Note: The symbols '[' and '(' indicate inclusive or exclusive, respectively. These must be included in the call to zRemRangeByLex().
+ const numFieldsRemoved : number = await context.redis.zRemRangeByLex("fruits", "[kiwi", "(orange");
+ console.log("Number of fields removed: " + numFieldsRemoved);
+}
+```
+
+***
+
+
+
+### zRemRangeByRank()
+
+> **zRemRangeByRank**(`key`, `start`, `stop`): `Promise`\<`number`\>
+
+Removes all elements in the sorted set stored at key with rank between start and stop.
+https://redis.io/commands/zremrangebyrank/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### start
+
+`number`
+
+##### stop
+
+`number`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+number of members removed from the sorted set
+
+#### Arg
+
+key
+
+#### Arg
+
+start
+
+#### Arg
+
+stop
+
+#### Example
+
+```
+async function zRemRangeByRankExample(context: Devvit.Context) {
+ await context.redis.zAdd("fruits",
+ {member: "kiwi", score: 10},
+ {member: "mango", score: 20},
+ {member: "banana", score: 30},
+ {member: "orange", score: 40},
+ {member: "apple", score: 50},
+ );
+
+ // Remove fruits ranked 1 through 3 inclusive
+ const numFieldsRemoved : number = await context.redis.zRemRangeByRank("fruits", 1, 3);
+ console.log("Number of fields removed: " + numFieldsRemoved);
+}
+```
+
+***
+
+
+
+### zRemRangeByScore()
+
+> **zRemRangeByScore**(`key`, `min`, `max`): `Promise`\<`number`\>
+
+Removes all elements in the sorted set stored at key with a score between min and max
+https://redis.io/commands/zremrangebyscore/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### min
+
+`number`
+
+##### max
+
+`number`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+number of members removed from the sorted set
+
+#### Arg
+
+key
+
+#### Arg
+
+min
+
+#### Arg
+
+max
+
+#### Example
+
+```ts
+async function zRemRangeByScoreExample(context: Devvit.Context) {
+ await context.redis.zAdd("fruits",
+ {member: "kiwi", score: 10},
+ {member: "mango", score: 20},
+ {member: "banana", score: 30},
+ {member: "orange", score: 40},
+ {member: "apple", score: 50},
+ );
+ // Remove fruits scored between 30 and 50 inclusive
+ const numFieldsRemoved : number = await context.redis.zRemRangeByScore("fruits", 30, 50);
+ console.log("Number of fields removed: " + numFieldsRemoved);
+}
+```
+
+***
+
+
+
+### zScan()
+
+> **zScan**(`key`, `cursor`, `pattern`?, `count`?): `Promise`\<`ZScanResponse`\>
+
+Iterates elements of Sorted Set types and their associated scores.
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### cursor
+
+`number`
+
+##### pattern?
+
+`string`
+
+##### count?
+
+`number`
+
+#### Returns
+
+`Promise`\<`ZScanResponse`\>
+
+#### Arg
+
+key
+
+#### Arg
+
+cursor
+
+#### Arg
+
+pattern
+
+#### Arg
+
+count
+
+#### Example
+
+```ts
+async function zScanExample(context: Devvit.Context) {
+ await context.redis.zAdd("fruits",
+ {member: "kiwi", score: 0},
+ {member: "mango", score: 0},
+ {member: "banana", score: 0},
+ {member: "orange", score: 0},
+ {member: "apple", score: 0},
+ );
+ const zScanResponse = await context.redis.zScan("fruits", 0);
+ console.log("zScanResponse: " + JSON.stringify(zScanResponse));
+}
+```
+
+***
+
+
+
+### zScore()
+
+> **zScore**(`key`, `member`): `Promise`\<`undefined` \| `number`\>
+
+Returns the score of member in the sorted set at key.
+https://redis.io/commands/zscore/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### member
+
+`string`
+
+#### Returns
+
+`Promise`\<`undefined` \| `number`\>
+
+the score of the member (a double-precision floating point number).
+
+#### Arg
+
+key
+
+#### Arg
+
+member
+
+#### Example
+
+```ts
+async function zScoreExample(context: Devvit.Context) {
+ await context.redis.zAdd("leaderboard",
+ {member: "louis", score: 37},
+ {member: "fernando", score: 10},
+ {member: "caesar", score: 20},
+ {member: "alexander", score: 25},
+ );
+ const score : number = await context.redis.zScore("leaderboard", "caesar");
+ console.log("Caesar's score: " + score);
+}
+```
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/RunJob.md b/versioned_docs/version-0.13/api/public-api/type-aliases/RunJob.md
new file mode 100644
index 00000000..985f1d2c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/RunJob.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: RunJob()\
+
+> **RunJob**\<`Data`\> = (`job`) => `Promise`\<`string`\>
+
+Schedule a new job to run at a specific time or on a cron schedule
+
+## Type Parameters
+
+### Data
+
+`Data` *extends* [`JSONObject`](JSONObject.md) \| `undefined`
+
+## Parameters
+
+### job
+
+The job to schedule
+
+[`ScheduledJobOptions`](ScheduledJobOptions.md)\<`Data`\> | [`ScheduledCronJobOptions`](ScheduledCronJobOptions.md)\<`Data`\>
+
+## Returns
+
+`Promise`\<`string`\>
+
+The id of the scheduled job
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledCronJob.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledCronJob.md
new file mode 100644
index 00000000..1f3d2ff7
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledCronJob.md
@@ -0,0 +1,47 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ScheduledCronJob
+
+> **ScheduledCronJob** = `object`
+
+## Properties
+
+
+
+### cron
+
+> **cron**: `string`
+
+The cron string of when this job should run
+
+***
+
+
+
+### data?
+
+> `optional` **data**: [`JSONObject`](JSONObject.md)
+
+Additional data passed in by the scheduler client
+
+***
+
+
+
+### id
+
+> **id**: `string`
+
+ID of the scheduled job. Use this with scheduler.cancelJob to cancel the job.
+
+***
+
+
+
+### name
+
+> **name**: `string`
+
+The name of the scheduled job type
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledCronJobOptions.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledCronJobOptions.md
new file mode 100644
index 00000000..ed44191d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledCronJobOptions.md
@@ -0,0 +1,43 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ScheduledCronJobOptions\
+
+> **ScheduledCronJobOptions**\<`T`\> = `object`
+
+## Type Parameters
+
+### T
+
+`T` *extends* [`JSONObject`](JSONObject.md) \| `undefined` = [`JSONObject`](JSONObject.md) \| `undefined`
+
+## Properties
+
+
+
+### cron
+
+> **cron**: `string`
+
+The cron string of when this job should run
+
+***
+
+
+
+### data?
+
+> `optional` **data**: `T`
+
+Additional data passed in by the scheduler client
+
+***
+
+
+
+### name
+
+> **name**: `string`
+
+The name of the scheduled job type
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJob.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJob.md
new file mode 100644
index 00000000..fec045c7
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJob.md
@@ -0,0 +1,47 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ScheduledJob
+
+> **ScheduledJob** = `object`
+
+## Properties
+
+
+
+### data
+
+> **data**: [`JSONObject`](JSONObject.md) \| `undefined`
+
+Additional data passed in by the scheduler client
+
+***
+
+
+
+### id
+
+> **id**: `string`
+
+ID of the scheduled job. Use this with scheduler.cancelJob to cancel the job.
+
+***
+
+
+
+### name
+
+> **name**: `string`
+
+The name of the scheduled job type
+
+***
+
+
+
+### runAt
+
+> **runAt**: `Date`
+
+The Date of when this job should run
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobEvent.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobEvent.md
new file mode 100644
index 00000000..30fe7249
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobEvent.md
@@ -0,0 +1,33 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ScheduledJobEvent\
+
+> **ScheduledJobEvent**\<`T`\> = `object`
+
+## Type Parameters
+
+### T
+
+`T` *extends* [`JSONObject`](JSONObject.md) \| `undefined`
+
+## Properties
+
+
+
+### data
+
+> **data**: `T`
+
+Additional data passed in by the scheduler client
+
+***
+
+
+
+### name
+
+> **name**: `string`
+
+The name of the scheduled job
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobHandler.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobHandler.md
new file mode 100644
index 00000000..59b5e7c3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobHandler.md
@@ -0,0 +1,27 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ScheduledJobHandler()\
+
+> **ScheduledJobHandler**\<`Data`\> = (`event`, `context`) => `void` \| `Promise`\<`void`\>
+
+## Type Parameters
+
+### Data
+
+`Data` *extends* [`JSONObject`](JSONObject.md) \| `undefined` = [`JSONObject`](JSONObject.md) \| `undefined`
+
+## Parameters
+
+### event
+
+[`ScheduledJobEvent`](ScheduledJobEvent.md)\<`Data`\>
+
+### context
+
+[`JobContext`](JobContext.md)
+
+## Returns
+
+`void` \| `Promise`\<`void`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobOptions.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobOptions.md
new file mode 100644
index 00000000..613ce458
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobOptions.md
@@ -0,0 +1,43 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ScheduledJobOptions\
+
+> **ScheduledJobOptions**\<`T`\> = `object`
+
+## Type Parameters
+
+### T
+
+`T` *extends* [`JSONObject`](JSONObject.md) \| `undefined` = [`JSONObject`](JSONObject.md) \| `undefined`
+
+## Properties
+
+
+
+### data?
+
+> `optional` **data**: `T`
+
+Additional data passed in by the scheduler client
+
+***
+
+
+
+### name
+
+> **name**: `string`
+
+The name of the scheduled job type
+
+***
+
+
+
+### runAt
+
+> **runAt**: `Date`
+
+The Date of when this job should run
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobType.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobType.md
new file mode 100644
index 00000000..b5bef68f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ScheduledJobType.md
@@ -0,0 +1,33 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ScheduledJobType\
+
+> **ScheduledJobType**\<`Data`\> = `object`
+
+## Type Parameters
+
+### Data
+
+`Data` *extends* [`JSONObject`](JSONObject.md) \| `undefined`
+
+## Properties
+
+
+
+### name
+
+> **name**: `string`
+
+The name of the scheduled job type
+
+***
+
+
+
+### onRun
+
+> **onRun**: [`ScheduledJobHandler`](ScheduledJobHandler.md)\<`Data`\>
+
+The function that will be called when the job is scheduled to run
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/Scheduler.md b/versioned_docs/version-0.13/api/public-api/type-aliases/Scheduler.md
new file mode 100644
index 00000000..74af794a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/Scheduler.md
@@ -0,0 +1,68 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: Scheduler
+
+> **Scheduler** = `object`
+
+The Scheduler client lets you schedule new jobs or cancel existing jobs.
+You must have the `scheduler` enabled in `Devvit.configure` to use this client.
+
+## Properties
+
+
+
+### cancelJob
+
+> **cancelJob**: [`CancelJob`](CancelJob.md)
+
+Cancel a scheduled job
+
+#### Param
+
+The id of the job to cancel
+
+***
+
+
+
+### listJobs()
+
+> **listJobs**: () => `Promise`\<([`ScheduledJob`](ScheduledJob.md) \| [`ScheduledCronJob`](ScheduledCronJob.md))[]\>
+
+Gets the list of all scheduled jobs.
+
+#### Returns
+
+`Promise`\<([`ScheduledJob`](ScheduledJob.md) \| [`ScheduledCronJob`](ScheduledCronJob.md))[]\>
+
+***
+
+
+
+### runJob()
+
+> **runJob**: \<`Data`\>(`job`) => `Promise`\<`string`\>
+
+Schedule a new job to run at a specific time or on a cron schedule
+
+#### Type Parameters
+
+##### Data
+
+`Data` *extends* [`JSONObject`](JSONObject.md) \| `undefined`
+
+#### Parameters
+
+##### job
+
+The job to schedule
+
+[`ScheduledJobOptions`](ScheduledJobOptions.md)\<`Data`\> | [`ScheduledCronJobOptions`](ScheduledCronJobOptions.md)\<`Data`\>
+
+#### Returns
+
+`Promise`\<`string`\>
+
+The id of the scheduled job
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/SelectField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/SelectField.md
new file mode 100644
index 00000000..f6a7c4a2
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/SelectField.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: SelectField
+
+> **SelectField** = `Prettify`\<[`BaseField`](BaseField.md)\<`string`[]\> & `Omit`\<`FieldConfig_Selection`, `"choices"` \| `"renderAsList"` \| `"minSelections"` \| `"maxSelections"`\> & `object`\>
+
+A dropdown field that allows users to pick from a list of options
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/SetOptions.md b/versioned_docs/version-0.13/api/public-api/type-aliases/SetOptions.md
new file mode 100644
index 00000000..960c2c05
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/SetOptions.md
@@ -0,0 +1,35 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: SetOptions
+
+> **SetOptions** = `object`
+
+## Properties
+
+
+
+### expiration?
+
+> `optional` **expiration**: `Date`
+
+***
+
+
+
+### nx?
+
+> `optional` **nx**: `boolean`
+
+Only set the key if it does not already exist.
+
+***
+
+
+
+### xx?
+
+> `optional` **xx**: `boolean`
+
+Only set the key if it already exists.
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/SetStateAction.md b/versioned_docs/version-0.13/api/public-api/type-aliases/SetStateAction.md
new file mode 100644
index 00000000..c1a77407
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/SetStateAction.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: SetStateAction\
+
+> **SetStateAction**\<`S`\> = `S` \| (`prevState`) => `S`
+
+## Type Parameters
+
+### S
+
+`S`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/SettingScopeType.md b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingScopeType.md
new file mode 100644
index 00000000..ea1196ab
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingScopeType.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: SettingScopeType
+
+> **SettingScopeType** = `"installation"` \| `"app"`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsClient.md b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsClient.md
new file mode 100644
index 00000000..dadfbda5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsClient.md
@@ -0,0 +1,62 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: SettingsClient
+
+> **SettingsClient** = `object`
+
+The Settings API Client lets you retrieve the settings values for your app set by the installer.
+Use this in conjunction with `Devvit.addSettings`.
+
+## Methods
+
+
+
+### get()
+
+> **get**\<`T`\>(`name`): `Promise`\<`undefined` \| `T`\>
+
+Get a single setting value by name.
+
+#### Type Parameters
+
+##### T
+
+`T` = `string` \| `number` \| `boolean` \| `string`[]
+
+#### Parameters
+
+##### name
+
+`string`
+
+The name of the setting to retrieve.
+
+#### Returns
+
+`Promise`\<`undefined` \| `T`\>
+
+A promise that resolves to the setting value, or undefined if the setting doesn't exist.
+
+***
+
+
+
+### getAll()
+
+> **getAll**\<`T`\>(): `Promise`\<`T`\>
+
+Get all settings values.
+
+#### Type Parameters
+
+##### T
+
+`T` *extends* `object` = [`SettingsValues`](SettingsValues.md)
+
+#### Returns
+
+`Promise`\<`T`\>
+
+A promise that resolves to an object containing all settings values.
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsFormField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsFormField.md
new file mode 100644
index 00000000..88d0631a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsFormField.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: SettingsFormField
+
+> **SettingsFormField** = [`ValidatedStringField`](ValidatedStringField.md) \| [`ValidatedParagraphField`](ValidatedParagraphField.md) \| [`ValidatedNumberField`](ValidatedNumberField.md) \| [`ValidatedBooleanField`](ValidatedBooleanField.md) \| [`ValidatedSelectField`](ValidatedSelectField.md) \| [`SettingsFormFieldGroup`](SettingsFormFieldGroup.md)
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsFormFieldGroup.md b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsFormFieldGroup.md
new file mode 100644
index 00000000..f9356397
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsFormFieldGroup.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: SettingsFormFieldGroup
+
+> **SettingsFormFieldGroup** = `Prettify`\<`Omit`\<[`FormFieldGroup`](FormFieldGroup.md), `"fields"`\> & `object`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsFormFieldValidatorEvent.md b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsFormFieldValidatorEvent.md
new file mode 100644
index 00000000..3d3df2eb
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsFormFieldValidatorEvent.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: SettingsFormFieldValidatorEvent\
+
+> **SettingsFormFieldValidatorEvent**\<`ValueType`\> = `object`
+
+## Type Parameters
+
+### ValueType
+
+`ValueType`
+
+## Properties
+
+
+
+### isEditing
+
+> **isEditing**: `boolean`
+
+***
+
+
+
+### value
+
+> **value**: `ValueType` \| `undefined`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsValues.md b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsValues.md
new file mode 100644
index 00000000..83d72428
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/SettingsValues.md
@@ -0,0 +1,11 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: SettingsValues
+
+> **SettingsValues** = `object`
+
+## Index Signature
+
+\[`key`: `string`\]: `undefined` \| `string` \| `number` \| `boolean` \| `string`[]
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/StateSetter.md b/versioned_docs/version-0.13/api/public-api/type-aliases/StateSetter.md
new file mode 100644
index 00000000..70f095db
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/StateSetter.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: StateSetter\
+
+> **StateSetter**\<`S`\> = [`Dispatch`](Dispatch.md)\<[`SetStateAction`](SetStateAction.md)\<`S`\>\>
+
+## Type Parameters
+
+### S
+
+`S`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/StringField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/StringField.md
new file mode 100644
index 00000000..05cc6b4a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/StringField.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: StringField
+
+> **StringField** = `Prettify`\<[`BaseField`](BaseField.md)\<`string`\> & `Omit`\<`FieldConfig_String`, `"minLength"` \| `"maxLength"`\> & `object`\>
+
+A text field
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/Toast.md b/versioned_docs/version-0.13/api/public-api/type-aliases/Toast.md
new file mode 100644
index 00000000..7163e98f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/Toast.md
@@ -0,0 +1,27 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: Toast
+
+> **Toast** = `object`
+
+## Properties
+
+
+
+### appearance?
+
+> `optional` **appearance**: `"neutral"` \| `"success"`
+
+The appearance of the toast
+
+***
+
+
+
+### text
+
+> **text**: `string`
+
+The message shown within the toast
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerContext.md b/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerContext.md
new file mode 100644
index 00000000..41250262
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerContext.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: TriggerContext
+
+> **TriggerContext** = `Omit`\<[`Context`](../@devvit/namespaces/Devvit/type-aliases/Context.md), `"ui"` \| `"dimensions"` \| `"modLog"` \| `"uiEnvironment"`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerDefinition.md b/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerDefinition.md
new file mode 100644
index 00000000..83f59fef
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerDefinition.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: TriggerDefinition
+
+> **TriggerDefinition** = [`PostSubmitDefinition`](PostSubmitDefinition.md) \| [`PostCreateDefinition`](PostCreateDefinition.md) \| [`PostUpdateDefinition`](PostUpdateDefinition.md) \| [`PostFlairUpdateDefinition`](PostFlairUpdateDefinition.md) \| [`PostReportDefinition`](PostReportDefinition.md) \| [`PostDeleteDefinition`](PostDeleteDefinition.md) \| [`CommentSubmitDefinition`](CommentSubmitDefinition.md) \| [`CommentCreateDefinition`](CommentCreateDefinition.md) \| [`CommentUpdateDefinition`](CommentUpdateDefinition.md) \| [`CommentReportDefinition`](CommentReportDefinition.md) \| [`CommentDeleteDefinition`](CommentDeleteDefinition.md) \| [`AppInstallDefinition`](AppInstallDefinition.md) \| [`AppUpgradeDefinition`](AppUpgradeDefinition.md) \| [`ModActionDefinition`](ModActionDefinition.md) \| [`ModMailDefinition`](ModMailDefinition.md) \| [`PostSpoilerUpdateDefinition`](PostSpoilerUpdateDefinition.md) \| [`PostNsfwUpdateDefinition`](PostNsfwUpdateDefinition.md) \| [`OnAutomoderatorFilterPostDefinition`](OnAutomoderatorFilterPostDefinition.md) \| [`OnAutomoderatorFilterCommentDefinition`](OnAutomoderatorFilterCommentDefinition.md)
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerEvent.md b/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerEvent.md
new file mode 100644
index 00000000..f43a173c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerEvent.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: TriggerEvent
+
+> **TriggerEvent** = [`PostSubmit`](PostSubmit.md) \| [`PostCreate`](PostCreate.md) \| [`PostUpdate`](PostUpdate.md) \| [`PostReport`](PostReport.md) \| [`PostDelete`](PostDelete.md) \| [`PostFlairUpdate`](PostFlairUpdate.md) \| [`CommentSubmit`](CommentSubmit.md) \| [`CommentCreate`](CommentCreate.md) \| [`CommentUpdate`](CommentUpdate.md) \| [`CommentReport`](CommentReport.md) \| [`CommentDelete`](CommentDelete.md) \| [`AppInstall`](AppInstall.md) \| [`AppUpgrade`](AppUpgrade.md) \| [`ModActionTrigger`](ModActionTrigger.md) \| [`ModMailTrigger`](ModMailTrigger.md) \| [`PostNsfwUpdate`](PostNsfwUpdate.md) \| [`PostSpoilerUpdate`](PostSpoilerUpdate.md) \| [`AutomoderatorFilterPost`](AutomoderatorFilterPost.md) \| [`AutomoderatorFilterComment`](AutomoderatorFilterComment.md)
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerEventType.md b/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerEventType.md
new file mode 100644
index 00000000..1c2dc7c8
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerEventType.md
@@ -0,0 +1,275 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: TriggerEventType
+
+> **TriggerEventType** = `object`
+
+Maps a TriggerEvent to a Protobuf message and type.
+
+## Properties
+
+
+
+### AppInstall
+
+> **AppInstall**: `object` & [`AppInstall`](../@devvit/namespaces/EventTypes/interfaces/AppInstall.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"AppInstall"`
+
+***
+
+
+
+### AppUpgrade
+
+> **AppUpgrade**: `object` & [`AppUpgrade`](../@devvit/namespaces/EventTypes/interfaces/AppUpgrade.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"AppUpgrade"`
+
+***
+
+
+
+### AutomoderatorFilterComment
+
+> **AutomoderatorFilterComment**: `object` & [`AutomoderatorFilterComment`](../@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterComment.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"AutomoderatorFilterComment"`
+
+***
+
+
+
+### AutomoderatorFilterPost
+
+> **AutomoderatorFilterPost**: `object` & [`AutomoderatorFilterPost`](../@devvit/namespaces/EventTypes/interfaces/AutomoderatorFilterPost.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"AutomoderatorFilterPost"`
+
+***
+
+
+
+### CommentCreate
+
+> **CommentCreate**: `object` & [`CommentCreate`](../@devvit/namespaces/EventTypes/interfaces/CommentCreate.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"CommentCreate"`
+
+***
+
+
+
+### CommentDelete
+
+> **CommentDelete**: `object` & [`CommentDelete`](../@devvit/namespaces/EventTypes/interfaces/CommentDelete.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"CommentDelete"`
+
+***
+
+
+
+### CommentReport
+
+> **CommentReport**: `object` & [`CommentReport`](../@devvit/namespaces/EventTypes/interfaces/CommentReport.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"CommentReport"`
+
+***
+
+
+
+### CommentSubmit
+
+> **CommentSubmit**: `object` & [`CommentSubmit`](../@devvit/namespaces/EventTypes/interfaces/CommentSubmit.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"CommentSubmit"`
+
+***
+
+
+
+### CommentUpdate
+
+> **CommentUpdate**: `object` & [`CommentUpdate`](../@devvit/namespaces/EventTypes/interfaces/CommentUpdate.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"CommentUpdate"`
+
+***
+
+
+
+### ModAction
+
+> **ModAction**: `object` & `protos.ModAction`
+
+#### Type declaration
+
+##### type
+
+> **type**: `"ModAction"`
+
+***
+
+
+
+### ModMail
+
+> **ModMail**: `object` & `protos.ModMail`
+
+#### Type declaration
+
+##### type
+
+> **type**: `"ModMail"`
+
+***
+
+
+
+### PostCreate
+
+> **PostCreate**: `object` & [`PostCreate`](../@devvit/namespaces/EventTypes/interfaces/PostCreate.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"PostCreate"`
+
+***
+
+
+
+### PostDelete
+
+> **PostDelete**: `object` & [`PostDelete`](../@devvit/namespaces/EventTypes/interfaces/PostDelete.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"PostDelete"`
+
+***
+
+
+
+### PostFlairUpdate
+
+> **PostFlairUpdate**: `object` & [`PostFlairUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostFlairUpdate.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"PostFlairUpdate"`
+
+***
+
+
+
+### PostNsfwUpdate
+
+> **PostNsfwUpdate**: `object` & [`PostNsfwUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostNsfwUpdate.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"PostNsfwUpdate"`
+
+***
+
+
+
+### PostReport
+
+> **PostReport**: `object` & [`PostReport`](../@devvit/namespaces/EventTypes/interfaces/PostReport.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"PostReport"`
+
+***
+
+
+
+### PostSpoilerUpdate
+
+> **PostSpoilerUpdate**: `object` & [`PostSpoilerUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostSpoilerUpdate.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"PostSpoilerUpdate"`
+
+***
+
+
+
+### PostSubmit
+
+> **PostSubmit**: `object` & [`PostSubmit`](../@devvit/namespaces/EventTypes/interfaces/PostSubmit.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"PostSubmit"`
+
+***
+
+
+
+### PostUpdate
+
+> **PostUpdate**: `object` & [`PostUpdate`](../@devvit/namespaces/EventTypes/interfaces/PostUpdate.md)
+
+#### Type declaration
+
+##### type
+
+> **type**: `"PostUpdate"`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerOnEventHandler.md b/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerOnEventHandler.md
new file mode 100644
index 00000000..19462e2c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/TriggerOnEventHandler.md
@@ -0,0 +1,27 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: TriggerOnEventHandler()\
+
+> **TriggerOnEventHandler**\<`RequestType`\> = (`event`, `context`) => `TriggerResult`
+
+## Type Parameters
+
+### RequestType
+
+`RequestType`
+
+## Parameters
+
+### event
+
+`RequestType`
+
+### context
+
+[`TriggerContext`](TriggerContext.md)
+
+## Returns
+
+`TriggerResult`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/TxClientLike.md b/versioned_docs/version-0.13/api/public-api/type-aliases/TxClientLike.md
new file mode 100644
index 00000000..b49979a0
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/TxClientLike.md
@@ -0,0 +1,2094 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: TxClientLike
+
+> **TxClientLike** = `object`
+
+## Methods
+
+
+
+### del()
+
+> **del**(...`keys`): `Promise`\<`TxClientLike`\>
+
+Removes the specified keys. A key is ignored if it does not exist.
+https://redis.io/commands/del/
+
+#### Parameters
+
+##### keys
+
+...`string`[]
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Arg
+
+keys
+
+#### Example
+
+```ts
+async function delExample(context: Devvit.Context) {
+ await context.redis.set("quantity", "5");
+ await context.redis.del("quantity");
+}
+```
+
+***
+
+
+
+### discard()
+
+> **discard**(): `Promise`\<`void`\>
+
+Flushes all previously queued commands in a transaction and restores the connection state to normal.
+If WATCH was used, DISCARD unwatches all keys watched by the connection. https://redis.io/docs/latest/commands/discard/
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Example
+
+```ts
+async function discardExample(context: Devvit.Context) {
+ await context.redis.set("price", "25");
+
+ const txn = await context.redis.watch("price");
+
+ await txn.multi(); // Begin a transaction
+ await txn.incrBy("price", 5);
+ await txn.discard(); // Discard the commands in the transaction
+}
+```
+
+***
+
+
+
+### exec()
+
+> **exec**(): `Promise`\<`any`[]\>
+
+Executes all previously queued commands in a transaction and
+restores the connection state to normal. https://redis.io/commands/exec/
+
+#### Returns
+
+`Promise`\<`any`[]\>
+
+array, each element being the reply to each of the commands in the atomic transaction.
+
+#### Example
+
+```ts
+async function execExample(context: Devvit.Context) {
+ await context.redis.set("karma", "32");
+
+ const txn = await context.redis.watch("quantity");
+
+ await txn.multi(); // Begin a transaction
+ await txn.incrBy("karma", 10);
+ await txn.exec(); // Execute the commands in the transaction
+}
+```
+
+***
+
+
+
+### expire()
+
+> **expire**(`key`, `seconds`): `Promise`\<`TxClientLike`\>
+
+Set a timeout on key.
+https://redis.io/commands/expire/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### seconds
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Arg
+
+key
+
+#### Arg
+
+seconds
+
+#### Example
+
+```ts
+async function expireExample(context: Devvit.Context) {
+ await context.redis.set("product", "milk");
+ await context.redis.expire("product", 60); // Set the product to expire in 60 seconds
+}
+```
+
+***
+
+
+
+### expireTime()
+
+> **expireTime**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns the absolute Unix timestamp in seconds at which the given key will expire
+https://redis.io/commands/expiretime/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+expiration Unix timestamp in seconds, or a negative value in order to signal an error
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function expireTimeExample(context: Devvit.Context) {
+ await context.redis.set("product", "milk");
+ const expireTime : number = await context.redis.expireTime("product");
+ console.log("Expire time: " + expireTime);
+}
+```
+
+***
+
+
+
+### get()
+
+> **get**(`key`): `Promise`\<`TxClientLike`\>
+
+Get the value of key. If the key does not exist the special value nil is returned.
+https://redis.io/commands/get/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+value of key or null when key does not exist.
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function getExample(context: Devvit.Context) {
+ await context.redis.set("quantity", "5");
+ const quantity : string | undefined = await context.redis.get("quantity");
+ console.log("Quantity: " + quantity);
+}
+```
+
+***
+
+
+
+### getRange()
+
+> **getRange**(`key`, `start`, `end`): `Promise`\<`TxClientLike`\>
+
+Returns the substring of the string value stored at key, determined by
+the offsets start and end (both are inclusive).
+https://redis.io/commands/getrange/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### start
+
+`number`
+
+##### end
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+substring determined by offsets [start, end]
+
+#### Arg
+
+key
+
+#### Arg
+
+start
+
+#### Arg
+
+end
+
+#### Example
+
+```ts
+async function getRangeExample(context: Devvit.Context) {
+ await context.redis.set("word", "tacocat");
+ const range : string = await context.redis.getRange("word", 0, 3)
+ console.log("Range from index 0 to 3: " + range);
+}
+```
+
+***
+
+
+
+### ~~hdel()~~
+
+> **hdel**(`key`, `fields`): `Promise`\<`TxClientLike`\>
+
+Removes the specified fields from the hash stored at key.
+https://redis.io/commands/hdel/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### fields
+
+`string`[]
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+number of fields that were removed from the hash
+
+#### Deprecated
+
+Use [TxClientLike.hDel](#hdel-2) instead.
+
+#### Arg
+
+key
+
+#### Arg
+
+fields
+
+***
+
+
+
+### hDel()
+
+> **hDel**(`key`, `fields`): `Promise`\<`TxClientLike`\>
+
+Removes the specified fields from the hash stored at key.
+https://redis.io/commands/hdel/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### fields
+
+`string`[]
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+number of fields that were removed from the hash
+
+#### Arg
+
+key
+
+#### Arg
+
+fields
+
+#### Example
+
+```ts
+async function hDelExample(context: Devvit.Context) {
+ await context.redis.hSet("fruits", {"apple": "5", "orange": "7", "kiwi": "9"});
+ const numFieldsRemoved = await context.redis.hDel("fruits", ["apple", "kiwi"]);
+ console.log("Number of fields removed: " + numFieldsRemoved);
+}
+```
+
+***
+
+
+
+### ~~hget()~~
+
+> **hget**(`key`, `field`): `Promise`\<`TxClientLike`\>
+
+Returns the value associated with field in the hash stored at key.
+https://redis.io/commands/hget
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### field
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+value associated with field
+
+#### Deprecated
+
+Use [TxClientLike.hGet](#hget-2) instead.
+
+#### Arg
+
+key
+
+#### Arg
+
+field
+
+***
+
+
+
+### hGet()
+
+> **hGet**(`key`, `field`): `Promise`\<`TxClientLike`\>
+
+Returns the value associated with field in the hash stored at key.
+https://redis.io/commands/hget
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### field
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+value associated with field
+
+#### Arg
+
+key
+
+#### Arg
+
+field
+
+#### Example
+
+```ts
+async function hGetExample(context: Devvit.Context) {
+ await context.redis.hSet("fruits", {"apple": "5", "orange": "7", "kiwi": "9"});
+ const result : string | undefined = await context.redis.hGet("fruits", "orange");
+ console.log("Value of orange: " + result);
+}
+```
+
+***
+
+
+
+### ~~hgetall()~~
+
+> **hgetall**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns all fields and values of the hash stored at key
+https://redis.io/commands/hgetall
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+a map of fields and their values stored in the hash,
+
+#### Deprecated
+
+Use [TxClientLike.hGetAll](#hgetall-2) instead.
+
+#### Arg
+
+key
+
+***
+
+
+
+### hGetAll()
+
+> **hGetAll**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns all fields and values of the hash stored at key
+https://redis.io/commands/hgetall
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+a map of fields and their values stored in the hash,
+
+#### Arg
+
+key
+
+#### Example
+
+```
+async function hGetAllExample(context: Devvit.Context) {
+ await context.redis.hSet("groceryList", {
+ "eggs": "12",
+ "apples": "3",
+ "milk": "1"
+ });
+
+ const record : Record | undefined = await context.redis.hGetAll("groceryList");
+
+ if (record != undefined) {
+ console.log("Eggs: " + record.eggs + ", Apples: " + record.apples + ", Milk: " + record.milk);
+ }
+}
+```
+
+***
+
+
+
+### ~~hincrby()~~
+
+> **hincrby**(`key`, `field`, `value`): `Promise`\<`TxClientLike`\>
+
+Increments the number stored at field in the hash stored at key by increment.
+https://redis.io/commands/hincrby/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### field
+
+`string`
+
+##### value
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+value of key after the increment
+
+#### Deprecated
+
+Use [TxClientLike.hIncrBy](#hincrby-2) instead.
+
+#### Arg
+
+key
+
+#### Arg
+
+field
+
+#### Arg
+
+value
+
+***
+
+
+
+### hIncrBy()
+
+> **hIncrBy**(`key`, `field`, `value`): `Promise`\<`TxClientLike`\>
+
+Increments the number stored at field in the hash stored at key by increment.
+https://redis.io/commands/hincrby/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### field
+
+`string`
+
+##### value
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+value of key after the increment
+
+#### Arg
+
+key
+
+#### Arg
+
+field
+
+#### Arg
+
+value
+
+#### Example
+
+```ts
+async function hIncrByExample(context: Devvit.Context) {
+ await context.redis.hSet("user123", { "karma": "100" });
+ await context.redis.hIncrBy("user123", "karma", 5);
+}
+```
+
+***
+
+
+
+### ~~hkeys()~~
+
+> **hkeys**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns all field names in the hash stored at key.
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Deprecated
+
+Use [TxClientLike.hKeys](#hkeys-2) instead.
+
+#### Arg
+
+key
+
+***
+
+
+
+### hKeys()
+
+> **hKeys**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns all field names in the hash stored at key.
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function hKeysExample(context: Devvit.Context) {
+ await context.redis.hSet("prices", {
+ "chair": "48",
+ "desk": "95",
+ "whiteboard": "23"
+ });
+ const keys : string[] = await context.redis.hKeys("prices");
+ console.log("Keys: " + keys);
+}
+```
+
+***
+
+
+
+### ~~hlen()~~
+
+> **hlen**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns the number of fields contained in the hash stored at key.
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+the number of fields in the hash, or 0 when the key does not exist.
+
+#### Deprecated
+
+Use [TxClientLike.hLen](#hlen-2) instead.
+
+#### Arg
+
+key
+
+***
+
+
+
+### hLen()
+
+> **hLen**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns the number of fields contained in the hash stored at key.
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+the number of fields in the hash, or 0 when the key does not exist.
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function hLenExample(context: Devvit.Context) {
+ await context.redis.hSet("supplies", {
+ "paperclips": "25",
+ "pencils": "10",
+ "erasers": "5",
+ "pens": "7"
+ });
+ const numberOfFields : number = await context.redis.hLen("supplies");
+ console.log("Number of fields: " + numberOfFields);
+}
+```
+
+***
+
+
+
+### hMGet()
+
+> **hMGet**(`key`, `fields`): `Promise`\<`TxClientLike`\>
+
+Returns the values associated with fields in the hash stored at key.
+https://redis.io/commands/hmget
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### fields
+
+`string`[]
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+values associated with each field in the order they appear in fields
+
+#### Arg
+
+key
+
+#### Arg
+
+fields
+
+#### Example
+
+```ts
+async function hMGetExample(context: Devvit.Context) {
+ await context.redis.hSet("fruits", {"apple": "5", "orange": "7", "kiwi": "9"});
+ const result : string[] | undefined = await context.redis.hMGet("fruits", ["orange", "grape", "apple"]);
+ console.log("Value of fields: " + result); // "Value of fields: ["7", undefined, "5"]
+}
+```
+
+***
+
+
+
+### ~~hscan()~~
+
+> **hscan**(`key`, `cursor`, `pattern`?, `count`?): `Promise`\<`TxClientLike`\>
+
+Iterates fields of Hash types and their associated values.
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### cursor
+
+`number`
+
+##### pattern?
+
+`string`
+
+##### count?
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Deprecated
+
+Use [TxClientLike.hScan](#hscan-2) instead.
+
+#### Arg
+
+key
+
+#### Arg
+
+cursor
+
+#### Arg
+
+pattern
+
+#### Arg
+
+count
+
+***
+
+
+
+### hScan()
+
+> **hScan**(`key`, `cursor`, `pattern`?, `count`?): `Promise`\<`TxClientLike`\>
+
+Iterates fields of Hash types and their associated values.
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### cursor
+
+`number`
+
+##### pattern?
+
+`string`
+
+##### count?
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Arg
+
+key
+
+#### Arg
+
+cursor
+
+#### Arg
+
+pattern
+
+#### Arg
+
+count
+
+#### Example
+
+```ts
+async function hScanExample(context: Devvit.Context) {
+ await context.redis.hSet("userInfo", {
+ "name": "Bob",
+ "startDate": "01-05-20",
+ "totalAwards": "12"
+ });
+
+ const hScanResponse = await context.redis.hScan("userInfo", 0);
+
+ hScanResponse.fieldValues.forEach(x => {
+ console.log("Field: '" + x.field + "', Value: '" + x.value + "'");
+ });
+}
+```
+
+***
+
+
+
+### ~~hset()~~
+
+> **hset**(`key`, `fieldValues`): `Promise`\<`TxClientLike`\>
+
+Sets the specified fields to their respective values in the hash stored at key.
+https://redis.io/commands/hset
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### fieldValues
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+number of fields that were added
+
+#### Deprecated
+
+Use [TxClientLike.hSet](#hset-2) instead.
+
+#### Arg
+
+key
+
+#### Arg
+
+fieldValues
+
+***
+
+
+
+### hSet()
+
+> **hSet**(`key`, `fieldValues`): `Promise`\<`TxClientLike`\>
+
+Sets the specified fields to their respective values in the hash stored at key.
+https://redis.io/commands/hset
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### fieldValues
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+number of fields that were added
+
+#### Arg
+
+key
+
+#### Arg
+
+fieldValues
+
+#### Example
+
+```ts
+async function hSetExample(context: Devvit.Context) {
+ const numFieldsAdded = await context.redis.hSet("fruits", {"apple": "5", "orange": "7", "kiwi": "9"});
+ console.log("Number of fields added: " + numFieldsAdded);
+}
+```
+
+***
+
+
+
+### incrBy()
+
+> **incrBy**(`key`, `value`): `Promise`\<`TxClientLike`\>
+
+Increments the number stored at key by increment.
+https://redis.io/commands/incrby/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### value
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Arg
+
+key
+
+#### Arg
+
+value
+
+#### Example
+
+```ts
+async function incrByExample(context: Devvit.Context) {
+ await context.redis.set("totalPoints", "53")
+ const updatedPoints : number = await context.redis.incrBy("totalPoints", 100);
+ console.log("Updated points: " + updatedPoints);
+}
+```
+
+***
+
+
+
+### ~~mget()~~
+
+> **mget**(`keys`): `Promise`\<`TxClientLike`\>
+
+Returns the values of all specified keys.
+https://redis.io/commands/mget/
+
+#### Parameters
+
+##### keys
+
+`string`[]
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+list of values at the specified keys
+
+#### Deprecated
+
+Use [TxClientLike.mGet](#mget-2) instead.
+
+#### Arg
+
+keys
+
+***
+
+
+
+### mGet()
+
+> **mGet**(`keys`): `Promise`\<`TxClientLike`\>
+
+Returns the values of all specified keys.
+https://redis.io/commands/mget/
+
+#### Parameters
+
+##### keys
+
+`string`[]
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+list of values at the specified keys
+
+#### Arg
+
+keys
+
+#### Example
+
+```ts
+async function mGetExample(context: Devvit.Context) {
+ await context.redis.mSet({"name": "Zeek", "occupation": "Developer"});
+ const result : (string | null)[] = await context.redis.mGet(["name", "occupation"]);
+ result.forEach(x => {
+ console.log(x);
+ });
+}
+```
+
+***
+
+
+
+### ~~mset()~~
+
+> **mset**(`keyValues`): `Promise`\<`TxClientLike`\>
+
+Sets the given keys to their respective values.
+https://redis.io/commands/mset/
+
+#### Parameters
+
+##### keyValues
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Deprecated
+
+Use [TxClientLike.mSet](#mset-2) instead.
+
+#### Arg
+
+keyValues
+
+***
+
+
+
+### mSet()
+
+> **mSet**(`keyValues`): `Promise`\<`TxClientLike`\>
+
+Sets the given keys to their respective values.
+https://redis.io/commands/mset/
+
+#### Parameters
+
+##### keyValues
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Arg
+
+keyValues
+
+#### Example
+
+```ts
+async function mSetExample(context: Devvit.Context) {
+ await context.redis.mSet({"name": "Zeek", "occupation": "Developer"});
+}
+```
+
+***
+
+
+
+### multi()
+
+> **multi**(): `Promise`\<`void`\>
+
+Marks the start of a transaction block. Subsequent commands will be
+queued for atomic execution using EXEC. https://redis.io/commands/multi/
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Example
+
+```ts
+async function multiExample(context: Devvit.Context) {
+ await context.redis.set("karma", "32");
+
+ const txn = await context.redis.watch("quantity");
+
+ await txn.multi(); // Begin a transaction
+ await txn.incrBy("karma", 10);
+ await txn.exec(); // Execute the commands in the transaction
+}
+```
+
+***
+
+
+
+### set()
+
+> **set**(`key`, `value`, `options`?): `Promise`\<`TxClientLike`\>
+
+Set key to hold the string value. If key already holds a value, it is overwritten
+https://redis.io/commands/set/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### value
+
+`string`
+
+##### options?
+
+[`SetOptions`](SetOptions.md)
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Arg
+
+key
+
+#### Arg
+
+value
+
+#### Arg
+
+options
+
+#### Example
+
+```ts
+async function setExample(context: Devvit.Context) {
+ await context.redis.set("quantity", "5");
+}
+```
+
+***
+
+
+
+### setRange()
+
+> **setRange**(`key`, `offset`, `value`): `Promise`\<`TxClientLike`\>
+
+Overwrites part of the string stored at key, starting at the
+specified offset, for the entire length of value.
+https://redis.io/commands/setrange/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### offset
+
+`number`
+
+##### value
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+length of the string after it was modified by the command
+
+#### Arg
+
+key
+
+#### Arg
+
+offset
+
+#### Example
+
+```ts
+async function setRangeExample(context: Devvit.Context) {
+ await context.redis.set("word", "tacocat");
+ await context.redis.setRange("word", 0, "blue");
+}
+```
+
+***
+
+
+
+### ~~strlen()~~
+
+> **strlen**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns the length of the string value stored at key.
+An error is returned when key holds a non-string value.
+https://redis.io/commands/strlen/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+length of the string stored at key
+
+#### Deprecated
+
+Use [TxClientLike.strLen](#strlen-2) instead.
+
+#### Arg
+
+key
+
+***
+
+
+
+### strLen()
+
+> **strLen**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns the length of the string value stored at key.
+An error is returned when key holds a non-string value.
+https://redis.io/commands/strlen/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+length of the string stored at key
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function strLenExample(context: Devvit.Context) {
+ await context.redis.set("word", "tacocat");
+ const length : number = await context.redis.strLen("word");
+ console.log("Length of word: " + length);
+}
+```
+
+***
+
+
+
+### type()
+
+> **type**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns the string representation of the type of the value stored at key
+https://redis.io/commands/type/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+string representation of the type
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function typeExample(context: Devvit.Context) {
+ await context.redis.set("quantity", "5");
+ const type : string = await context.redis.type("quantity");
+ console.log("Key type: " + type);
+}
+```
+
+***
+
+
+
+### unwatch()
+
+> **unwatch**(): `Promise`\<`TxClientLike`\>
+
+Flushes all the previously watched keys for a transaction.
+If you call EXEC or DISCARD, there's no need to manually call UNWATCH.
+https://redis.io/commands/unwatch/
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Example
+
+```ts
+async function unwatchExample(context: Devvit.Context) {
+ await context.redis.set("gold", "50");
+
+ const txn = await context.redis.watch("gold");
+
+ await txn.multi(); // Begin a transaction
+ await txn.incrBy("gold", 30);
+ await txn.unwatch(); // Unwatch "gold"
+
+ // Now that "gold" has been unwatched, we can increment its value
+ // outside the transaction without canceling the transaction
+ await context.redis.incrBy("gold", -20);
+
+ await txn.exec(); // Execute the commands in the transaction
+
+ console.log("Gold value: " + await context.redis.get("gold")); // The value of 'gold' should be 50 + 30 - 20 = 60
+}
+```
+
+***
+
+
+
+### watch()
+
+> **watch**(...`keys`): `Promise`\<`TxClientLike`\>
+
+Marks the given keys to be watched for conditional execution of a transaction.
+https://redis.io/commands/watch/
+
+#### Parameters
+
+##### keys
+
+...`string`[]
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Arg
+
+keys - given keys to be watched
+
+#### Example
+
+```ts
+async function watchExample(context: Devvit.Context) {
+ await context.redis.set("karma", "32");
+
+ const txn = await context.redis.watch("quantity");
+
+ await txn.multi(); // Begin a transaction
+ await txn.incrBy("karma", 10);
+ await txn.exec(); // Execute the commands in the transaction
+}
+```
+
+***
+
+
+
+### zAdd()
+
+> **zAdd**(`key`, ...`members`): `Promise`\<`TxClientLike`\>
+
+Adds all the specified members with the specified scores to the sorted set stored at key.
+https://redis.io/commands/zadd/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### members
+
+...[`ZMember`](ZMember.md)[]
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+number of elements added to the sorted set
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function zAddExample(context: Devvit.Context) {
+ const numMembersAdded : number = await context.redis.zAdd("leaderboard",
+ {member: "louis", score: 37},
+ {member: "fernando", score: 10},
+ {member: "caesar", score: 20},
+ {member: "alexander", score: 25},
+ );
+ console.log("Number of members added: " + numMembersAdded);
+}
+```
+
+***
+
+
+
+### zCard()
+
+> **zCard**(`key`): `Promise`\<`TxClientLike`\>
+
+Returns the cardinality (number of elements) of the sorted set stored at key.
+https://redis.io/commands/zcard/
+
+#### Parameters
+
+##### key
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+cardinality of the sorted set
+
+#### Arg
+
+key
+
+#### Example
+
+```ts
+async function zCardExample(context: Devvit.Context) {
+ await context.redis.zAdd("leaderboard",
+ {member: "louis", score: 37},
+ {member: "fernando", score: 10},
+ {member: "caesar", score: 20},
+ {member: "alexander", score: 25},
+ );
+ const cardinality : number = await context.redis.zCard("leaderboard");
+ console.log("Cardinality: " + cardinality);
+}
+```
+
+***
+
+
+
+### zIncrBy()
+
+> **zIncrBy**(`key`, `member`, `value`): `Promise`\<`TxClientLike`\>
+
+Increments the score of member in the sorted set stored at key by value
+https://redis.io/commands/zincrby/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### member
+
+`string`
+
+##### value
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+the new score of member as a double precision floating point number
+
+#### Arg
+
+key
+
+#### Arg
+
+member
+
+#### Arg
+
+value
+
+#### Example
+
+```ts
+async function zIncrByExample(context: Devvit.Context) {
+ await context.redis.zAdd("animals",
+ {member: "zebra", score: 92},
+ {member: "cat", score: 100},
+ {member: "dog", score: 95},
+ {member: "elephant", score: 97}
+ );
+ const updatedScore : number = await context.redis.zIncrBy("animals", "dog", 10);
+ console.log("Dog's updated score: " + updatedScore);
+}
+```
+
+***
+
+
+
+### zRange()
+
+> **zRange**(`key`, `start`, `stop`, `options`?): `Promise`\<`TxClientLike`\>
+
+Returns the specified range of elements in the sorted set stored at key.
+https://redis.io/commands/zrange/
+
+When using `by: 'lex'`, the start and stop inputs will be prepended with `[` by default, unless they already begin with `[`, `(` or are one of the special values `+` or `-`.
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### start
+
+`string` | `number`
+
+##### stop
+
+`string` | `number`
+
+##### options?
+
+[`ZRangeOptions`](ZRangeOptions.md)
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+list of elements in the specified range
+
+#### Arg
+
+key
+
+#### Arg
+
+start
+
+#### Arg
+
+stop
+
+#### Arg
+
+options
+
+#### Example
+
+```ts
+async function zRangeExample(context: Devvit.Context) {
+ await context.redis.zAdd("leaderboard",
+ {member: "louis", score: 37},
+ {member: "fernando", score: 10},
+ {member: "caesar", score: 20},
+ {member: "alexander", score: 25},
+ );
+
+ // View elements with scores between 0 and 30 inclusive, sorted by score
+ const scores : {member : string, score : number}[] = await context.redis.zRange("leaderboard", 0, 30, { by: "score" });
+
+ scores.forEach(x => {
+ console.log("Member: " + x.member, ", Score: " + x.score);
+ });
+}
+```
+
+***
+
+
+
+### zRank()
+
+> **zRank**(`key`, `member`): `Promise`\<`TxClientLike`\>
+
+Returns the rank of member in the sorted set stored at key
+https://redis.io/commands/zrank/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### member
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+rank of the member. The rank (or index) is 0-based
+which means that the member with the lowest score has rank 0
+
+#### Arg
+
+key
+
+#### Arg
+
+member
+
+#### Example
+
+```ts
+async function zRankExample(context: Devvit.Context) {
+ await context.redis.zAdd("animals",
+ {member: "zebra", score: 92},
+ {member: "cat", score: 100},
+ {member: "dog", score: 95},
+ {member: "elephant", score: 97}
+ );
+ const rank : number = await context.redis.zRank("animals", "dog");
+ console.log("Dog's rank: " + rank);
+}
+```
+
+***
+
+
+
+### zRem()
+
+> **zRem**(`key`, `members`): `Promise`\<`TxClientLike`\>
+
+Removes the specified members from the sorted set stored at key.
+https://redis.io/commands/zrem/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### members
+
+`string`[]
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+number of members removed from the sorted set
+
+#### Arg
+
+key
+
+#### Arg
+
+members
+
+#### Example
+
+```ts
+async function zRemExample(context: Devvit.Context) {
+ await context.redis.zAdd("leaderboard",
+ {member: "louis", score: 37},
+ {member: "fernando", score: 10},
+ {member: "caesar", score: 20},
+ {member: "alexander", score: 25},
+ );
+ const numberOfMembersRemoved : number = await context.redis.zRem("leaderboard", ["fernando", "alexander"]);
+ console.log("Number of members removed: " + numberOfMembersRemoved);
+}
+```
+
+***
+
+
+
+### zRemRangeByLex()
+
+> **zRemRangeByLex**(`key`, `min`, `max`): `Promise`\<`TxClientLike`\>
+
+removes all elements in the sorted set stored at key between the
+lexicographical range specified by min and max
+https://redis.io/commands/zremrangebylex/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### min
+
+`string`
+
+##### max
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+number of members removed from the sorted set
+
+#### Arg
+
+key
+
+#### Arg
+
+min
+
+#### Arg
+
+max
+
+#### Example
+
+```ts
+async function zRemRangeByLexExample(context: Devvit.Context) {
+ await context.redis.zAdd("fruits",
+ {member: "kiwi", score: 0},
+ {member: "mango", score: 0},
+ {member: "banana", score: 0},
+ {member: "orange", score: 0},
+ {member: "apple", score: 0},
+ );
+
+ // Remove fruits alphabetically ordered between 'kiwi' inclusive and 'orange' exclusive
+ // Note: The symbols '[' and '(' indicate inclusive or exclusive, respectively. These must be included in the call to zRemRangeByLex().
+ const numFieldsRemoved : number = await context.redis.zRemRangeByLex("fruits", "[kiwi", "(orange");
+ console.log("Number of fields removed: " + numFieldsRemoved);
+}
+```
+
+***
+
+
+
+### zRemRangeByRank()
+
+> **zRemRangeByRank**(`key`, `start`, `stop`): `Promise`\<`TxClientLike`\>
+
+Removes all elements in the sorted set stored at key with rank between start and stop.
+https://redis.io/commands/zremrangebyrank/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### start
+
+`number`
+
+##### stop
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+number of members removed from the sorted set
+
+#### Arg
+
+key
+
+#### Arg
+
+start
+
+#### Arg
+
+stop
+
+#### Example
+
+```
+async function zRemRangeByRankExample(context: Devvit.Context) {
+ await context.redis.zAdd("fruits",
+ {member: "kiwi", score: 10},
+ {member: "mango", score: 20},
+ {member: "banana", score: 30},
+ {member: "orange", score: 40},
+ {member: "apple", score: 50},
+ );
+
+ // Remove fruits ranked 1 through 3 inclusive
+ const numFieldsRemoved : number = await context.redis.zRemRangeByRank("fruits", 1, 3);
+ console.log("Number of fields removed: " + numFieldsRemoved);
+}
+```
+
+***
+
+
+
+### zRemRangeByScore()
+
+> **zRemRangeByScore**(`key`, `min`, `max`): `Promise`\<`TxClientLike`\>
+
+Removes all elements in the sorted set stored at key with a score between min and max
+https://redis.io/commands/zremrangebyscore/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### min
+
+`number`
+
+##### max
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+number of members removed from the sorted set
+
+#### Arg
+
+key
+
+#### Arg
+
+min
+
+#### Arg
+
+max
+
+#### Example
+
+```ts
+async function zRemRangeByScoreExample(context: Devvit.Context) {
+ await context.redis.zAdd("fruits",
+ {member: "kiwi", score: 10},
+ {member: "mango", score: 20},
+ {member: "banana", score: 30},
+ {member: "orange", score: 40},
+ {member: "apple", score: 50},
+ );
+ // Remove fruits scored between 30 and 50 inclusive
+ const numFieldsRemoved : number = await context.redis.zRemRangeByScore("fruits", 30, 50);
+ console.log("Number of fields removed: " + numFieldsRemoved);
+}
+```
+
+***
+
+
+
+### zScan()
+
+> **zScan**(`key`, `cursor`, `pattern`?, `count`?): `Promise`\<`TxClientLike`\>
+
+Iterates elements of Sorted Set types and their associated scores.
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### cursor
+
+`number`
+
+##### pattern?
+
+`string`
+
+##### count?
+
+`number`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+#### Arg
+
+key
+
+#### Arg
+
+cursor
+
+#### Arg
+
+pattern
+
+#### Arg
+
+count
+
+#### Example
+
+```ts
+async function zScanExample(context: Devvit.Context) {
+ await context.redis.zAdd("fruits",
+ {member: "kiwi", score: 0},
+ {member: "mango", score: 0},
+ {member: "banana", score: 0},
+ {member: "orange", score: 0},
+ {member: "apple", score: 0},
+ );
+ const zScanResponse = await context.redis.zScan("fruits", 0);
+ console.log("zScanResponse: " + JSON.stringify(zScanResponse));
+}
+```
+
+***
+
+
+
+### zScore()
+
+> **zScore**(`key`, `member`): `Promise`\<`TxClientLike`\>
+
+Returns the score of member in the sorted set at key.
+https://redis.io/commands/zscore/
+
+#### Parameters
+
+##### key
+
+`string`
+
+##### member
+
+`string`
+
+#### Returns
+
+`Promise`\<`TxClientLike`\>
+
+the score of the member (a double-precision floating point number).
+
+#### Arg
+
+key
+
+#### Arg
+
+member
+
+#### Example
+
+```ts
+async function zScoreExample(context: Devvit.Context) {
+ await context.redis.zAdd("leaderboard",
+ {member: "louis", score: 37},
+ {member: "fernando", score: 10},
+ {member: "caesar", score: 20},
+ {member: "alexander", score: 25},
+ );
+ const score : number | undefined = await context.redis.zScore("leaderboard", "caesar");
+ if(score !== undefined) {
+ console.log("Caesar's score: " + score);
+ }
+}
+```
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UIClient.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UIClient.md
new file mode 100644
index 00000000..d550339c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UIClient.md
@@ -0,0 +1,216 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UIClient
+
+> **UIClient** = `object`
+
+The UI client lets your app interact with the Reddit frontend.
+This client will only be available for capabilities that have
+a frontend component, such as within the Custom Post component's
+event handlers, a Form's `onSubmit` handler, and Menu items.
+
+## Properties
+
+
+
+### webView
+
+> **webView**: `WebViewUIClient`
+
+Interact with WebView blocks
+
+## Methods
+
+
+
+### navigateTo()
+
+#### Call Signature
+
+> **navigateTo**(`url`): `void`
+
+Navigate to a URL
+
+##### Parameters
+
+###### url
+
+`string`
+
+##### Returns
+
+`void`
+
+#### Call Signature
+
+> **navigateTo**(`subreddit`): `void`
+
+##### Parameters
+
+###### subreddit
+
+`Pick`\<`Subreddit`, `"url"`\>
+
+##### Returns
+
+`void`
+
+#### Call Signature
+
+> **navigateTo**(`post`): `void`
+
+##### Parameters
+
+###### post
+
+`Pick`\<`Post`, `"url"`\>
+
+##### Returns
+
+`void`
+
+#### Call Signature
+
+> **navigateTo**(`comment`): `void`
+
+##### Parameters
+
+###### comment
+
+`Pick`\<`Comment`, `"url"`\>
+
+##### Returns
+
+`void`
+
+#### Call Signature
+
+> **navigateTo**(`user`): `void`
+
+##### Parameters
+
+###### user
+
+`Pick`\<`User`, `"url"`\>
+
+##### Returns
+
+`void`
+
+#### Call Signature
+
+> **navigateTo**(`urlOrThing`): `void`
+
+##### Parameters
+
+###### urlOrThing
+
+`string` | \{ `url`: `string`; \}
+
+##### Returns
+
+`void`
+
+***
+
+
+
+### showForm()
+
+> **showForm**(`formKey`, `data`?): `void`
+
+Open a form in a modal
+
+#### Parameters
+
+##### formKey
+
+[`FormKey`](FormKey.md)
+
+##### data?
+
+[`JSONObject`](JSONObject.md)
+
+#### Returns
+
+`void`
+
+***
+
+
+
+### showFormInternal()
+
+> **showFormInternal**(`formKey`, `data`?, `formDataOverride`?): `void`
+
+Internal use only.
+
+#### Parameters
+
+##### formKey
+
+[`FormKey`](FormKey.md)
+
+##### data?
+
+[`JSONObject`](JSONObject.md)
+
+##### formDataOverride?
+
+[`Form`](Form.md)
+
+#### Returns
+
+`void`
+
+***
+
+
+
+### showToast()
+
+#### Call Signature
+
+> **showToast**(`text`): `void`
+
+Show a message in a toast.
+
+##### Parameters
+
+###### text
+
+`string`
+
+##### Returns
+
+`void`
+
+#### Call Signature
+
+> **showToast**(`toast`): `void`
+
+##### Parameters
+
+###### toast
+
+[`Toast`](Toast.md)
+
+##### Returns
+
+`void`
+
+#### Call Signature
+
+> **showToast**(`textOrToast`): `void`
+
+##### Parameters
+
+###### textOrToast
+
+`string` | [`Toast`](Toast.md)
+
+##### Returns
+
+`void`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UploadMediaOptions.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UploadMediaOptions.md
new file mode 100644
index 00000000..22a3f92c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UploadMediaOptions.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UploadMediaOptions
+
+> **UploadMediaOptions** = `object`
+
+## Properties
+
+
+
+### type
+
+> **type**: `"image"` \| `"gif"` \| `"video"`
+
+***
+
+
+
+### url
+
+> **url**: `string`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseAsyncResult.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseAsyncResult.md
new file mode 100644
index 00000000..31b5c5fa
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseAsyncResult.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseAsyncResult\
+
+> **UseAsyncResult**\<`S`\> = `object`
+
+## Type Parameters
+
+### S
+
+`S`
+
+## Properties
+
+
+
+### data
+
+> **data**: `S` \| `null`
+
+***
+
+
+
+### error
+
+> **error**: [`AsyncError`](AsyncError.md) \| `null`
+
+***
+
+
+
+### loading
+
+> **loading**: `boolean`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseChannelHook.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseChannelHook.md
new file mode 100644
index 00000000..cc307e25
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseChannelHook.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseChannelHook()\
+
+> **UseChannelHook**\<`Message`\> = (`options`) => [`UseChannelResult`](UseChannelResult.md)\<`Message`\>
+
+## Type Parameters
+
+### Message
+
+`Message` *extends* [`JSONValue`](JSONValue.md) = [`JSONValue`](JSONValue.md)
+
+## Parameters
+
+### options
+
+`ChannelOptions`\<`Message`\>
+
+## Returns
+
+[`UseChannelResult`](UseChannelResult.md)\<`Message`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseChannelResult.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseChannelResult.md
new file mode 100644
index 00000000..07a0532e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseChannelResult.md
@@ -0,0 +1,71 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseChannelResult\
+
+> **UseChannelResult**\<`Message`\> = `object`
+
+## Type Parameters
+
+### Message
+
+`Message` *extends* [`JSONValue`](JSONValue.md) = [`JSONValue`](JSONValue.md)
+
+## Properties
+
+
+
+### status
+
+> **status**: `ChannelStatus`
+
+Current subscription status
+
+## Methods
+
+
+
+### send()
+
+> **send**(`msg`): `Promise`\<`void`\>
+
+Publish a message to the channel
+
+#### Parameters
+
+##### msg
+
+`Message`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### subscribe()
+
+> **subscribe**(): `void`
+
+Subscribe to the channel
+
+#### Returns
+
+`void`
+
+***
+
+
+
+### unsubscribe()
+
+> **unsubscribe**(): `void`
+
+Unsubscribe from the channel
+
+#### Returns
+
+`void`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseFormHook.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseFormHook.md
new file mode 100644
index 00000000..fa3f6239
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseFormHook.md
@@ -0,0 +1,29 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseFormHook()\
+
+> **UseFormHook**\<`T`\> = (`form`, `onSubmit`) => [`FormKey`](FormKey.md)
+
+A hook that returns a form key that can be used in the `ui.showForm`
+
+## Type Parameters
+
+### T
+
+`T` *extends* [`Form`](Form.md) \| [`FormFunction`](FormFunction.md) = [`Form`](Form.md) \| [`FormFunction`](FormFunction.md)
+
+## Parameters
+
+### form
+
+`T`
+
+### onSubmit
+
+(`values`) => `void` \| `Promise`\<`void`\>
+
+## Returns
+
+[`FormKey`](FormKey.md)
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseIntervalHook.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseIntervalHook.md
new file mode 100644
index 00000000..77452c24
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseIntervalHook.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseIntervalHook()
+
+> **UseIntervalHook** = (`callback`, `delay`) => [`UseIntervalResult`](UseIntervalResult.md)
+
+A hook that can used to run a callback on an interval between Block renders. Only one useInterval hook may be running at a time.
+
+## Parameters
+
+### callback
+
+() => `void` \| `Promise`\<`void`\>
+
+### delay
+
+`number`
+
+## Returns
+
+[`UseIntervalResult`](UseIntervalResult.md)
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseIntervalResult.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseIntervalResult.md
new file mode 100644
index 00000000..19ebb11f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseIntervalResult.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseIntervalResult
+
+> **UseIntervalResult** = `object`
+
+An object that contains functions to start and stop the interval created by the `useInterval` hook
+
+## Properties
+
+
+
+### start()
+
+> **start**: () => `void`
+
+Start the interval
+
+#### Returns
+
+`void`
+
+***
+
+
+
+### stop()
+
+> **stop**: () => `void`
+
+Stop the interval
+
+#### Returns
+
+`void`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseStateHook.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseStateHook.md
new file mode 100644
index 00000000..17b16f9d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseStateHook.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseStateHook
+
+> **UseStateHook** = [`Context`](Context.md)\[`"useState"`\]
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseStateInitializer.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseStateInitializer.md
new file mode 100644
index 00000000..f454554c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseStateInitializer.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseStateInitializer\
+
+> **UseStateInitializer**\<`S`\> = `S` \| () => `S` \| [`AsyncUseStateInitializer`](AsyncUseStateInitializer.md)\<`S`\>
+
+## Type Parameters
+
+### S
+
+`S`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseStateResult.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseStateResult.md
new file mode 100644
index 00000000..8a87f432
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseStateResult.md
@@ -0,0 +1,15 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseStateResult\
+
+> **UseStateResult**\<`S`\> = \[`S`, [`StateSetter`](StateSetter.md)\<`S`\>\]
+
+A tuple containing the current state and a function to update it
+
+## Type Parameters
+
+### S
+
+`S`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseWebViewOnMessage.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseWebViewOnMessage.md
new file mode 100644
index 00000000..3217f7ef
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseWebViewOnMessage.md
@@ -0,0 +1,35 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseWebViewOnMessage()\
+
+> **UseWebViewOnMessage**\<`From`, `To`\> = (`message`, `hook`) => `void` \| `Promise`\<`void`\>
+
+## Type Parameters
+
+### From
+
+`From` *extends* [`JSONValue`](JSONValue.md) = [`JSONValue`](JSONValue.md)
+
+Message from web view to Devvit Blocks app.
+
+### To
+
+`To` *extends* [`JSONValue`](JSONValue.md) = [`JSONValue`](JSONValue.md)
+
+Message from Devvit Blocks app to web view.
+
+## Parameters
+
+### message
+
+`From`
+
+### hook
+
+[`UseWebViewResult`](UseWebViewResult.md)\<`To`\>
+
+## Returns
+
+`void` \| `Promise`\<`void`\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseWebViewOptions.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseWebViewOptions.md
new file mode 100644
index 00000000..7dd693b8
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseWebViewOptions.md
@@ -0,0 +1,66 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseWebViewOptions\
+
+> **UseWebViewOptions**\<`From`, `To`\> = `object`
+
+## Type Parameters
+
+### From
+
+`From` *extends* [`JSONValue`](JSONValue.md) = [`JSONValue`](JSONValue.md)
+
+Message from web view to Devvit Blocks app.
+
+### To
+
+`To` *extends* [`JSONValue`](JSONValue.md) = [`JSONValue`](JSONValue.md)
+
+Message from Devvit Blocks app to web view.
+
+## Properties
+
+
+
+### onMessage
+
+> **onMessage**: [`UseWebViewOnMessage`](UseWebViewOnMessage.md)\<`From`, `To`\>
+
+Handle UI events originating from the web view to be handled by a Devvit app
+
+***
+
+
+
+### ~~onUnmount()?~~
+
+> `optional` **onUnmount**: (`hook`) => `void` \| `Promise`\<`void`\>
+
+The callback to run when the web view has been unmounted. Might be used to
+set state, stop or resume timers, or perform other tasks now that the web view is no longer visible.
+
+#### Parameters
+
+##### hook
+
+[`UseWebViewResult`](UseWebViewResult.md)\<`To`\>
+
+#### Returns
+
+`void` \| `Promise`\<`void`\>
+
+#### Deprecated
+
+use the page visibility API for now.
+
+***
+
+
+
+### url?
+
+> `optional` **url**: `string`
+
+Relative HTML asset filename like `foo/bar.html`. Defaults to index.html if omitted.
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/UseWebViewResult.md b/versioned_docs/version-0.13/api/public-api/type-aliases/UseWebViewResult.md
new file mode 100644
index 00000000..b81293a5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/UseWebViewResult.md
@@ -0,0 +1,63 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: UseWebViewResult\
+
+> **UseWebViewResult**\<`To`\> = `object`
+
+## Type Parameters
+
+### To
+
+`To` *extends* [`JSONValue`](JSONValue.md) = [`JSONValue`](JSONValue.md)
+
+Message from Devvit Blocks app to web view.
+
+## Methods
+
+
+
+### mount()
+
+> **mount**(): `void`
+
+Initiate a request for the web view to open
+
+#### Returns
+
+`void`
+
+***
+
+
+
+### postMessage()
+
+> **postMessage**(`message`): `void`
+
+Send a message to the web view
+
+#### Parameters
+
+##### message
+
+`To`
+
+#### Returns
+
+`void`
+
+***
+
+
+
+### unmount()
+
+> **unmount**(): `void`
+
+Initiate a request for the web view to be closed
+
+#### Returns
+
+`void`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedBooleanField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedBooleanField.md
new file mode 100644
index 00000000..aee08ff8
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedBooleanField.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ValidatedBooleanField
+
+> **ValidatedBooleanField** = `Prettify`\<[`ValidatedFormField`](ValidatedFormField.md)\<[`BooleanField`](BooleanField.md), `boolean`\>\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedFormField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedFormField.md
new file mode 100644
index 00000000..e043ecd3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedFormField.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ValidatedFormField\
+
+> **ValidatedFormField**\<`Field`, `ValueType`\> = `Omit`\<`Field`, `"required"`\> & `object`
+
+## Type declaration
+
+### onValidate?
+
+> `optional` **onValidate**: [`OnValidateHandler`](OnValidateHandler.md)\<`ValueType`\>
+
+## Type Parameters
+
+### Field
+
+`Field`
+
+### ValueType
+
+`ValueType`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedNumberField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedNumberField.md
new file mode 100644
index 00000000..64ad1631
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedNumberField.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ValidatedNumberField
+
+> **ValidatedNumberField** = `Prettify`\<[`ValidatedFormField`](ValidatedFormField.md)\<[`NumberField`](NumberField.md), `number`\>\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedParagraphField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedParagraphField.md
new file mode 100644
index 00000000..8f19d00a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedParagraphField.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ValidatedParagraphField
+
+> **ValidatedParagraphField** = `Prettify`\<[`ValidatedFormField`](ValidatedFormField.md)\<[`ParagraphField`](ParagraphField.md), `string`\>\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedSelectField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedSelectField.md
new file mode 100644
index 00000000..28b8f084
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedSelectField.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ValidatedSelectField
+
+> **ValidatedSelectField** = `Prettify`\<[`ValidatedFormField`](ValidatedFormField.md)\<[`SelectField`](SelectField.md), `string`[]\>\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedStringField.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedStringField.md
new file mode 100644
index 00000000..d38e8dca
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ValidatedStringField.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ValidatedStringField
+
+> **ValidatedStringField** = `Prettify`\<[`ValidatedFormField`](ValidatedFormField.md)\<[`StringField`](StringField.md), `string`\>\>
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ZMember.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ZMember.md
new file mode 100644
index 00000000..73ccb3da
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ZMember.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ZMember
+
+> **ZMember** = `object`
+
+## Properties
+
+
+
+### member
+
+> **member**: `string`
+
+***
+
+
+
+### score
+
+> **score**: `number`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ZRangeByScoreOptions.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ZRangeByScoreOptions.md
new file mode 100644
index 00000000..8cf035d3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ZRangeByScoreOptions.md
@@ -0,0 +1,31 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ZRangeByScoreOptions
+
+> **ZRangeByScoreOptions** = `object`
+
+## Properties
+
+
+
+### limit?
+
+> `optional` **limit**: `object`
+
+#### count
+
+> **count**: `number`
+
+#### offset
+
+> **offset**: `number`
+
+***
+
+
+
+### withScores?
+
+> `optional` **withScores**: `boolean`
diff --git a/versioned_docs/version-0.13/api/public-api/type-aliases/ZRangeOptions.md b/versioned_docs/version-0.13/api/public-api/type-aliases/ZRangeOptions.md
new file mode 100644
index 00000000..857946d8
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/type-aliases/ZRangeOptions.md
@@ -0,0 +1,42 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Type Alias: ZRangeOptions
+
+> **ZRangeOptions** = `object`
+
+## Properties
+
+
+
+### by
+
+> **by**: `"score"` \| `"lex"` \| `"rank"`
+
+***
+
+
+
+### limit?
+
+> `optional` **limit**: `object`
+
+#### count
+
+> **count**: `number`
+
+#### offset
+
+> **offset**: `number`
+
+***
+
+
+
+### reverse?
+
+> `optional` **reverse**: `boolean`
+
+Reverses the sorted set, with index 0 as the element with the highest
+score.
diff --git a/versioned_docs/version-0.13/api/public-api/variables/ALL_ICON_NAMES.md b/versioned_docs/version-0.13/api/public-api/variables/ALL_ICON_NAMES.md
new file mode 100644
index 00000000..b7a16738
--- /dev/null
+++ b/versioned_docs/version-0.13/api/public-api/variables/ALL_ICON_NAMES.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# Variable: ALL\_ICON\_NAMES
+
+> `const` **ALL\_ICON\_NAMES**: readonly \[`"3rd-party"`, `"a11y"`, `"activity"`, `"add-emoji"`, `"add"`, `"add-filter"`, `"add-media"`, `"add-to-feed"`, `"admin"`, `"ads"`, `"ai"`, `"align-center"`, `"align-left"`, `"align-right"`, `"all"`, `"ama"`, `"answers"`, `"appearance"`, `"approve"`, `"archived"`, `"aspect-ratio-12"`, `"aspect-ratio"`, `"aspect-rectangle"`, `"attach"`, `"audience"`, `"audio"`, `"author"`, `"automod"`, `"avatar-style"`, `"award"`, `"back"`, `"backup"`, `"ban"`, `"best"`, `"beta-advertise-2"`, `"beta-advertise-3"`, `"beta-advertise-4"`, `"beta-advertise-5"`, `"binoculars"`, `"block"`, `"blockchain"`, `"bold"`, `"boost"`, `"bot"`, `"bounce"`, `"brand-awareness"`, `"browse"`, `"browser"`, `"business"`, `"cake"`, `"calendar"`, `"camera"`, `"campaign"`, `"caret-down"`, `"caret-left"`, `"caret-right"`, `"caret-up"`, `"caret-updown"`, `"chat"`, `"chat-group"`, `"chat-new"`, `"chat-private"`, `"checkbox-dismiss"`, `"checkbox"`, `"checkmark"`, `"chrome"`, `"clear"`, `"client-list"`, `"close"`, `"closed-captioning"`, `"club-12"`, `"club"`, `"code-block"`, `"code-inline"`, `"coins-color-old"`, `"coins"`, `"collapse-left"`, `"collapse-right"`, `"collectible-expressions"`, `"collection"`, `"comment"`, `"comments"`, `"communities"`, `"community"`, `"confidence"`, `"confidence-outline-null"`, `"contest"`, `"controversial"`, `"conversion"`, `"copy-clipboard"`, `"crop"`, `"crosspost"`, `"crowd-control"`, `"custom-feed"`, `"customize"`, `"dashboard"`, `"day"`, `"delete-column"`, `"delete"`, `"delete-row"`, `"devvit"`, `"discover"`, `"dismiss-all"`, `"distinguish"`, `"down-arrow"`, `"down"`, `"download"`, `"downvote"`, `"downvotes"`, `"drag"`, `"drugs"`, `"duplicate"`, `"edit"`, `"effect"`, `"embed"`, `"emoji"`, `"end-live-chat"`, `"error"`, `"expand-left-12"`, `"expand-left"`, `"expand-right-12"`, `"expand-right"`, `"external"`, `"feed-video"`, `"filter"`, `"fork"`, `"format"`, `"forward"`, `"funnel"`, `"gif-post"`, `"gold"`, `"happy-face"`, `"hashtag"`, `"heart"`, `"help"`, `"hide"`, `"history"`, `"home"`, `"hot"`, `"ignore-reports"`, `"image-post"`, `"inbox"`, `"infinity-12"`, `"infinity"`, `"info"`, `"insert-column-left"`, `"insert-column-right"`, `"insert-row-above"`, `"insert-row-below"`, `"internet"`, `"invite"`, `"italic"`, `"join"`, `"joined"`, `"jump-down"`, `"jump-up"`, `"karma"`, `"keyboard"`, `"keyword"`, `"kick"`, `"language"`, `"leave"`, `"left"`, `"line-graph"`, `"link"`, `"link-post"`, `"list-bulleted"`, `"list-numbered"`, `"live-chat"`, `"live"`, `"load"`, `"location"`, `"lock"`, `"logout"`, `"loop"`, `"macro"`, `"mark-read"`, `"marketplace"`, `"mask"`, `"media-gallery"`, `"meme"`, `"menu"`, `"merge"`, `"message"`, `"mic"`, `"mic-mute"`, `"mod"`, `"mod-mail"`, `"mod-mode"`, `"mod-mute"`, `"mod-overflow"`, `"mod-queue"`, `"mod-unmute"`, `"music"`, `"mute"`, `"neutral-face"`, `"new"`, `"new-guide"`, `"night"`, `"no-internet"`, `"notification"`, `"notification-frequent"`, `"notification-off"`, `"nsfw-alt"`, `"nsfw"`, `"nsfw-language"`, `"nsfw-violence"`, `"official"`, `"original"`, `"overflow-caret"`, `"overflow-horizontal"`, `"overflow-vertical"`, `"partner-community"`, `"pause"`, `"payment"`, `"peace"`, `"pending-posts"`, `"phone"`, `"pin"`, `"planet"`, `"play"`, `"poll-post"`, `"popular"`, `"posts"`, `"powerup"`, `"predictions"`, `"premium"`, `"privacy"`, `"profile"`, `"qa"`, `"qr-code"`, `"quarantined"`, `"quote"`, `"r-slash"`, `"radar"`, `"radio-button"`, `"raise-hand"`, `"random"`, `"ratings-everyone"`, `"ratings-mature"`, `"ratings-nsfw"`, `"ratings-violence"`, `"recovery-phrase"`, `"refresh"`, `"removal-reasons"`, `"remove"`, `"reply"`, `"report"`, `"reverse"`, `"rich-text"`, `"right"`, `"rising"`, `"rotate"`, `"rotate-image"`, `"rpan"`, `"rules"`, `"sad-face"`, `"safari"`, `"save"`, `"save-view"`, `"saved"`, `"saved-response"`, `"search"`, `"self"`, `"send"`, `"settings"`, `"severity"`, `"share-android"`, `"share"`, `"share-ios"`, `"share-new"`, `"show"`, `"side-menu"`, `"skipback10"`, `"skipforward10"`, `"sort-az"`, `"sort"`, `"sort-price"`, `"sort-za"`, `"spam"`, `"spoiler"`, `"sponsored"`, `"spreadsheet"`, `"star"`, `"statistics"`, `"status-live"`, `"sticker"`, `"strikethrough"`, `"subtract"`, `"superscript"`, `"swap-camera"`, `"swipe-back"`, `"swipe-down"`, `"swipe"`, `"swipe-up"`, `"table"`, `"tag"`, `"tap"`, `"telescope"`, `"text"`, `"text-post"`, `"text-size"`, `"thumbs-down"`, `"thumbs-up"`, `"toggle"`, `"tools"`, `"top"`, `"topic-activism"`, `"topic-addictionsupport"`, `"topic-advice"`, `"topic-animals"`, `"topic-anime"`, `"topic-art"`, `"topic-beauty"`, `"topic-business"`, `"topic-careers"`, `"topic-cars"`, `"topic-celebrity"`, `"topic-craftsdiy"`, `"topic-crypto"`, `"topic-culture"`, `"topic-diy"`, `"topic-entertainment"`, `"topic-ethics"`, `"topic-family"`, `"topic-fashion"`, `"topic"`, `"topic-fitness"`, `"topic-food"`, `"topic-funny"`, `"topic-gender"`, `"topic-health"`, `"topic-help"`, `"topic-history"`, `"topic-hobbies"`, `"topic-homegarden"`, `"topic-internet"`, `"topic-law"`, `"topic-learning"`, `"topic-lifestyle"`, `"topic-marketplace"`, `"topic-mature"`, `"topic-mensfashion"`, `"topic-menshealth"`, `"topic-meta"`, `"topic-military"`, `"topic-movies"`, `"topic-music"`, `"topic-news"`, `"topic-other"`, `"topic-outdoors"`, `"topic-pets"`, `"topic-photography"`, `"topic-places"`, `"topic-podcasts"`, `"topic-politics"`, `"topic-programming"`, `"topic-reading"`, `"topic-religion"`, `"topic-science"`, `"topic-sexorientation"`, `"topic-sports"`, `"topic-style"`, `"topic-tabletop"`, `"topic-technology"`, `"topic-television"`, `"topic-traumasupport"`, `"topic-travel"`, `"topic-videogaming"`, `"topic-womensfashion"`, `"topic-womenshealth"`, `"translate"`, `"translation-off"`, `"trim"`, `"u-slash"`, `"unban"`, `"undo"`, `"unheart"`, `"unlock"`, `"unmod"`, `"unpin"`, `"unstar"`, `"unverified"`, `"up-arrow"`, `"up"`, `"upload"`, `"upvote"`, `"upvotes"`, `"user"`, `"user-note"`, `"users"`, `"vault"`, `"verified"`, `"video-camera"`, `"video-feed"`, `"video-live"`, `"video-post"`, `"video-thread"`, `"video-transcription"`, `"view-card"`, `"view-classic"`, `"view-compact"`, `"view-grid"`, `"view-sort"`, `"views"`, `"voiceover"`, `"volume"`, `"wallet"`, `"warning"`, `"webhook"`, `"whale"`, `"wiki-ban"`, `"wiki"`, `"wiki-unban"`, `"world"`, `"coins-color"`, `"powerup-color"`, `"powerup-fill-color"`, `"video-live-1"`, `"video-live-fill-1"`\]
diff --git a/versioned_docs/version-0.13/api/redditapi/README.md b/versioned_docs/version-0.13/api/redditapi/README.md
new file mode 100644
index 00000000..4535c84e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/README.md
@@ -0,0 +1,10 @@
+**@devvit/public-api v0.13.0-dev**
+
+***
+
+# @devvit/public-api v0.13.0-dev
+
+## Modules
+
+- [models](models/README.md)
+- [RedditAPIClient](RedditAPIClient/README.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/README.md b/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/README.md
new file mode 100644
index 00000000..87fddbc4
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/README.md
@@ -0,0 +1,14 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# RedditAPIClient
+
+## Classes
+
+- [RedditAPIClient](classes/RedditAPIClient.md)
+
+## Type Aliases
+
+- [InviteModeratorOptions](type-aliases/InviteModeratorOptions.md)
+- [MuteUserOptions](type-aliases/MuteUserOptions.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/classes/RedditAPIClient.md b/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/classes/RedditAPIClient.md
new file mode 100644
index 00000000..768e02c6
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/classes/RedditAPIClient.md
@@ -0,0 +1,3280 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: RedditAPIClient
+
+The Reddit API Client
+
+To use the Reddit API Client, add it to the plugin configuration at the top of the file.
+
+## Example
+
+```ts
+
+Devvit.configure({
+ redditAPI: true,
+ // other plugins
+})
+
+// use within one of our capability handlers e.g. Menu Actions, Triggers, Scheduled Job Type, etc
+async (event, context) => {
+ const subreddit = await context.reddit.getSubredditById(context.subredditId);
+ context.reddit.submitPost({
+ subredditName: subreddit.name,
+ title: 'test post',
+ text: 'test body',
+ })
+ // additional code
+}
+```
+
+## Constructors
+
+
+
+### new RedditAPIClient()
+
+> **new RedditAPIClient**(`metadata`): `RedditAPIClient`
+
+#### Parameters
+
+##### metadata
+
+`Metadata`
+
+#### Returns
+
+`RedditAPIClient`
+
+## Accessors
+
+
+
+### modMail
+
+#### Get Signature
+
+> **get** **modMail**(): [`ModMailService`](../../models/classes/ModMailService.md)
+
+Get ModMail API object
+
+##### Example
+
+```ts
+await reddit.modMail.reply({
+ body: "Here is my message",
+ conversationId: "abcd42";
+})
+```
+
+##### Returns
+
+[`ModMailService`](../../models/classes/ModMailService.md)
+
+## Methods
+
+
+
+### addEditorToWikiPage()
+
+> **addEditorToWikiPage**(`subredditName`, `page`, `username`): `Promise`\<`void`\>
+
+Add an editor to a wiki page.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit the wiki is in.
+
+##### page
+
+`string`
+
+The name of the wiki page to add the editor to.
+
+##### username
+
+`string`
+
+The username of the user to add as an editor.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### addModNote()
+
+> **addModNote**(`options`): `Promise`\<[`ModNote`](../../models/classes/ModNote.md)\>
+
+Add a mod note.
+
+#### Parameters
+
+##### options
+
+`Prettify`
+
+Options for the request
+
+#### Returns
+
+`Promise`\<[`ModNote`](../../models/classes/ModNote.md)\>
+
+A Promise that resolves if the mod note was successfully added.
+
+***
+
+
+
+### addRemovalNote()
+
+> **addRemovalNote**(`options`): `Promise`\<`void`\>
+
+Add a mod note for why a post or comment was removed
+
+#### Parameters
+
+##### options
+
+`Prettify`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### addSubredditRemovalReason()
+
+> **addSubredditRemovalReason**(`subredditName`, `options`): `Promise`\<`string`\>
+
+Add a removal reason to a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+Name of the subreddit (e.g. `askReddit` or `r/askReddit`).
+
+##### options
+
+Options.
+
+###### message
+
+`string`
+
+The message associated with the removal reason.
+
+###### title
+
+`string`
+
+The title of the removal reason.
+
+#### Returns
+
+`Promise`\<`string`\>
+
+Removal Reason ID
+
+#### Example
+
+```ts
+const newReason = await reddit.addSubredditRemovalReasons(
+ 'askReddit',
+ {
+ title: 'Spam',
+ message: 'This is spam!'
+ }
+);
+console.log(newReason.id)
+```
+
+***
+
+
+
+### addWidget()
+
+> **addWidget**(`widgetData`): `Promise`\<[`Widget`](../../models/classes/Widget.md)\>
+
+Add a widget to a subreddit.
+
+#### Parameters
+
+##### widgetData
+
+[`AddWidgetData`](../../models/type-aliases/AddWidgetData.md)
+
+The data for the widget to add.
+
+#### Returns
+
+`Promise`\<[`Widget`](../../models/classes/Widget.md)\>
+
+- The added Widget object.
+
+***
+
+
+
+### addWikiContributor()
+
+> **addWikiContributor**(`username`, `subredditName`): `Promise`\<`void`\>
+
+Add a user as a wiki contributor for a subreddit.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to add as a wiki contributor. e.g. 'spez'
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to add the user as a wiki contributor. e.g. 'memes'
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### approve()
+
+> **approve**(`id`): `Promise`\<`void`\>
+
+Approve a post or comment.
+
+#### Parameters
+
+##### id
+
+`string`
+
+The id of the post (t3_) or comment (t1_) to approve.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Example
+
+```ts
+await reddit.approve('t3_123456');
+await reddit.approve('t1_123456');
+```
+
+***
+
+
+
+### approveUser()
+
+> **approveUser**(`username`, `subredditName`): `Promise`\<`void`\>
+
+Approve a user to post in a subreddit.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to approve. e.g. 'spez'
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to approve the user in. e.g. 'memes'
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### banUser()
+
+> **banUser**(`options`): `Promise`\<`void`\>
+
+Ban a user from a subreddit.
+
+#### Parameters
+
+##### options
+
+[`BanUserOptions`](../../models/type-aliases/BanUserOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### banWikiContributor()
+
+> **banWikiContributor**(`options`): `Promise`\<`void`\>
+
+Ban a user from contributing to the wiki on a subreddit.
+
+#### Parameters
+
+##### options
+
+[`BanWikiContributorOptions`](../../models/type-aliases/BanWikiContributorOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### createPostFlairTemplate()
+
+> **createPostFlairTemplate**(`options`): `Promise`\<[`FlairTemplate`](../../models/classes/FlairTemplate.md)\>
+
+Create a post flair template for a subreddit.
+
+#### Parameters
+
+##### options
+
+[`CreateFlairTemplateOptions`](../../models/type-aliases/CreateFlairTemplateOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<[`FlairTemplate`](../../models/classes/FlairTemplate.md)\>
+
+The created FlairTemplate object.
+
+***
+
+
+
+### createRule()
+
+> **createRule**(`subredditName`, `options`): `Promise`\<`void`\>
+
+Create a new rule in a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to add the rule to.
+
+##### options
+
+[`CreateRuleOptions`](../../models/type-aliases/CreateRuleOptions.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### createUserFlairTemplate()
+
+> **createUserFlairTemplate**(`options`): `Promise`\<[`FlairTemplate`](../../models/classes/FlairTemplate.md)\>
+
+Create a user flair template for a subreddit.
+
+#### Parameters
+
+##### options
+
+[`CreateFlairTemplateOptions`](../../models/type-aliases/CreateFlairTemplateOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<[`FlairTemplate`](../../models/classes/FlairTemplate.md)\>
+
+The created FlairTemplate object.
+
+***
+
+
+
+### createWikiPage()
+
+> **createWikiPage**(`options`): `Promise`\<[`WikiPage`](../../models/classes/WikiPage.md)\>
+
+Create a new wiki page for a subreddit.
+
+#### Parameters
+
+##### options
+
+[`CreateWikiPageOptions`](../../models/type-aliases/CreateWikiPageOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<[`WikiPage`](../../models/classes/WikiPage.md)\>
+
+- The created WikiPage object.
+
+***
+
+
+
+### crosspost()
+
+> **crosspost**(`options`): `Promise`\<[`Post`](../../models/classes/Post.md)\>
+
+Crossposts a post to a subreddit.
+
+#### Parameters
+
+##### options
+
+[`CrosspostOptions`](../../models/type-aliases/CrosspostOptions.md)
+
+Options for crossposting a post
+
+#### Returns
+
+`Promise`\<[`Post`](../../models/classes/Post.md)\>
+
+- A Promise that resolves to a Post object.
+
+***
+
+
+
+### deleteFlairTemplate()
+
+> **deleteFlairTemplate**(`subredditName`, `flairTemplateId`): `Promise`\<`void`\>
+
+Delete a flair template from a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to delete the flair template from.
+
+##### flairTemplateId
+
+`string`
+
+The ID of the flair template to delete.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### deleteModNote()
+
+> **deleteModNote**(`options`): `Promise`\<`boolean`\>
+
+Delete a mod note.
+
+#### Parameters
+
+##### options
+
+`Prettify`
+
+Options for the request
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+True if it was deleted successfully; false otherwise.
+
+***
+
+
+
+### deleteSubredditRemovalReason()
+
+> **deleteSubredditRemovalReason**(`subredditName`, `reasonId`): `Promise`\<`void`\>
+
+Delete a removal reason from a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+Name of the subreddit (e.g. `askReddit` or `r/askReddit`).
+
+##### reasonId
+
+`string`
+
+ID of the removal reason (from get or add).
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### deleteWidget()
+
+> **deleteWidget**(`subredditName`, `widgetId`): `Promise`\<`void`\>
+
+Delete a widget from a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to delete the widget from.
+
+##### widgetId
+
+`string`
+
+The ID of the widget to delete.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### editFlairTemplate()
+
+> **editFlairTemplate**(`options`): `Promise`\<[`FlairTemplate`](../../models/classes/FlairTemplate.md)\>
+
+Edit a flair template for a subreddit. This can be either a post or user flair template.
+Note: If you leave any of the options fields as undefined, they will reset to their default values.
+
+#### Parameters
+
+##### options
+
+[`EditFlairTemplateOptions`](../../models/type-aliases/EditFlairTemplateOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<[`FlairTemplate`](../../models/classes/FlairTemplate.md)\>
+
+The edited FlairTemplate object.
+
+***
+
+
+
+### getApprovedUsers()
+
+> **getApprovedUsers**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+Get a list of users who have been approved to post in a subreddit.
+
+#### Parameters
+
+##### options
+
+`GetSubredditUsersOptions`
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+A Listing of User objects.
+
+***
+
+
+
+### getAppUser()
+
+> **getAppUser**(): `Promise`\<[`User`](../../models/classes/User.md)\>
+
+Get the user that the app runs as on the provided metadata.
+
+#### Returns
+
+`Promise`\<[`User`](../../models/classes/User.md)\>
+
+A Promise that resolves to a User object.
+
+#### Example
+
+```ts
+const user = await reddit.getAppUser(metadata);
+```
+
+***
+
+
+
+### getBannedUsers()
+
+> **getBannedUsers**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+Get a list of users who are banned from a subreddit.
+
+#### Parameters
+
+##### options
+
+`GetSubredditUsersOptions`
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+A Listing of User objects.
+
+***
+
+
+
+### getBannedWikiContributors()
+
+> **getBannedWikiContributors**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+Get a list of users who are banned from contributing to the wiki on a subreddit.
+
+#### Parameters
+
+##### options
+
+`GetSubredditUsersOptions`
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+A Listing of User objects.
+
+***
+
+
+
+### getBestPosts()
+
+> **getBestPosts**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Get a list of best posts from the front page.
+This method will get the front page for the app account by default.
+To get the front page for a user, please contact Reddit.
+
+#### Parameters
+
+##### options
+
+[`ListingFetchOptions`](../../models/type-aliases/ListingFetchOptions.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+A Listing of Post objects.
+
+#### Example
+
+```ts
+const posts = await reddit.getBestPosts({
+ limit: 1000,
+ pageSize: 100
+}).all();
+```
+
+***
+
+
+
+### getCommentById()
+
+> **getCommentById**(`id`): `Promise`\<[`Comment`](../../models/classes/Comment.md)\>
+
+Get a [Comment](../../models/classes/Comment.md) object by ID
+
+#### Parameters
+
+##### id
+
+`string`
+
+The ID (starting with t1_) of the comment to retrieve. e.g. t1_1qjpg
+
+#### Returns
+
+`Promise`\<[`Comment`](../../models/classes/Comment.md)\>
+
+A Promise that resolves to a Comment object.
+
+#### Example
+
+```ts
+const comment = await reddit.getCommentById('t1_1qjpg');
+```
+
+***
+
+
+
+### getComments()
+
+> **getComments**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+Get a list of comments from a specific post or comment.
+
+#### Parameters
+
+##### options
+
+[`GetCommentsOptions`](../../models/type-aliases/GetCommentsOptions.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+A Listing of Comment objects.
+
+#### Example
+
+```ts
+const comments = await reddit.getComments({
+ postId: 't3_1qjpg',
+ limit: 1000,
+ pageSize: 100
+}).all();
+```
+
+***
+
+
+
+### getCommentsAndPostsByUser()
+
+> **getCommentsAndPostsByUser**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+Get a list of posts and comments from a specific user.
+
+#### Parameters
+
+##### options
+
+[`GetUserOverviewOptions`](../../models/type-aliases/GetUserOverviewOptions.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+A Listing of `Post` and `Comment` objects.
+
+***
+
+
+
+### getCommentsByUser()
+
+> **getCommentsByUser**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+Get a list of comments by a specific user.
+
+#### Parameters
+
+##### options
+
+[`GetCommentsByUserOptions`](../../models/type-aliases/GetCommentsByUserOptions.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+A Listing of Comment objects.
+
+***
+
+
+
+### getControversialPosts()
+
+> **getControversialPosts**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Get a list of controversial posts from a specific subreddit.
+
+#### Parameters
+
+##### options
+
+[`GetPostsOptionsWithTimeframe`](../../models/type-aliases/GetPostsOptionsWithTimeframe.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+A Listing of Post objects.
+
+#### Example
+
+```ts
+const posts = await reddit.getControversialPosts({
+ subredditName: 'memes',
+ timeframe: 'day',
+ limit: 1000,
+ pageSize: 100
+}).all();
+```
+
+***
+
+
+
+### getCurrentSubreddit()
+
+> **getCurrentSubreddit**(): `Promise`\<[`Subreddit`](../../models/classes/Subreddit.md)\>
+
+Retrieves the current subreddit.
+
+#### Returns
+
+`Promise`\<[`Subreddit`](../../models/classes/Subreddit.md)\>
+
+A Promise that resolves a Subreddit object.
+
+#### Example
+
+```ts
+const currentSubreddit = await reddit.getCurrentSubreddit();
+```
+
+***
+
+
+
+### getCurrentSubredditName()
+
+> **getCurrentSubredditName**(): `Promise`\<`string`\>
+
+Retrieves the name of the current subreddit.
+
+#### Returns
+
+`Promise`\<`string`\>
+
+A Promise that resolves a string representing the current subreddit's name.
+
+#### Example
+
+```ts
+const currentSubredditName = await reddit.getCurrentSubredditName();
+```
+
+***
+
+
+
+### getCurrentUser()
+
+> **getCurrentUser**(): `Promise`\<`undefined` \| [`User`](../../models/classes/User.md)\>
+
+Get the current calling user.
+Resolves to undefined for logged-out custom post renders.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`User`](../../models/classes/User.md)\>
+
+A Promise that resolves to a User object or undefined
+
+#### Example
+
+```ts
+const user = await reddit.getCurrentUser();
+```
+
+***
+
+
+
+### getCurrentUsername()
+
+> **getCurrentUsername**(): `Promise`\<`undefined` \| `string`\>
+
+Get the current calling user's username.
+Resolves to undefined for logged-out custom post renders.
+
+#### Returns
+
+`Promise`\<`undefined` \| `string`\>
+
+A Promise that resolves to a string representing the username or undefined
+
+#### Example
+
+```ts
+const username = await reddit.getCurrentUsername();
+```
+
+***
+
+
+
+### getDuplicatesForPost()
+
+> **getDuplicatesForPost**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Get posts that shared the same link as the given post.
+
+#### Parameters
+
+##### options
+
+[`GetDuplicatesOptions`](../../models/type-aliases/GetDuplicatesOptions.md)
+
+Options for the request. Post ID is required, eveything else is optional.
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+A Listing of Post objects.
+
+#### Example
+
+```ts
+const duplicates = await reddit.getDuplicatesForPost({
+ postId: 't3_abc123',
+ sort: 'num_comments',
+ limit: 100
+}).all();
+```
+
+***
+
+
+
+### getEdited()
+
+#### Call Signature
+
+> **getEdited**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+Return a listing of things that have been edited recently.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"comment"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getEdited();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getEdited({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getEdited**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Return a listing of things that have been edited recently.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"post"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getEdited();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getEdited({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getEdited**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+Return a listing of things that have been edited recently.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"all"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getEdited();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getEdited({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+***
+
+
+
+### getHotPosts()
+
+> **getHotPosts**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Get a list of hot posts from a specific subreddit.
+
+#### Parameters
+
+##### options
+
+[`GetHotPostsOptions`](../../models/type-aliases/GetHotPostsOptions.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+A Listing of Post objects.
+
+#### Example
+
+```ts
+const posts = await reddit.getHotPosts({
+ subredditName: 'memes',
+ timeframe: 'day',
+ limit: 1000,
+ pageSize: 100
+}).all();
+```
+
+***
+
+
+
+### getMessages()
+
+> **getMessages**(`options`): `Promise`\<[`Listing`](../../models/classes/Listing.md)\<[`PrivateMessage`](../../models/classes/PrivateMessage.md)\>\>
+
+Get private messages sent to the currently authenticated user.
+
+#### Parameters
+
+##### options
+
+`Prettify`
+
+Options for the request
+
+#### Returns
+
+`Promise`\<[`Listing`](../../models/classes/Listing.md)\<[`PrivateMessage`](../../models/classes/PrivateMessage.md)\>\>
+
+***
+
+
+
+### getModerationLog()
+
+> **getModerationLog**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`ModAction`](../../models/interfaces/ModAction.md)\>
+
+Get the moderation log for a subreddit.
+
+#### Parameters
+
+##### options
+
+[`GetModerationLogOptions`](../../models/type-aliases/GetModerationLogOptions.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`ModAction`](../../models/interfaces/ModAction.md)\>
+
+A Listing of ModAction objects.
+
+#### Example
+
+```ts
+const modActions = await reddit.getModerationLog({
+ subredditName: 'memes',
+ moderatorUsernames: ['spez'],
+ type: 'banuser',
+ limit: 1000,
+ pageSize: 100
+}).all();
+```
+
+***
+
+
+
+### getModerators()
+
+> **getModerators**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+Get a list of users who are moderators for a subreddit.
+
+#### Parameters
+
+##### options
+
+`GetSubredditUsersOptions`
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+A Listing of User objects.
+
+***
+
+
+
+### getModNotes()
+
+> **getModNotes**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`ModNote`](../../models/classes/ModNote.md)\>
+
+Get a list of mod notes related to a user in a subreddit.
+
+#### Parameters
+
+##### options
+
+`Prettify`
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`ModNote`](../../models/classes/ModNote.md)\>
+
+A listing of ModNote objects.
+
+***
+
+
+
+### getModQueue()
+
+#### Call Signature
+
+> **getModQueue**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+Return a listing of things requiring moderator review, such as reported things and items.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"comment"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getModQueue();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getModQueue({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getModQueue**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Return a listing of things requiring moderator review, such as reported things and items.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"post"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getModQueue();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getModQueue({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getModQueue**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+Return a listing of things requiring moderator review, such as reported things and items.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"all"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getModQueue();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getModQueue({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+***
+
+
+
+### getMutedUsers()
+
+> **getMutedUsers**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+Get a list of users who are muted in a subreddit.
+
+#### Parameters
+
+##### options
+
+`GetSubredditUsersOptions`
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+A listing of User objects.
+
+***
+
+
+
+### getNewPosts()
+
+> **getNewPosts**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Get a list of new posts from a specific subreddit.
+
+#### Parameters
+
+##### options
+
+[`GetPostsOptions`](../../models/type-aliases/GetPostsOptions.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+A Listing of Post objects.
+
+#### Example
+
+```ts
+const posts = await reddit.getNewPosts({
+ subredditName: 'memes',
+ limit: 1000,
+ pageSize: 100
+}).all();
+```
+
+***
+
+
+
+### getPostById()
+
+> **getPostById**(`id`): `Promise`\<[`Post`](../../models/classes/Post.md)\>
+
+Gets a [Post](../../models/classes/Post.md) object by ID
+
+#### Parameters
+
+##### id
+
+`string`
+
+#### Returns
+
+`Promise`\<[`Post`](../../models/classes/Post.md)\>
+
+A Promise that resolves to a Post object.
+
+***
+
+
+
+### getPostFlairTemplates()
+
+> **getPostFlairTemplates**(`subredditName`): `Promise`\<[`FlairTemplate`](../../models/classes/FlairTemplate.md)[]\>
+
+Get the list of post flair templates for a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to get the post flair templates for.
+
+#### Returns
+
+`Promise`\<[`FlairTemplate`](../../models/classes/FlairTemplate.md)[]\>
+
+A Promise that resolves with an array of FlairTemplate objects.
+
+***
+
+
+
+### getPostsByUser()
+
+> **getPostsByUser**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Get a list of posts from a specific user.
+
+#### Parameters
+
+##### options
+
+[`GetPostsByUserOptions`](../../models/type-aliases/GetPostsByUserOptions.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+A Listing of Post objects.
+
+***
+
+
+
+### getReports()
+
+#### Call Signature
+
+> **getReports**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+Return a listing of things that have been reported.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"comment"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getReports();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getReports({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getReports**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Return a listing of things that have been reported.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"post"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getReports();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getReports({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getReports**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+Return a listing of things that have been reported.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"all"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getReports();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getReports({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+***
+
+
+
+### getRisingPosts()
+
+> **getRisingPosts**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Get a list of hot posts from a specific subreddit.
+
+#### Parameters
+
+##### options
+
+[`GetPostsOptions`](../../models/type-aliases/GetPostsOptions.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+A Listing of Post objects.
+
+#### Example
+
+```ts
+const posts = await reddit.getRisingPosts({
+ subredditName: 'memes',
+ timeframe: 'day',
+ limit: 1000,
+ pageSize: 100
+}).all();
+```
+
+***
+
+
+
+### getRules()
+
+> **getRules**(`subredditName`): `Promise`\<[`Rule`](../../models/classes/Rule.md)[]\>
+
+Get the rules for a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to get the rules for.
+
+#### Returns
+
+`Promise`\<[`Rule`](../../models/classes/Rule.md)[]\>
+
+An array of Rule objects.
+
+***
+
+
+
+### getSnoovatarUrl()
+
+> **getSnoovatarUrl**(`username`): `Promise`\<`undefined` \| `string`\>
+
+Get the snoovatar URL for a given username.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the snoovatar to retrieve
+
+#### Returns
+
+`Promise`\<`undefined` \| `string`\>
+
+A Promise that resolves to a URL of the snoovatar image if it exists.
+
+***
+
+
+
+### getSpam()
+
+#### Call Signature
+
+> **getSpam**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+Return a listing of things that have been marked as spam or otherwise removed.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"comment"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getSpam();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getSpam({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getSpam**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Return a listing of things that have been marked as spam or otherwise removed.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"post"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getSpam();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getSpam({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getSpam**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+Return a listing of things that have been marked as spam or otherwise removed.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"all"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getSpam();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getSpam({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+***
+
+
+
+### ~~getSubredditById()~~
+
+> **getSubredditById**(`id`): `Promise`\<`undefined` \| [`Subreddit`](../../models/classes/Subreddit.md)\>
+
+Gets a [Subreddit](../../models/classes/Subreddit.md) object by ID
+
+#### Parameters
+
+##### id
+
+`string`
+
+The ID (starting with t5_) of the subreddit to retrieve. e.g. t5_2qjpg
+
+#### Returns
+
+`Promise`\<`undefined` \| [`Subreddit`](../../models/classes/Subreddit.md)\>
+
+A Promise that resolves a Subreddit object.
+
+#### Deprecated
+
+Use [getSubredditInfoById](../../models/functions/getSubredditInfoById.md) instead.
+
+#### Example
+
+```ts
+const memes = await reddit.getSubredditById('t5_2qjpg');
+```
+
+***
+
+
+
+### ~~getSubredditByName()~~
+
+> **getSubredditByName**(`name`): `Promise`\<[`Subreddit`](../../models/classes/Subreddit.md)\>
+
+Gets a [Subreddit](../../models/classes/Subreddit.md) object by name
+
+#### Parameters
+
+##### name
+
+`string`
+
+The name of a subreddit omitting the r/. This is case insensitive.
+
+#### Returns
+
+`Promise`\<[`Subreddit`](../../models/classes/Subreddit.md)\>
+
+A Promise that resolves a Subreddit object.
+
+#### Deprecated
+
+Use [getSubredditInfoByName](../../models/functions/getSubredditInfoByName.md) instead.
+
+#### Example
+
+```ts
+const askReddit = await reddit.getSubredditByName('askReddit');
+```
+
+***
+
+
+
+### getSubredditInfoById()
+
+> **getSubredditInfoById**(`id`): `Promise`\<[`SubredditInfo`](../../models/type-aliases/SubredditInfo.md)\>
+
+Gets a [SubredditInfo](../../models/type-aliases/SubredditInfo.md) object by ID
+
+#### Parameters
+
+##### id
+
+`string`
+
+The ID (starting with t5_) of the subreddit to retrieve. e.g. t5_2qjpg
+
+#### Returns
+
+`Promise`\<[`SubredditInfo`](../../models/type-aliases/SubredditInfo.md)\>
+
+A Promise that resolves a SubredditInfo object.
+
+#### Example
+
+```ts
+const memes = await reddit.getSubredditInfoById('t5_2qjpg');
+```
+
+***
+
+
+
+### getSubredditInfoByName()
+
+> **getSubredditInfoByName**(`name`): `Promise`\<[`SubredditInfo`](../../models/type-aliases/SubredditInfo.md)\>
+
+Gets a [SubredditInfo](../../models/type-aliases/SubredditInfo.md) object by name
+
+#### Parameters
+
+##### name
+
+`string`
+
+The name of a subreddit omitting the r/. This is case insensitive.
+
+#### Returns
+
+`Promise`\<[`SubredditInfo`](../../models/type-aliases/SubredditInfo.md)\>
+
+A Promise that resolves a SubredditInfo object.
+
+#### Example
+
+```ts
+const askReddit = await reddit.getSubredditInfoByName('askReddit');
+```
+
+***
+
+
+
+### getSubredditLeaderboard()
+
+> **getSubredditLeaderboard**(`subredditId`): `Promise`\<[`SubredditLeaderboard`](../../models/type-aliases/SubredditLeaderboard.md)\>
+
+Returns a leaderboard for a given subreddit ID.
+
+#### Parameters
+
+##### subredditId
+
+`string`
+
+ID of the subreddit for which the leaderboard is being queried.
+
+#### Returns
+
+`Promise`\<[`SubredditLeaderboard`](../../models/type-aliases/SubredditLeaderboard.md)\>
+
+Leaderboard for the given subreddit.
+
+***
+
+
+
+### getSubredditRemovalReasons()
+
+> **getSubredditRemovalReasons**(`subredditName`): `Promise`\<[`RemovalReason`](../../models/type-aliases/RemovalReason.md)[]\>
+
+Get the list of subreddit's removal reasons (ordered).
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+Name of the subreddit (e.g. `askReddit` or `r/askReddit`).
+
+#### Returns
+
+`Promise`\<[`RemovalReason`](../../models/type-aliases/RemovalReason.md)[]\>
+
+Ordered array of plain removal reason objects.
+
+#### Example
+
+```ts
+const reasons = await reddit.getSubredditRemovalReasons('askReddit');
+const sub = await reddit.getSubredditByName('askReddit');
+for (const reason of reasons) {
+ console.log(reason.id, reason.message, reason.title);
+ await sub.updateRemovalReason(reason.id, { title: 'Spam', message: 'Updated.' });
+ await sub.deleteRemovalReason(reason.id);
+}
+```
+
+***
+
+
+
+### getSubredditStyles()
+
+> **getSubredditStyles**(`subredditId`): `Promise`\<[`SubredditStyles`](../../models/type-aliases/SubredditStyles.md)\>
+
+Returns the styles for a given subreddit ID.
+
+#### Parameters
+
+##### subredditId
+
+`string`
+
+ID of the subreddit from which to retrieve the styles.
+
+#### Returns
+
+`Promise`\<[`SubredditStyles`](../../models/type-aliases/SubredditStyles.md)\>
+
+Styles for the given subreddit.
+
+***
+
+
+
+### getTopPosts()
+
+> **getTopPosts**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Get a list of controversial posts from a specific subreddit.
+
+#### Parameters
+
+##### options
+
+[`GetPostsOptionsWithTimeframe`](../../models/type-aliases/GetPostsOptionsWithTimeframe.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+A Listing of Post objects.
+
+#### Example
+
+```ts
+const posts = await reddit.getControversialPosts({
+ subredditName: 'memes',
+ timeframe: 'day',
+ limit: 1000,
+ pageSize: 100
+}).all();
+```
+
+***
+
+
+
+### getUnmoderated()
+
+#### Call Signature
+
+> **getUnmoderated**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+Return a listing of things that have yet to be approved/removed by a mod.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"comment"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Comment`](../../models/classes/Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getUnmoderated();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getUnmoderated({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getUnmoderated**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+Return a listing of things that have yet to be approved/removed by a mod.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"post"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getUnmoderated();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getUnmoderated({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getUnmoderated**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+Return a listing of things that have yet to be approved/removed by a mod.
+
+##### Parameters
+
+###### options
+
+[`ModLogOptions`](../../models/type-aliases/ModLogOptions.md)\<`"all"`\>
+
+##### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`Post`](../../models/classes/Post.md) \| [`Comment`](../../models/classes/Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getUnmoderated();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getUnmoderated({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+***
+
+
+
+### getUserById()
+
+> **getUserById**(`id`): `Promise`\<`undefined` \| [`User`](../../models/classes/User.md)\>
+
+Gets a [User](../../models/classes/User.md) object by ID
+
+#### Parameters
+
+##### id
+
+`string`
+
+The ID (starting with t2_) of the user to retrieve. e.g. t2_1qjpg
+
+#### Returns
+
+`Promise`\<`undefined` \| [`User`](../../models/classes/User.md)\>
+
+A Promise that resolves to a User object.
+
+#### Example
+
+```ts
+const user = await reddit.getUserById('t2_1qjpg');
+```
+
+***
+
+
+
+### getUserByUsername()
+
+> **getUserByUsername**(`username`): `Promise`\<`undefined` \| [`User`](../../models/classes/User.md)\>
+
+Gets a [User](../../models/classes/User.md) object by username
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user omitting the u/. e.g. 'devvit'
+
+#### Returns
+
+`Promise`\<`undefined` \| [`User`](../../models/classes/User.md)\>
+
+A Promise that resolves to a User object or undefined if user is
+ not found (user doesn't exist, account suspended, etc).
+
+#### Example
+
+```ts
+const user = await reddit.getUserByUsername('devvit');
+if (user) {
+ console.log(user)
+}
+```
+
+***
+
+
+
+### getUserFlairTemplates()
+
+> **getUserFlairTemplates**(`subredditName`): `Promise`\<[`FlairTemplate`](../../models/classes/FlairTemplate.md)[]\>
+
+Get the list of user flair templates for a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to get the user flair templates for.
+
+#### Returns
+
+`Promise`\<[`FlairTemplate`](../../models/classes/FlairTemplate.md)[]\>
+
+A Promise that resolves with an array of FlairTemplate objects.
+
+***
+
+
+
+### getUserKarmaFromCurrentSubreddit()
+
+> **getUserKarmaFromCurrentSubreddit**(`username`): `Promise`\<`GetUserKarmaForSubredditResponse`\>
+
+Returns the karma for a given user in the current subreddit.
+The user making the request must be a moderator of the subreddit to read another user's karma in the subreddit.
+An exception is if the specified user is the same as the user making the request.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to get the karma for. e.g. 'spez'
+
+#### Returns
+
+`Promise`\<`GetUserKarmaForSubredditResponse`\>
+
+The GetUserKarmaForSubredditResponse, containing the user's karma for posts and comments in the subreddit.
+
+***
+
+
+
+### getVaultByAddress()
+
+> **getVaultByAddress**(`address`): `Promise`\<[`Vault`](../../models/type-aliases/Vault.md)\>
+
+Gets a [Vault](../../models/type-aliases/Vault.md) for the specified address.
+
+#### Parameters
+
+##### address
+
+`string`
+
+The address (starting with 0x) of the Vault.
+
+#### Returns
+
+`Promise`\<[`Vault`](../../models/type-aliases/Vault.md)\>
+
+#### Example
+
+```ts
+const vault = await reddit.getVaultByAddress('0x205ee28744456bDBf180A0Fa7De51e0F116d54Ed');
+```
+
+***
+
+
+
+### getVaultByUserId()
+
+> **getVaultByUserId**(`userId`): `Promise`\<[`Vault`](../../models/type-aliases/Vault.md)\>
+
+Gets a [Vault](../../models/type-aliases/Vault.md) for the specified user.
+
+#### Parameters
+
+##### userId
+
+`string`
+
+The ID (starting with t2_) of the Vault owner.
+
+#### Returns
+
+`Promise`\<[`Vault`](../../models/type-aliases/Vault.md)\>
+
+#### Example
+
+```ts
+const vault = await reddit.getVaultByUserId('t2_1w72');
+```
+
+***
+
+
+
+### getWidgets()
+
+> **getWidgets**(`subredditName`): `Promise`\<[`Widget`](../../models/classes/Widget.md)[]\>
+
+Get the widgets for a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to get the widgets for.
+
+#### Returns
+
+`Promise`\<[`Widget`](../../models/classes/Widget.md)[]\>
+
+- An array of Widget objects.
+
+***
+
+
+
+### getWikiContributors()
+
+> **getWikiContributors**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+Get a list of users who are wiki contributors of a subreddit.
+
+#### Parameters
+
+##### options
+
+`GetSubredditUsersOptions`
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`User`](../../models/classes/User.md)\>
+
+A Listing of User objects.
+
+***
+
+
+
+### getWikiPage()
+
+> **getWikiPage**(`subredditName`, `page`, `revisionId`?): `Promise`\<[`WikiPage`](../../models/classes/WikiPage.md)\>
+
+Get a wiki page from a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to get the wiki page from.
+
+##### page
+
+`string`
+
+The name of the wiki page to get.
+
+##### revisionId?
+
+`` `${string}-${string}-${string}-${string}-${string}` ``
+
+The revision ID of the wiki page version to get. Setting this value will return the wiki page
+version at that revision, and leaving it empty will return the latest version.
+
+#### Returns
+
+`Promise`\<[`WikiPage`](../../models/classes/WikiPage.md)\>
+
+The requested WikiPage object.
+
+***
+
+
+
+### getWikiPageRevisions()
+
+> **getWikiPageRevisions**(`options`): [`Listing`](../../models/classes/Listing.md)\<[`WikiPageRevision`](../../models/classes/WikiPageRevision.md)\>
+
+Get the revisions for a wiki page.
+
+#### Parameters
+
+##### options
+
+[`GetPageRevisionsOptions`](../../models/type-aliases/GetPageRevisionsOptions.md)
+
+Options for the request
+
+#### Returns
+
+[`Listing`](../../models/classes/Listing.md)\<[`WikiPageRevision`](../../models/classes/WikiPageRevision.md)\>
+
+A Listing of WikiPageRevision objects.
+
+***
+
+
+
+### getWikiPages()
+
+> **getWikiPages**(`subredditName`): `Promise`\<`string`[]\>
+
+Get the wiki pages for a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to get the wiki pages from.
+
+#### Returns
+
+`Promise`\<`string`[]\>
+
+A list of the wiki page names for the subreddit.
+
+***
+
+
+
+### getWikiPageSettings()
+
+> **getWikiPageSettings**(`subredditName`, `page`): `Promise`\<[`WikiPageSettings`](../../models/classes/WikiPageSettings.md)\>
+
+Get the settings for a wiki page.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit the wiki is in.
+
+##### page
+
+`string`
+
+The name of the wiki page to get the settings for.
+
+#### Returns
+
+`Promise`\<[`WikiPageSettings`](../../models/classes/WikiPageSettings.md)\>
+
+A WikiPageSettings object.
+
+***
+
+
+
+### inviteModerator()
+
+> **inviteModerator**(`options`): `Promise`\<`void`\>
+
+Invite a user to become a moderator of a subreddit.
+
+#### Parameters
+
+##### options
+
+[`InviteModeratorOptions`](../type-aliases/InviteModeratorOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### markAllMessagesAsRead()
+
+> **markAllMessagesAsRead**(): `Promise`\<`void`\>
+
+Mark all private messages as read.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### muteUser()
+
+> **muteUser**(`options`): `Promise`\<`void`\>
+
+Mute a user in a subreddit. Muting a user prevents them from sending modmail.
+
+#### Parameters
+
+##### options
+
+[`MuteUserOptions`](../type-aliases/MuteUserOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### remove()
+
+> **remove**(`id`, `isSpam`): `Promise`\<`void`\>
+
+Remove a post or comment.
+
+#### Parameters
+
+##### id
+
+`string`
+
+The id of the post (t3_) or comment (t1_) to remove.
+
+##### isSpam
+
+`boolean`
+
+Is the post or comment being removed because it's spam?
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Example
+
+```ts
+await reddit.remove('t3_123456', false);
+await reddit.remove('t1_123456', true);
+```
+
+***
+
+
+
+### removeEditorFromWikiPage()
+
+> **removeEditorFromWikiPage**(`subredditName`, `page`, `username`): `Promise`\<`void`\>
+
+Remove an editor from a wiki page.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit the wiki is in.
+
+##### page
+
+`string`
+
+The name of the wiki page to remove the editor from.
+
+##### username
+
+`string`
+
+The username of the user to remove as an editor.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### removeModerator()
+
+> **removeModerator**(`username`, `subredditName`): `Promise`\<`void`\>
+
+Remove a user as a moderator of a subreddit.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to remove as a moderator. e.g. 'spez'
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to remove the user as a moderator from. e.g. 'memes'
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### removePostFlair()
+
+> **removePostFlair**(`subredditName`, `postId`): `Promise`\<`void`\>
+
+Remove the flair for a post in a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to remove the flair from.
+
+##### postId
+
+`string`
+
+The ID of the post to remove the flair from.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### removeUser()
+
+> **removeUser**(`username`, `subredditName`): `Promise`\<`void`\>
+
+Remove a user's approval to post in a subreddit.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to remove approval from. e.g. 'spez'
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to remove the user's approval from. e.g. 'memes'
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### removeUserFlair()
+
+> **removeUserFlair**(`subredditName`, `username`): `Promise`\<`void`\>
+
+Remove the flair for a user in a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to remove the flair from.
+
+##### username
+
+`string`
+
+The username of the user to remove the flair from.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### removeWikiContributor()
+
+> **removeWikiContributor**(`username`, `subredditName`): `Promise`\<`void`\>
+
+Remove a user's wiki contributor status for a subreddit.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to remove wiki contributor status from. e.g. 'spez'
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to remove the user's wiki contributor status from. e.g. 'memes'
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### reorderRules()
+
+> **reorderRules**(`subredditName`, `rules`): `Promise`\<`void`\>
+
+Reorder the rules in a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to reorder the rules for.
+
+##### rules
+
+[`Rule`](../../models/classes/Rule.md)[]
+
+Array of Rule objects in the desired order (order is determined by array position).
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### reorderWidgets()
+
+> **reorderWidgets**(`subredditName`, `orderByIds`): `Promise`\<`void`\>
+
+Reorder the widgets for a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to reorder the widgets for.
+
+##### orderByIds
+
+`string`[]
+
+An array of widget IDs in the order that they should be displayed.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### report()
+
+> **report**(`thing`, `options`): `Promise`\<`JsonStatus`\>
+
+Report a Post or Comment
+
+The report is sent to the moderators of the subreddit for review.
+
+#### Parameters
+
+##### thing
+
+Post or Comment
+
+[`Post`](../../models/classes/Post.md) | [`Comment`](../../models/classes/Comment.md)
+
+##### options
+
+Options
+
+###### reason
+
+`string`
+
+Why the thing is reported
+
+#### Returns
+
+`Promise`\<`JsonStatus`\>
+
+#### Example
+
+```ts
+await reddit.report(post, {
+ reason: 'This is spam!',
+})
+```
+
+***
+
+
+
+### revertWikiPage()
+
+> **revertWikiPage**(`subredditName`, `page`, `revisionId`): `Promise`\<`void`\>
+
+Revert a wiki page to a previous revision.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit the wiki is in.
+
+##### page
+
+`string`
+
+The name of the wiki page to revert.
+
+##### revisionId
+
+`string`
+
+The ID of the revision to revert to.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### revokeModeratorInvite()
+
+> **revokeModeratorInvite**(`username`, `subredditName`): `Promise`\<`void`\>
+
+Revoke a moderator invite for a user to a subreddit.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to revoke the invite for. e.g. 'spez'
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to revoke the invite for. e.g. 'memes'
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### sendPrivateMessage()
+
+> **sendPrivateMessage**(`options`): `Promise`\<`void`\>
+
+Sends a private message to a user.
+
+#### Parameters
+
+##### options
+
+[`SendPrivateMessageOptions`](../../models/type-aliases/SendPrivateMessageOptions.md)
+
+The options for sending the message.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves if the private message was successfully sent.
+
+***
+
+
+
+### ~~sendPrivateMessageAsSubreddit()~~
+
+> **sendPrivateMessageAsSubreddit**(`options`): `Promise`\<`void`\>
+
+Sends a private message to a user on behalf of a subreddit.
+
+#### Parameters
+
+##### options
+
+[`SendPrivateMessageAsSubredditOptions`](../../models/type-aliases/SendPrivateMessageAsSubredditOptions.md)
+
+The options for sending the message as a subreddit.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves if the private message was successfully sent.
+
+#### Deprecated
+
+No longer working as expected. Use modMail.createConversation with `isAuthorHidden: true` instead
+
+***
+
+
+
+### setModeratorPermissions()
+
+> **setModeratorPermissions**(`username`, `subredditName`, `permissions`): `Promise`\<`void`\>
+
+Update the permissions of a moderator of a subreddit.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to update the permissions for. e.g. 'spez'
+
+##### subredditName
+
+`string`
+
+The name of the subreddit. e.g. 'memes'
+
+##### permissions
+
+[`ModeratorPermission`](../../models/type-aliases/ModeratorPermission.md)[]
+
+The permissions to give the user. e.g ['posts', 'wiki']
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### setPostFlair()
+
+> **setPostFlair**(`options`): `Promise`\<`void`\>
+
+Set the flair for a post in a subreddit.
+
+#### Parameters
+
+##### options
+
+[`SetPostFlairOptions`](../../models/type-aliases/SetPostFlairOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### setUserFlair()
+
+> **setUserFlair**(`options`): `Promise`\<`void`\>
+
+Set the flair for a user in a subreddit.
+
+#### Parameters
+
+##### options
+
+[`SetUserFlairOptions`](../../models/type-aliases/SetUserFlairOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### setUserFlairBatch()
+
+> **setUserFlairBatch**(`subredditName`, `flairs`): `Promise`\<`FlairCsvResult`[]\>
+
+Set the flair of multiple users in the same subreddit with a single API call.
+Can process up to 100 entries at once.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to edit flairs in.
+
+##### flairs
+
+[`SetUserFlairBatchConfig`](../../models/type-aliases/SetUserFlairBatchConfig.md)[]
+
+Array of user flair configuration objects. If both text and cssClass are empty for a given user the flair will be cleared.
+
+#### Returns
+
+`Promise`\<`FlairCsvResult`[]\>
+
+- Array of statuses for each entry provided.
+
+***
+
+
+
+### submitComment()
+
+> **submitComment**(`options`): `Promise`\<[`Comment`](../../models/classes/Comment.md)\>
+
+Submit a new comment to a post or comment.
+
+#### Parameters
+
+##### options
+
+[`CommentSubmissionOptions`](../../models/type-aliases/CommentSubmissionOptions.md) & `object`
+
+You must provide either `options.text` or `options.richtext` but not both.
+
+#### Returns
+
+`Promise`\<[`Comment`](../../models/classes/Comment.md)\>
+
+A Promise that resolves to a Comment object.
+
+#### Example
+
+```ts
+import { RunAs } from '@devvit/public-api';
+
+const comment = await reddit.submitComment({
+ id: 't1_1qgif',
+ text: 'Hello world!',
+ runAs: RunAs.APP,
+})
+```
+
+***
+
+
+
+### submitPost()
+
+> **submitPost**(`options`): `Promise`\<[`Post`](../../models/classes/Post.md)\>
+
+Submits a new post to a subreddit.
+
+#### Parameters
+
+##### options
+
+[`SubmitPostOptions`](../../models/type-aliases/SubmitPostOptions.md)
+
+Either a self post or a link post.
+
+#### Returns
+
+`Promise`\<[`Post`](../../models/classes/Post.md)\>
+
+A Promise that resolves to a Post object.
+
+#### Examples
+
+```ts
+const post = await reddit.submitPost({
+ subredditName: 'devvit',
+ title: 'Hello World',
+ richtext: new RichTextBuilder()
+ .heading({ level: 1 }, (h) => {
+ h.rawText('Hello world');
+ })
+ .codeBlock({}, (cb) => cb.rawText('This post was created via the Devvit API'))
+ .build()
+});
+```
+
+By default, `submitPost()` creates a Post on behalf of the App account, but it may be called on behalf of the User making the request by setting the option `runAs: RunAs.USER`.
+When using `runAs: RunAs.USER` to create an experience Post, you must specify the `userGeneratedContent` option. For example:
+
+```ts
+import { RunAs } from '@devvit/public-api';
+
+const post = await reddit.submitPost({
+ title: 'My Devvit Post',
+ runAs: RunAs.USER,
+ userGeneratedContent: {
+ text: "hello there",
+ imageUrls: ["https://styles.redditmedia.com/t5_5wa5ww/styles/communityIcon_wyopomb2xb0a1.png", "https://styles.redditmedia.com/t5_49fkib/styles/bannerBackgroundImage_5a4axis7cku61.png"]
+ },
+ subredditName: await reddit.getCurrentSubredditName(),
+ textFallback: {
+ text: 'This is a Devvit post!',
+ },
+ preview: (
+
+ Loading...
+
+ ),
+});
+```
+
+***
+
+
+
+### subscribeToCurrentSubreddit()
+
+> **subscribeToCurrentSubreddit**(): `Promise`\<`void`\>
+
+Subscribes to the subreddit in which the app is installed. No-op if the user is already subscribed.
+This method will execute as the app account by default.
+To subscribe on behalf of a user, please contact Reddit.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unbanUser()
+
+> **unbanUser**(`username`, `subredditName`): `Promise`\<`void`\>
+
+Unban a user from a subreddit.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to unban. e.g. 'spez'
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to unban the user from. e.g. 'memes'
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unbanWikiContributor()
+
+> **unbanWikiContributor**(`username`, `subredditName`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to unban. e.g. 'spez'
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to unban the user from contributing to the wiki on. e.g. 'memes'
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unmuteUser()
+
+> **unmuteUser**(`username`, `subredditName`): `Promise`\<`void`\>
+
+Unmute a user in a subreddit. Unmuting a user allows them to send modmail.
+
+#### Parameters
+
+##### username
+
+`string`
+
+The username of the user to unmute. e.g. 'spez'
+
+##### subredditName
+
+`string`
+
+The name of the subreddit to unmute the user in. e.g. 'memes'
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unsubscribeFromCurrentSubreddit()
+
+> **unsubscribeFromCurrentSubreddit**(): `Promise`\<`void`\>
+
+Unsubscribes from the subreddit in which the app is installed. No-op if the user isn't subscribed.
+This method will execute as the app account by default.
+To unsubscribe on behalf of a user, please contact Reddit.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### updateSubredditRemovalReason()
+
+> **updateSubredditRemovalReason**(`subredditName`, `reasonId`, `options`): `Promise`\<`void`\>
+
+Update an existing removal reason in a subreddit.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+Name of the subreddit (e.g. `askReddit` or `r/askReddit`).
+
+##### reasonId
+
+`string`
+
+ID of the removal reason (from get or add).
+
+##### options
+
+###### message
+
+`string`
+
+The message associated with the removal reason.
+
+###### title
+
+`string`
+
+The title of the removal reason.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### updateWidget()
+
+> **updateWidget**(`widgetData`): `Promise`\<[`Widget`](../../models/classes/Widget.md)\>
+
+Update a widget for a subreddit.
+
+#### Parameters
+
+##### widgetData
+
+[`UpdateWidgetData`](../../models/type-aliases/UpdateWidgetData.md)
+
+The data for the widget to update.
+
+#### Returns
+
+`Promise`\<[`Widget`](../../models/classes/Widget.md)\>
+
+- The updated Widget object.
+
+***
+
+
+
+### updateWikiPage()
+
+> **updateWikiPage**(`options`): `Promise`\<[`WikiPage`](../../models/classes/WikiPage.md)\>
+
+Update a wiki page.
+
+#### Parameters
+
+##### options
+
+[`UpdateWikiPageOptions`](../../models/type-aliases/UpdateWikiPageOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<[`WikiPage`](../../models/classes/WikiPage.md)\>
+
+The updated WikiPage object.
+
+***
+
+
+
+### updateWikiPageSettings()
+
+> **updateWikiPageSettings**(`options`): `Promise`\<[`WikiPageSettings`](../../models/classes/WikiPageSettings.md)\>
+
+Update the settings for a wiki page.
+
+#### Parameters
+
+##### options
+
+[`UpdatePageSettingsOptions`](../../models/type-aliases/UpdatePageSettingsOptions.md)
+
+Options for the request
+
+#### Returns
+
+`Promise`\<[`WikiPageSettings`](../../models/classes/WikiPageSettings.md)\>
+
+A WikiPageSettings object.
diff --git a/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/type-aliases/InviteModeratorOptions.md b/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/type-aliases/InviteModeratorOptions.md
new file mode 100644
index 00000000..27d387aa
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/type-aliases/InviteModeratorOptions.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: InviteModeratorOptions
+
+> **InviteModeratorOptions** = `object`
+
+## Properties
+
+
+
+### permissions?
+
+> `optional` **permissions**: [`ModeratorPermission`](../../models/type-aliases/ModeratorPermission.md)[]
+
+The permissions to grant the user
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+The name of the subreddit to invite the user to moderate
+
+***
+
+
+
+### username
+
+> **username**: `string`
+
+The name of the user to invite as a moderator
diff --git a/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/type-aliases/MuteUserOptions.md b/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/type-aliases/MuteUserOptions.md
new file mode 100644
index 00000000..4a00457f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/RedditAPIClient/type-aliases/MuteUserOptions.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: MuteUserOptions
+
+> **MuteUserOptions** = `object`
+
+## Properties
+
+
+
+### note?
+
+> `optional` **note**: `string`
+
+A mod note on why the user was muted. (optional)
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+The name of the subreddit to mute the user in
+
+***
+
+
+
+### username
+
+> **username**: `string`
+
+The name of the user to mute
diff --git a/versioned_docs/version-0.13/api/redditapi/models/README.md b/versioned_docs/version-0.13/api/redditapi/models/README.md
new file mode 100644
index 00000000..8eca2230
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/README.md
@@ -0,0 +1,189 @@
+[**@devvit/public-api v0.13.0-dev**](../README.md)
+
+***
+
+# models
+
+## Enumerations
+
+- [AboutLocations](enumerations/AboutLocations.md)
+- [FlairType](enumerations/FlairType.md)
+- [ModMailActionType](enumerations/ModMailActionType.md)
+- [ModMailConversationState](enumerations/ModMailConversationState.md)
+- [SocialLinkType](enumerations/SocialLinkType.md)
+- [WikiPagePermissionLevel](enumerations/WikiPagePermissionLevel.md)
+
+## Classes
+
+- [AuthorFlairSettings](classes/AuthorFlairSettings.md)
+- [ButtonWidget](classes/ButtonWidget.md)
+- [CalendarWidget](classes/CalendarWidget.md)
+- [Comment](classes/Comment.md)
+- [CommunityListWidget](classes/CommunityListWidget.md)
+- [CustomWidget](classes/CustomWidget.md)
+- [Flair](classes/Flair.md)
+- [FlairTemplate](classes/FlairTemplate.md)
+- [ImageWidget](classes/ImageWidget.md)
+- [Listing](classes/Listing.md)
+- [ModMailService](classes/ModMailService.md)
+- [ModNote](classes/ModNote.md)
+- [Post](classes/Post.md)
+- [PostFlairSettings](classes/PostFlairSettings.md)
+- [PostFlairWidget](classes/PostFlairWidget.md)
+- [PrivateMessage](classes/PrivateMessage.md)
+- [Rule](classes/Rule.md)
+- [Subreddit](classes/Subreddit.md)
+- [SubredditDescription](classes/SubredditDescription.md)
+- [SubredditRulesWidget](classes/SubredditRulesWidget.md)
+- [SubredditWikiSettings](classes/SubredditWikiSettings.md)
+- [TextAreaWidget](classes/TextAreaWidget.md)
+- [User](classes/User.md)
+- [Widget](classes/Widget.md)
+- [WikiPage](classes/WikiPage.md)
+- [WikiPageRevision](classes/WikiPageRevision.md)
+- [WikiPageSettings](classes/WikiPageSettings.md)
+
+## Interfaces
+
+- [ModAction](interfaces/ModAction.md)
+
+## Type Aliases
+
+- [AboutSubredditTypes](type-aliases/AboutSubredditTypes.md)
+- [AddRemovalNoteOptions](type-aliases/AddRemovalNoteOptions.md)
+- [AddWidgetData](type-aliases/AddWidgetData.md)
+- [AllowableFlairContent](type-aliases/AllowableFlairContent.md)
+- [BackgroundImagePosition](type-aliases/BackgroundImagePosition.md)
+- [BannerHeight](type-aliases/BannerHeight.md)
+- [BanUserOptions](type-aliases/BanUserOptions.md)
+- [BanWikiContributorOptions](type-aliases/BanWikiContributorOptions.md)
+- [CommentMediaTypes](type-aliases/CommentMediaTypes.md)
+- [CommentSort](type-aliases/CommentSort.md)
+- [CommentSubmissionOptions](type-aliases/CommentSubmissionOptions.md)
+- [CommonFlair](type-aliases/CommonFlair.md)
+- [CommonSubmitPostOptions](type-aliases/CommonSubmitPostOptions.md)
+- [CommunityNameFormat](type-aliases/CommunityNameFormat.md)
+- [ConversationData](type-aliases/ConversationData.md)
+- [ConversationResponse](type-aliases/ConversationResponse.md)
+- [ConversationStateFilter](type-aliases/ConversationStateFilter.md)
+- [ConversationUserData](type-aliases/ConversationUserData.md)
+- [CreateFlairTemplateOptions](type-aliases/CreateFlairTemplateOptions.md)
+- [CreateModNoteOptions](type-aliases/CreateModNoteOptions.md)
+- [CreateRelationshipOptions](type-aliases/CreateRelationshipOptions.md)
+- [CreateRuleOptions](type-aliases/CreateRuleOptions.md)
+- [CreateWikiPageOptions](type-aliases/CreateWikiPageOptions.md)
+- [CrosspostOptions](type-aliases/CrosspostOptions.md)
+- [CrowdControlLevel](type-aliases/CrowdControlLevel.md)
+- [CustomizationFlag](type-aliases/CustomizationFlag.md)
+- [CustomPostRichTextFallback](type-aliases/CustomPostRichTextFallback.md)
+- [CustomPostTextFallbackOptions](type-aliases/CustomPostTextFallbackOptions.md)
+- [DeleteNotesOptions](type-aliases/DeleteNotesOptions.md)
+- [EditCommentOptions](type-aliases/EditCommentOptions.md)
+- [EditFlairTemplateOptions](type-aliases/EditFlairTemplateOptions.md)
+- [EnrichedThumbnail](type-aliases/EnrichedThumbnail.md)
+- [FlairBackgroundColor](type-aliases/FlairBackgroundColor.md)
+- [FlairSettings](type-aliases/FlairSettings.md)
+- [FlairTextColor](type-aliases/FlairTextColor.md)
+- [GalleryMedia](type-aliases/GalleryMedia.md)
+- [GalleryMediaStatus](type-aliases/GalleryMediaStatus.md)
+- [GetBestPostsOptions](type-aliases/GetBestPostsOptions.md)
+- [GetCommentsByUserOptions](type-aliases/GetCommentsByUserOptions.md)
+- [GetCommentsOptions](type-aliases/GetCommentsOptions.md)
+- [GetConversationResponse](type-aliases/GetConversationResponse.md)
+- [GetConversationsRequest](type-aliases/GetConversationsRequest.md)
+- [GetConversationsResponse](type-aliases/GetConversationsResponse.md)
+- [GetDuplicatesOptions](type-aliases/GetDuplicatesOptions.md)
+- [GetHotPostsOptions](type-aliases/GetHotPostsOptions.md)
+- [GetModerationLogOptions](type-aliases/GetModerationLogOptions.md)
+- [GetModNotesOptions](type-aliases/GetModNotesOptions.md)
+- [GetPageRevisionsOptions](type-aliases/GetPageRevisionsOptions.md)
+- [GetPostsByUserOptions](type-aliases/GetPostsByUserOptions.md)
+- [GetPostsOptions](type-aliases/GetPostsOptions.md)
+- [GetPostsOptionsWithTimeframe](type-aliases/GetPostsOptionsWithTimeframe.md)
+- [GetPrivateMessagesOptions](type-aliases/GetPrivateMessagesOptions.md)
+- [GetSortedPostsOptions](type-aliases/GetSortedPostsOptions.md)
+- [GetSubredditUsersByTypeOptions](type-aliases/GetSubredditUsersByTypeOptions.md)
+- [GetUserFlairBySubredditOptions](type-aliases/GetUserFlairBySubredditOptions.md)
+- [GetUserFlairBySubredditResponse](type-aliases/GetUserFlairBySubredditResponse.md)
+- [GetUserFlairOptions](type-aliases/GetUserFlairOptions.md)
+- [GetUserOverviewOptions](type-aliases/GetUserOverviewOptions.md)
+- [ImagePosition](type-aliases/ImagePosition.md)
+- [InternalSetPostFlairOptions](type-aliases/InternalSetPostFlairOptions.md)
+- [~~LinkFlair~~](type-aliases/LinkFlair.md)
+- [ListingFetchOptions](type-aliases/ListingFetchOptions.md)
+- [ListingFetchResponse](type-aliases/ListingFetchResponse.md)
+- [MenuPosition](type-aliases/MenuPosition.md)
+- [MessageData](type-aliases/MessageData.md)
+- [ModActionData](type-aliases/ModActionData.md)
+- [ModActionTarget](type-aliases/ModActionTarget.md)
+- [ModActionType](type-aliases/ModActionType.md)
+- [ModeratorPermission](type-aliases/ModeratorPermission.md)
+- [ModLogOptions](type-aliases/ModLogOptions.md)
+- [ModNoteType](type-aliases/ModNoteType.md)
+- [MoreObject](type-aliases/MoreObject.md)
+- [OEmbed](type-aliases/OEmbed.md)
+- [Participant](type-aliases/Participant.md)
+- [PollData](type-aliases/PollData.md)
+- [PollOption](type-aliases/PollOption.md)
+- [PositionedImagePosition](type-aliases/PositionedImagePosition.md)
+- [PostCapabilities](type-aliases/PostCapabilities.md)
+- [PostSuggestedCommentSort](type-aliases/PostSuggestedCommentSort.md)
+- [PostTextOptions](type-aliases/PostTextOptions.md)
+- [PostType](type-aliases/PostType.md)
+- [RedditVideo](type-aliases/RedditVideo.md)
+- [RelationshipType](type-aliases/RelationshipType.md)
+- [RemovalReason](type-aliases/RemovalReason.md)
+- [RemoveRelationshipOptions](type-aliases/RemoveRelationshipOptions.md)
+- [ReplyToCommentOptions](type-aliases/ReplyToCommentOptions.md)
+- [SecureMedia](type-aliases/SecureMedia.md)
+- [SendPrivateMessageAsSubredditOptions](type-aliases/SendPrivateMessageAsSubredditOptions.md)
+- [SendPrivateMessageOptions](type-aliases/SendPrivateMessageOptions.md)
+- [SetFlairOptions](type-aliases/SetFlairOptions.md)
+- [SetPostFlairOptions](type-aliases/SetPostFlairOptions.md)
+- [SetUserFlairBatchConfig](type-aliases/SetUserFlairBatchConfig.md)
+- [SetUserFlairOptions](type-aliases/SetUserFlairOptions.md)
+- [SubmitCustomPostOptions](type-aliases/SubmitCustomPostOptions.md)
+- [SubmitCustomPostTextFallbackOptions](type-aliases/SubmitCustomPostTextFallbackOptions.md)
+- [SubmitLinkOptions](type-aliases/SubmitLinkOptions.md)
+- [SubmitMediaOptions](type-aliases/SubmitMediaOptions.md)
+- [SubmitPostOptions](type-aliases/SubmitPostOptions.md)
+- [SubmitSelfPostOptions](type-aliases/SubmitSelfPostOptions.md)
+- [SubredditData](type-aliases/SubredditData.md)
+- [SubredditInfo](type-aliases/SubredditInfo.md)
+- [SubredditLeaderboard](type-aliases/SubredditLeaderboard.md)
+- [SubredditLeaderboardSummary](type-aliases/SubredditLeaderboardSummary.md)
+- [SubredditLeaderboardSummaryRow](type-aliases/SubredditLeaderboardSummaryRow.md)
+- [SubredditSettings](type-aliases/SubredditSettings.md)
+- [SubredditSettingsOptions](type-aliases/SubredditSettingsOptions.md)
+- [SubredditStyles](type-aliases/SubredditStyles.md)
+- [SubredditType](type-aliases/SubredditType.md)
+- [Trophy](type-aliases/Trophy.md)
+- [UnreadCountResponse](type-aliases/UnreadCountResponse.md)
+- [UpdatePageSettingsOptions](type-aliases/UpdatePageSettingsOptions.md)
+- [UpdateRuleOptions](type-aliases/UpdateRuleOptions.md)
+- [UpdateWidgetData](type-aliases/UpdateWidgetData.md)
+- [UpdateWikiPageOptions](type-aliases/UpdateWikiPageOptions.md)
+- [UserFlair](type-aliases/UserFlair.md)
+- [UserFlairPageOptions](type-aliases/UserFlairPageOptions.md)
+- [UserNote](type-aliases/UserNote.md)
+- [UserNoteLabel](type-aliases/UserNoteLabel.md)
+- [UserSocialLink](type-aliases/UserSocialLink.md)
+- [Vault](type-aliases/Vault.md)
+- [Visibility](type-aliases/Visibility.md)
+- [WikiEditMode](type-aliases/WikiEditMode.md)
+- [WikiPageRevisionId](type-aliases/WikiPageRevisionId.md)
+- [WithUserData](type-aliases/WithUserData.md)
+
+## Variables
+
+- [GalleryMediaStatus](variables/GalleryMediaStatus.md)
+
+## Functions
+
+- [getModerationLog](functions/getModerationLog.md)
+- [getSubredditInfoById](functions/getSubredditInfoById.md)
+- [getSubredditInfoByName](functions/getSubredditInfoByName.md)
+- [getSubredditLeaderboard](functions/getSubredditLeaderboard.md)
+- [getSubredditStyles](functions/getSubredditStyles.md)
+- [getVaultByAddress](functions/getVaultByAddress.md)
+- [getVaultByUserId](functions/getVaultByUserId.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/AuthorFlairSettings.md b/versioned_docs/version-0.13/api/redditapi/models/classes/AuthorFlairSettings.md
new file mode 100644
index 00000000..0735bcb5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/AuthorFlairSettings.md
@@ -0,0 +1,33 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: AuthorFlairSettings
+
+## Constructors
+
+
+
+### new AuthorFlairSettings()
+
+> **new AuthorFlairSettings**(): `AuthorFlairSettings`
+
+#### Returns
+
+`AuthorFlairSettings`
+
+## Properties
+
+
+
+### isEnabled?
+
+> `optional` **isEnabled**: `boolean`
+
+***
+
+
+
+### isSelfAssignabled?
+
+> `optional` **isSelfAssignabled**: `boolean`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/ButtonWidget.md b/versioned_docs/version-0.13/api/redditapi/models/classes/ButtonWidget.md
new file mode 100644
index 00000000..15e17d7b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/ButtonWidget.md
@@ -0,0 +1,167 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: ButtonWidget
+
+## Extends
+
+- [`Widget`](Widget.md)
+
+## Constructors
+
+
+
+### new ButtonWidget()
+
+> **new ButtonWidget**(`widgetData`, `subredditName`, `metadata`): `ButtonWidget`
+
+#### Parameters
+
+##### widgetData
+
+`GetWidgetsResponse_WidgetItem`
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`ButtonWidget`
+
+#### Overrides
+
+[`Widget`](Widget.md).[`constructor`](Widget.md#constructor)
+
+## Accessors
+
+
+
+### buttons
+
+#### Get Signature
+
+> **get** **buttons**(): `WidgetButton`[]
+
+##### Returns
+
+`WidgetButton`[]
+
+***
+
+
+
+### description
+
+#### Get Signature
+
+> **get** **description**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`id`](Widget.md#id)
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`name`](Widget.md#name)
+
+***
+
+
+
+### styles
+
+#### Get Signature
+
+> **get** **styles**(): `WidgetStyles`
+
+##### Returns
+
+`WidgetStyles`
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`subredditName`](Widget.md#subredditname)
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`delete`](Widget.md#delete)
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`ButtonWidget`, `"description"` \| `"styles"` \| `"buttons"`\>
+
+#### Returns
+
+`Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`ButtonWidget`, `"description"` \| `"styles"` \| `"buttons"`\>
+
+#### Overrides
+
+[`Widget`](Widget.md).[`toJSON`](Widget.md#tojson)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/CalendarWidget.md b/versioned_docs/version-0.13/api/redditapi/models/classes/CalendarWidget.md
new file mode 100644
index 00000000..fa085814
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/CalendarWidget.md
@@ -0,0 +1,167 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: CalendarWidget
+
+## Extends
+
+- [`Widget`](Widget.md)
+
+## Constructors
+
+
+
+### new CalendarWidget()
+
+> **new CalendarWidget**(`widgetData`, `subredditName`, `metadata`): `CalendarWidget`
+
+#### Parameters
+
+##### widgetData
+
+`GetWidgetsResponse_WidgetItem`
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`CalendarWidget`
+
+#### Overrides
+
+[`Widget`](Widget.md).[`constructor`](Widget.md#constructor)
+
+## Accessors
+
+
+
+### configuration
+
+#### Get Signature
+
+> **get** **configuration**(): `CalendarWidgetConfiguration`
+
+##### Returns
+
+`CalendarWidgetConfiguration`
+
+***
+
+
+
+### googleCalendarId
+
+#### Get Signature
+
+> **get** **googleCalendarId**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`id`](Widget.md#id)
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`name`](Widget.md#name)
+
+***
+
+
+
+### styles
+
+#### Get Signature
+
+> **get** **styles**(): `WidgetStyles`
+
+##### Returns
+
+`WidgetStyles`
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`subredditName`](Widget.md#subredditname)
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`delete`](Widget.md#delete)
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`CalendarWidget`, `"googleCalendarId"` \| `"configuration"` \| `"styles"`\>
+
+#### Returns
+
+`Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`CalendarWidget`, `"googleCalendarId"` \| `"configuration"` \| `"styles"`\>
+
+#### Overrides
+
+[`Widget`](Widget.md).[`toJSON`](Widget.md#tojson)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/Comment.md b/versioned_docs/version-0.13/api/redditapi/models/classes/Comment.md
new file mode 100644
index 00000000..4602e576
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/Comment.md
@@ -0,0 +1,784 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: Comment
+
+## Accessors
+
+
+
+### approved
+
+#### Get Signature
+
+> **get** **approved**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### approvedAtUtc
+
+#### Get Signature
+
+> **get** **approvedAtUtc**(): `number`
+
+A number representing the UTC timestamp in seconds, or 0 if its not approved.
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### authorFlair
+
+#### Get Signature
+
+> **get** **authorFlair**(): `undefined` \| [`CommonFlair`](../type-aliases/CommonFlair.md)
+
+##### Returns
+
+`undefined` \| [`CommonFlair`](../type-aliases/CommonFlair.md)
+
+***
+
+
+
+### authorId
+
+#### Get Signature
+
+> **get** **authorId**(): `undefined` \| `` `t2_${string}` ``
+
+##### Returns
+
+`undefined` \| `` `t2_${string}` ``
+
+***
+
+
+
+### authorName
+
+#### Get Signature
+
+> **get** **authorName**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### bannedAtUtc
+
+#### Get Signature
+
+> **get** **bannedAtUtc**(): `number`
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### body
+
+#### Get Signature
+
+> **get** **body**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### collapsedBecauseCrowdControl
+
+#### Get Signature
+
+> **get** **collapsedBecauseCrowdControl**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### createdAt
+
+#### Get Signature
+
+> **get** **createdAt**(): `Date`
+
+##### Returns
+
+`Date`
+
+***
+
+
+
+### distinguishedBy
+
+#### Get Signature
+
+> **get** **distinguishedBy**(): `undefined` \| `string`
+
+##### Returns
+
+`undefined` \| `string`
+
+***
+
+
+
+### edited
+
+#### Get Signature
+
+> **get** **edited**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `` `t1_${string}` ``
+
+##### Returns
+
+`` `t1_${string}` ``
+
+***
+
+
+
+### ignoringReports
+
+#### Get Signature
+
+> **get** **ignoringReports**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### locked
+
+#### Get Signature
+
+> **get** **locked**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### modReportReasons
+
+#### Get Signature
+
+> **get** **modReportReasons**(): `string`[]
+
+##### Returns
+
+`string`[]
+
+***
+
+
+
+### numReports
+
+#### Get Signature
+
+> **get** **numReports**(): `number`
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### parentId
+
+#### Get Signature
+
+> **get** **parentId**(): `` `t1_${string}` `` \| `` `t3_${string}` ``
+
+##### Returns
+
+`` `t1_${string}` `` \| `` `t3_${string}` ``
+
+***
+
+
+
+### permalink
+
+#### Get Signature
+
+> **get** **permalink**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### postId
+
+#### Get Signature
+
+> **get** **postId**(): `` `t3_${string}` ``
+
+##### Returns
+
+`` `t3_${string}` ``
+
+***
+
+
+
+### removed
+
+#### Get Signature
+
+> **get** **removed**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### replies
+
+#### Get Signature
+
+> **get** **replies**(): [`Listing`](Listing.md)\<`Comment`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<`Comment`\>
+
+***
+
+
+
+### score
+
+#### Get Signature
+
+> **get** **score**(): `number`
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### spam
+
+#### Get Signature
+
+> **get** **spam**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### stickied
+
+#### Get Signature
+
+> **get** **stickied**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### subredditId
+
+#### Get Signature
+
+> **get** **subredditId**(): `` `t5_${string}` ``
+
+##### Returns
+
+`` `t5_${string}` ``
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### url
+
+#### Get Signature
+
+> **get** **url**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### userReportReasons
+
+#### Get Signature
+
+> **get** **userReportReasons**(): `string`[]
+
+##### Returns
+
+`string`[]
+
+## Methods
+
+
+
+### addRemovalNote()
+
+> **addRemovalNote**(`options`): `Promise`\<`void`\>
+
+Add a mod note for why the comment was removed
+
+#### Parameters
+
+##### options
+
+###### modNote?
+
+`string`
+
+the reason for removal (maximum 100 characters) (optional)
+
+###### reasonId
+
+`string`
+
+id of a Removal Reason - you can leave this as an empty string if you don't have one
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### approve()
+
+> **approve**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### distinguish()
+
+> **distinguish**(`makeSticky`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### makeSticky
+
+`boolean` = `false`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### distinguishAsAdmin()
+
+> **distinguishAsAdmin**(`makeSticky`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### makeSticky
+
+`boolean` = `false`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### edit()
+
+> **edit**(`options`): `Promise`\<`Comment`\>
+
+#### Parameters
+
+##### options
+
+[`CommentSubmissionOptions`](../type-aliases/CommentSubmissionOptions.md)
+
+#### Returns
+
+`Promise`\<`Comment`\>
+
+***
+
+
+
+### getAuthor()
+
+> **getAuthor**(): `Promise`\<`undefined` \| [`User`](User.md)\>
+
+#### Returns
+
+`Promise`\<`undefined` \| [`User`](User.md)\>
+
+***
+
+
+
+### ignoreReports()
+
+> **ignoreReports**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### isApproved()
+
+> **isApproved**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isDistinguished()
+
+> **isDistinguished**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isEdited()
+
+> **isEdited**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isIgnoringReports()
+
+> **isIgnoringReports**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isLocked()
+
+> **isLocked**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isRemoved()
+
+> **isRemoved**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isSpam()
+
+> **isSpam**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isStickied()
+
+> **isStickied**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### lock()
+
+> **lock**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### remove()
+
+> **remove**(`isSpam`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### isSpam
+
+`boolean` = `false`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### reply()
+
+> **reply**(`options`): `Promise`\<`Comment`\>
+
+#### Parameters
+
+##### options
+
+[`CommentSubmissionOptions`](../type-aliases/CommentSubmissionOptions.md)
+
+#### Returns
+
+`Promise`\<`Comment`\>
+
+***
+
+
+
+### showComment()
+
+> **showComment**(): `Promise`\<`void`\>
+
+Marks that this comment should not be collapsed by the crowd control system.
+It can still be collapsed for other reasons.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### snoozeReports()
+
+> **snoozeReports**(`reason`): `Promise`\<`void`\>
+
+Snooze subsequent reports with the given reason from the same users for the next 7 days.
+Only works for free-form reports.
+
+#### Parameters
+
+##### reason
+
+`string`
+
+The report reason to snooze.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<`Comment`, `"subredditName"` \| `"id"` \| `"score"` \| `"subredditId"` \| `"postId"` \| `"url"` \| `"createdAt"` \| `"permalink"` \| `"authorName"` \| `"body"` \| `"approved"` \| `"spam"` \| `"stickied"` \| `"removed"` \| `"edited"` \| `"locked"` \| `"ignoringReports"` \| `"distinguishedBy"` \| `"authorFlair"` \| `"userReportReasons"` \| `"modReportReasons"` \| `"parentId"` \| `"replies"` \| `"numReports"` \| `"collapsedBecauseCrowdControl"`\>
+
+#### Returns
+
+`Pick`\<`Comment`, `"subredditName"` \| `"id"` \| `"score"` \| `"subredditId"` \| `"postId"` \| `"url"` \| `"createdAt"` \| `"permalink"` \| `"authorName"` \| `"body"` \| `"approved"` \| `"spam"` \| `"stickied"` \| `"removed"` \| `"edited"` \| `"locked"` \| `"ignoringReports"` \| `"distinguishedBy"` \| `"authorFlair"` \| `"userReportReasons"` \| `"modReportReasons"` \| `"parentId"` \| `"replies"` \| `"numReports"` \| `"collapsedBecauseCrowdControl"`\>
+
+***
+
+
+
+### undistinguish()
+
+> **undistinguish**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unignoreReports()
+
+> **unignoreReports**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unlock()
+
+> **unlock**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unsnoozeReports()
+
+> **unsnoozeReports**(`reason`): `Promise`\<`void`\>
+
+Unsnooze reports with the given reason.
+Only works for free-form reports.
+
+#### Parameters
+
+##### reason
+
+`string`
+
+The report reason to unsnooze.
+
+#### Returns
+
+`Promise`\<`void`\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/CommunityListWidget.md b/versioned_docs/version-0.13/api/redditapi/models/classes/CommunityListWidget.md
new file mode 100644
index 00000000..0c4410a8
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/CommunityListWidget.md
@@ -0,0 +1,153 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: CommunityListWidget
+
+## Extends
+
+- [`Widget`](Widget.md)
+
+## Constructors
+
+
+
+### new CommunityListWidget()
+
+> **new CommunityListWidget**(`widgetData`, `subredditName`, `metadata`): `CommunityListWidget`
+
+#### Parameters
+
+##### widgetData
+
+`GetWidgetsResponse_WidgetItem`
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`CommunityListWidget`
+
+#### Overrides
+
+[`Widget`](Widget.md).[`constructor`](Widget.md#constructor)
+
+## Accessors
+
+
+
+### communities
+
+#### Get Signature
+
+> **get** **communities**(): `CommunityListWidget_CommunityData`[]
+
+##### Returns
+
+`CommunityListWidget_CommunityData`[]
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`id`](Widget.md#id)
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`name`](Widget.md#name)
+
+***
+
+
+
+### styles
+
+#### Get Signature
+
+> **get** **styles**(): `WidgetStyles`
+
+##### Returns
+
+`WidgetStyles`
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`subredditName`](Widget.md#subredditname)
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`delete`](Widget.md#delete)
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`CommunityListWidget`, `"communities"` \| `"styles"`\>
+
+#### Returns
+
+`Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`CommunityListWidget`, `"communities"` \| `"styles"`\>
+
+#### Overrides
+
+[`Widget`](Widget.md).[`toJSON`](Widget.md#tojson)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/CustomWidget.md b/versioned_docs/version-0.13/api/redditapi/models/classes/CustomWidget.md
new file mode 100644
index 00000000..6cbcda2b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/CustomWidget.md
@@ -0,0 +1,195 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: CustomWidget
+
+## Extends
+
+- [`Widget`](Widget.md)
+
+## Constructors
+
+
+
+### new CustomWidget()
+
+> **new CustomWidget**(`widgetData`, `subredditName`, `metadata`): `CustomWidget`
+
+#### Parameters
+
+##### widgetData
+
+`GetWidgetsResponse_WidgetItem`
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`CustomWidget`
+
+#### Overrides
+
+[`Widget`](Widget.md).[`constructor`](Widget.md#constructor)
+
+## Accessors
+
+
+
+### css
+
+#### Get Signature
+
+> **get** **css**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### height
+
+#### Get Signature
+
+> **get** **height**(): `number`
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`id`](Widget.md#id)
+
+***
+
+
+
+### images
+
+#### Get Signature
+
+> **get** **images**(): `WidgetImage`[]
+
+##### Returns
+
+`WidgetImage`[]
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`name`](Widget.md#name)
+
+***
+
+
+
+### stylesheetUrl
+
+#### Get Signature
+
+> **get** **stylesheetUrl**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`subredditName`](Widget.md#subredditname)
+
+***
+
+
+
+### text
+
+#### Get Signature
+
+> **get** **text**(): `string`
+
+##### Returns
+
+`string`
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`delete`](Widget.md#delete)
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`CustomWidget`, `"text"` \| `"height"` \| `"images"` \| `"stylesheetUrl"` \| `"css"`\>
+
+#### Returns
+
+`Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`CustomWidget`, `"text"` \| `"height"` \| `"images"` \| `"stylesheetUrl"` \| `"css"`\>
+
+#### Overrides
+
+[`Widget`](Widget.md).[`toJSON`](Widget.md#tojson)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/Flair.md b/versioned_docs/version-0.13/api/redditapi/models/classes/Flair.md
new file mode 100644
index 00000000..6b3458de
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/Flair.md
@@ -0,0 +1,17 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: Flair
+
+## Constructors
+
+
+
+### new Flair()
+
+> **new Flair**(): `Flair`
+
+#### Returns
+
+`Flair`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/FlairTemplate.md b/versioned_docs/version-0.13/api/redditapi/models/classes/FlairTemplate.md
new file mode 100644
index 00000000..bb582cbe
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/FlairTemplate.md
@@ -0,0 +1,167 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: FlairTemplate
+
+## Accessors
+
+
+
+### allowableContent
+
+#### Get Signature
+
+> **get** **allowableContent**(): [`AllowableFlairContent`](../type-aliases/AllowableFlairContent.md)
+
+The flair template's allowable content. Either 'all', 'emoji', or 'text'.
+
+##### Returns
+
+[`AllowableFlairContent`](../type-aliases/AllowableFlairContent.md)
+
+***
+
+
+
+### allowUserEdits
+
+#### Get Signature
+
+> **get** **allowUserEdits**(): `boolean`
+
+Does the flair template allow users to edit their flair?
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### backgroundColor
+
+#### Get Signature
+
+> **get** **backgroundColor**(): [`FlairBackgroundColor`](../type-aliases/FlairBackgroundColor.md)
+
+The flair template's background color. Either 'transparent' or a hex color code. e.g. #FFC0CB
+
+##### Returns
+
+[`FlairBackgroundColor`](../type-aliases/FlairBackgroundColor.md)
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+The flair template's ID
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### maxEmojis
+
+#### Get Signature
+
+> **get** **maxEmojis**(): `number`
+
+The flair template's maximum number of emojis.
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### modOnly
+
+#### Get Signature
+
+> **get** **modOnly**(): `boolean`
+
+Is the flair template only available to moderators?
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### text
+
+#### Get Signature
+
+> **get** **text**(): `string`
+
+The flair template's text
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### textColor
+
+#### Get Signature
+
+> **get** **textColor**(): [`FlairTextColor`](../type-aliases/FlairTextColor.md)
+
+The flair template's text color. Either 'dark' or 'light'.
+
+##### Returns
+
+[`FlairTextColor`](../type-aliases/FlairTextColor.md)
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+Delete this flair template
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### edit()
+
+> **edit**(`options`): `Promise`\<`FlairTemplate`\>
+
+Edit this flair template
+
+#### Parameters
+
+##### options
+
+`Partial`\<`Omit`\<[`EditFlairTemplateOptions`](../type-aliases/EditFlairTemplateOptions.md), `"subredditName"` \| `"id"`\>\>
+
+#### Returns
+
+`Promise`\<`FlairTemplate`\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/ImageWidget.md b/versioned_docs/version-0.13/api/redditapi/models/classes/ImageWidget.md
new file mode 100644
index 00000000..1c592629
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/ImageWidget.md
@@ -0,0 +1,139 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: ImageWidget
+
+## Extends
+
+- [`Widget`](Widget.md)
+
+## Constructors
+
+
+
+### new ImageWidget()
+
+> **new ImageWidget**(`widgetData`, `subredditName`, `metadata`): `ImageWidget`
+
+#### Parameters
+
+##### widgetData
+
+`GetWidgetsResponse_WidgetItem`
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`ImageWidget`
+
+#### Overrides
+
+[`Widget`](Widget.md).[`constructor`](Widget.md#constructor)
+
+## Accessors
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`id`](Widget.md#id)
+
+***
+
+
+
+### images
+
+#### Get Signature
+
+> **get** **images**(): `WidgetImage`[]
+
+##### Returns
+
+`WidgetImage`[]
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`name`](Widget.md#name)
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`subredditName`](Widget.md#subredditname)
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`delete`](Widget.md#delete)
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`ImageWidget`, `"images"`\>
+
+#### Returns
+
+`Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`ImageWidget`, `"images"`\>
+
+#### Overrides
+
+[`Widget`](Widget.md).[`toJSON`](Widget.md#tojson)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/Listing.md b/versioned_docs/version-0.13/api/redditapi/models/classes/Listing.md
new file mode 100644
index 00000000..760c5286
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/Listing.md
@@ -0,0 +1,113 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: Listing\
+
+## Type Parameters
+
+### T
+
+`T`
+
+## Properties
+
+
+
+### limit
+
+> **limit**: `number` = `DEFAULT_LIMIT`
+
+***
+
+
+
+### pageSize
+
+> **pageSize**: `number` = `DEFAULT_PAGE_SIZE`
+
+## Accessors
+
+
+
+### hasMore
+
+#### Get Signature
+
+> **get** **hasMore**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+## Methods
+
+
+
+### \[asyncIterator\]()
+
+> **\[asyncIterator\]**(): `AsyncIterator`\<`T`\>
+
+#### Returns
+
+`AsyncIterator`\<`T`\>
+
+***
+
+
+
+### all()
+
+> **all**(): `Promise`\<`T`[]\>
+
+#### Returns
+
+`Promise`\<`T`[]\>
+
+***
+
+
+
+### get()
+
+> **get**(`count`): `Promise`\<`T`[]\>
+
+#### Parameters
+
+##### count
+
+`number`
+
+#### Returns
+
+`Promise`\<`T`[]\>
+
+***
+
+
+
+### preventInitialFetch()
+
+> **preventInitialFetch**(): `void`
+
+#### Returns
+
+`void`
+
+***
+
+
+
+### setMore()
+
+> **setMore**(`more`): `void`
+
+#### Parameters
+
+##### more
+
+`undefined` | [`MoreObject`](../type-aliases/MoreObject.md)
+
+#### Returns
+
+`void`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/ModMailService.md b/versioned_docs/version-0.13/api/redditapi/models/classes/ModMailService.md
new file mode 100644
index 00000000..b93a3d6f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/ModMailService.md
@@ -0,0 +1,808 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: ModMailService
+
+Class providing the methods for working with Mod Mail
+
+## Properties
+
+
+
+### notificationSubjectPrefix
+
+> `readonly` **notificationSubjectPrefix**: `"[notification]"` = `'[notification]'`
+
+## Methods
+
+
+
+### approveConversation()
+
+> **approveConversation**(`conversationId`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+Approve the non mod user associated with a particular conversation.
+
+#### Parameters
+
+##### conversationId
+
+`string`
+
+Id of a modmail conversation
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.approveConversation('abcdef');
+```
+
+***
+
+
+
+### archiveConversation()
+
+> **archiveConversation**(`conversationId`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md)\>
+
+Marks a conversation as archived
+
+#### Parameters
+
+##### conversationId
+
+`string`
+
+Id of a modmail conversation
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.archive('abcdef');
+```
+
+***
+
+
+
+### bulkReadConversations()
+
+> **bulkReadConversations**(`subreddits`, `state`): `Promise`\<`string`[]\>
+
+Marks all conversations read for a particular conversation state within the passed list of subreddits.
+
+#### Parameters
+
+##### subreddits
+
+`string`[]
+
+Array of subreddit names
+
+##### state
+
+[`ConversationStateFilter`](../type-aliases/ConversationStateFilter.md)
+
+One of the possible conversation states ('all' to read all conversations)
+
+#### Returns
+
+`Promise`\<`string`[]\>
+
+conversationIds
+
+#### Example
+
+```ts
+const conversationIds = await reddit.modMail.bulkReadConversations(
+ ['askReddit', 'myAwesomeSubreddit'],
+ 'filtered'
+);
+```
+
+***
+
+
+
+### createConversation()
+
+> **createConversation**(`params`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+Creates a new conversation for a particular SR.
+
+This endpoint will create a ModmailConversation object
+as well as the first ModmailMessage within the ModmailConversation object.
+
+#### Parameters
+
+##### params
+
+###### body
+
+`string`
+
+markdown text
+
+###### isAuthorHidden?
+
+`boolean`
+
+is author hidden? (default: false)
+
+###### subject
+
+`string`
+
+subject of the conversation. max 100 characters
+
+###### subredditName
+
+`string`
+
+subreddit name
+
+###### to?
+
+`null` \| `string`
+
+a user (e.g. u/username), a subreddit (e.g. r/subreddit) or null
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+#### Note
+
+Note on {param.to}:
+The to field for this endpoint is somewhat confusing. It can be:
+- A User, passed like "username" or "u/username"
+- A Subreddit, passed like "r/subreddit"
+- null, meaning an internal moderator discussion
+
+In this way to is a bit of a misnomer in modmail conversations.
+What it really means is the participant of the conversation who is not a mod of the subreddit.
+
+If you plan to send a message to the app-account or a moderator of the subreddit, use [ModMailService.createModDiscussionConversation](#createmoddiscussionconversation), [ModMailService.createModInboxConversation](#createmodinboxconversation), or [ModMailService.createModNotification](#createmodnotification) instead.
+Otherwise, messages sent to the app-account or moderator will automatically be routed to Mod Discussions.
+
+#### Example
+
+```ts
+const { conversation, messages, modActions } = await reddit.modMail.createConversation({
+ subredditName: 'askReddit',
+ subject: 'Test conversation',
+ body: 'Lorem ipsum sit amet',
+ to: null,
+});
+```
+
+***
+
+
+
+### createModDiscussionConversation()
+
+> **createModDiscussionConversation**(`params`): `Promise`\<`string`\>
+
+Creates a conversation in Mod Discussions with the moderators of the given subredditId.
+
+Note: The app must be installed in the subreddit in order to create a conversation in Mod Discussions.
+
+#### Parameters
+
+##### params
+
+###### bodyMarkdown
+
+`string`
+
+###### subject
+
+`string`
+
+###### subredditId
+
+`string`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+A Promise that resolves a string representing the conversationId of the message.
+
+#### Example
+
+```ts
+const conversationId = await reddit.modMail.createModDiscussionConversation({
+ subject: 'Test conversation',
+ bodyMarkdown: '**Hello there** \n\n _Have a great day!_',
+ subredditId: context.subredditId
+});
+```
+
+***
+
+
+
+### createModInboxConversation()
+
+> **createModInboxConversation**(`params`): `Promise`\<`string`\>
+
+Creates a conversation in the Modmail Inbox with the moderators of the given subredditId.
+
+#### Parameters
+
+##### params
+
+###### bodyMarkdown
+
+`string`
+
+###### subject
+
+`string`
+
+###### subredditId
+
+`string`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+A Promise that resolves a string representing the conversationId of the message.
+
+#### Example
+
+```ts
+const conversationId = await reddit.modMail.createModInboxConversation({
+ subject: 'Test conversation',
+ bodyMarkdown: '**Hello there** \n\n _Have a great day!_',
+ subredditId: context.subredditId
+});
+```
+
+***
+
+
+
+### createModNotification()
+
+> **createModNotification**(`params`): `Promise`\<`string`\>
+
+Creates a notification in the Modmail Inbox.
+This function is different from [ModMailService.createModInboxConversation](#createmodinboxconversation) in that the conversation also appears in the "Notifications" section of Modmail.
+
+#### Parameters
+
+##### params
+
+###### bodyMarkdown
+
+`string`
+
+###### subject
+
+`string`
+
+###### subredditId
+
+`string`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+A Promise that resolves a string representing the conversationId of the message.
+
+#### Example
+
+```ts
+const conversationId = await reddit.modMail.createModNotification({
+ subject: 'Test notification',
+ bodyMarkdown: '**Hello there** \n\n _This is a notification!_',
+ subredditId: context.subredditId
+});
+```
+
+***
+
+
+
+### disapproveConversation()
+
+> **disapproveConversation**(`conversationId`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+Disapprove the non mod user associated with a particular conversation.
+
+#### Parameters
+
+##### conversationId
+
+`string`
+
+Id of a modmail conversation
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.disapproveConversation('abcdef');
+```
+
+***
+
+
+
+### getConversation()
+
+> **getConversation**(`params`): `Promise`\<[`GetConversationResponse`](../type-aliases/GetConversationResponse.md)\>
+
+Returns all messages, mod actions and conversation metadata for a given conversation id
+
+#### Parameters
+
+##### params
+
+###### conversationId
+
+`string`
+
+a modmail conversation id
+
+###### markRead?
+
+`boolean`
+
+mark read?
+
+#### Returns
+
+`Promise`\<[`GetConversationResponse`](../type-aliases/GetConversationResponse.md)\>
+
+#### Example
+
+```ts
+const { conversation, messages, modActions, user } = await reddit.modMail.getConversation({ conversationId: 'abcdef', markRead: true });
+```
+
+***
+
+
+
+### getConversations()
+
+> **getConversations**(`params`): `Promise`\<[`GetConversationsResponse`](../type-aliases/GetConversationsResponse.md)\>
+
+Get conversations for a logged in user or subreddits
+
+#### Parameters
+
+##### params
+
+[`GetConversationsRequest`](../type-aliases/GetConversationsRequest.md)
+
+#### Returns
+
+`Promise`\<[`GetConversationsResponse`](../type-aliases/GetConversationsResponse.md)\>
+
+#### Example
+
+```ts
+const {viewerId, conversations} = await reddit.modMail.getConversations({
+ after: 'abcdef',
+ limit: 42
+});
+
+const arrayOfConversations = Object.values(conversations);
+```
+
+***
+
+
+
+### getSubreddits()
+
+> **getSubreddits**(): `Promise`\<\{\}\>
+
+Returns a list of Subreddits that the user moderates with mail permission
+
+#### Returns
+
+`Promise`\<\{\}\>
+
+#### Example
+
+```ts
+const subredditsData = await reddit.modMail.getSubreddits();
+
+for (const subreddit of Object.values(subreddits)) {
+ console.log(subreddit.id);
+ console.log(subreddit.name);
+}
+```
+
+***
+
+
+
+### getUnreadCount()
+
+> **getUnreadCount**(): `Promise`\<[`UnreadCountResponse`](../type-aliases/UnreadCountResponse.md)\>
+
+Endpoint to retrieve the unread conversation count by conversation state.
+
+#### Returns
+
+`Promise`\<[`UnreadCountResponse`](../type-aliases/UnreadCountResponse.md)\>
+
+#### Example
+
+```ts
+const response = await reddit.modMail.getUnreadCount();
+
+console.log(response.highlighted);
+console.log(response.new);
+```
+
+***
+
+
+
+### getUserConversations()
+
+> **getUserConversations**(`conversationId`): `Promise`\<[`ConversationUserData`](../type-aliases/ConversationUserData.md)\>
+
+Returns recent posts, comments and modmail conversations for a given user.
+
+#### Parameters
+
+##### conversationId
+
+`string`
+
+Id of a modmail conversation
+
+#### Returns
+
+`Promise`\<[`ConversationUserData`](../type-aliases/ConversationUserData.md)\>
+
+#### Example
+
+```ts
+const data = await reddit.modMail.getUserConversations('abcdef');
+
+console.log(data.recentComments);
+console.log(data.recentPosts);
+```
+
+***
+
+
+
+### highlightConversation()
+
+> **highlightConversation**(`conversationId`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md)\>
+
+Marks a conversation as highlighted.
+
+#### Parameters
+
+##### conversationId
+
+`string`
+
+Id of a modmail conversation
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.highlightConversation('abcdef');
+```
+
+***
+
+
+
+### muteConversation()
+
+> **muteConversation**(`params`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+Marks a conversation as read for the user.
+
+#### Parameters
+
+##### params
+
+###### conversationId
+
+`string`
+
+Id of a modmail conversation
+
+###### numHours
+
+`72` \| `168` \| `672`
+
+For how many hours the conversation needs to be muted. Must be one of 72, 168, or 672 hours
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.muteConversation({ conversationId: 'abcdef', numHours: 72 });
+```
+
+***
+
+
+
+### readConversations()
+
+> **readConversations**(`conversationIds`): `Promise`\<`void`\>
+
+Marks a conversations as read for the user.
+
+#### Parameters
+
+##### conversationIds
+
+`string`[]
+
+An array of ids
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Example
+
+```ts
+await reddit.modMail.readConversations(['abcdef', 'qwerty']);
+```
+
+***
+
+
+
+### reply()
+
+> **reply**(`params`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+Creates a new message for a particular conversation.
+
+#### Parameters
+
+##### params
+
+###### body
+
+`string`
+
+markdown text
+
+###### conversationId
+
+`string`
+
+Id of a modmail conversation
+
+###### isAuthorHidden?
+
+`boolean`
+
+is author hidden? (default: false)
+
+###### isInternal?
+
+`boolean`
+
+is internal message? (default: false)
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.reply({
+ body: 'Lorem ipsum sit amet',
+ conversationId: 'abcdef',
+});
+```
+
+***
+
+
+
+### tempBanConversation()
+
+> **tempBanConversation**(`params`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+Temporary ban (switch from permanent to temporary ban) the non mod user associated with a particular conversation.
+
+#### Parameters
+
+##### params
+
+###### conversationId
+
+`string`
+
+a modmail conversation id
+
+###### duration
+
+`number`
+
+duration in days, max 999
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.tempBanConversation({ conversationId: 'abcdef', duration: 42 });
+```
+
+***
+
+
+
+### unarchiveConversation()
+
+> **unarchiveConversation**(`conversationId`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md)\>
+
+Marks conversation as unarchived.
+
+#### Parameters
+
+##### conversationId
+
+`string`
+
+Id of a modmail conversation
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.unarchiveConversation('abcdef');
+```
+
+***
+
+
+
+### unbanConversation()
+
+> **unbanConversation**(`conversationId`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+Unban the non mod user associated with a particular conversation.
+
+#### Parameters
+
+##### conversationId
+
+`string`
+
+a modmail conversation id
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.unbanConversation('abcdef');
+```
+
+***
+
+
+
+### unhighlightConversation()
+
+> **unhighlightConversation**(`conversationId`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md)\>
+
+Removes a highlight from a conversation.
+
+#### Parameters
+
+##### conversationId
+
+`string`
+
+Id of a modmail conversation
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.unhighlightConversation('abcdef');
+```
+
+***
+
+
+
+### unmuteConversation()
+
+> **unmuteConversation**(`conversationId`): `Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+Unmutes the non mod user associated with a particular conversation.
+
+#### Parameters
+
+##### conversationId
+
+`string`
+
+Id of a modmail conversation
+
+#### Returns
+
+`Promise`\<[`ConversationResponse`](../type-aliases/ConversationResponse.md) & [`WithUserData`](../type-aliases/WithUserData.md)\>
+
+#### Example
+
+```ts
+await reddit.modMail.unmuteConversation('abcdef');
+```
+
+***
+
+
+
+### unreadConversations()
+
+> **unreadConversations**(`conversationIds`): `Promise`\<`void`\>
+
+Marks conversations as unread for the user.
+
+#### Parameters
+
+##### conversationIds
+
+`string`[]
+
+An array of ids
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Example
+
+```ts
+await reddit.modMail.unreadConversations(['abcdef', 'qwerty']);
+```
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/ModNote.md b/versioned_docs/version-0.13/api/redditapi/models/classes/ModNote.md
new file mode 100644
index 00000000..cdd8a16e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/ModNote.md
@@ -0,0 +1,93 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: ModNote
+
+## Properties
+
+
+
+### createdAt
+
+> **createdAt**: `Date`
+
+***
+
+
+
+### id
+
+> **id**: `string`
+
+***
+
+
+
+### modAction?
+
+> `optional` **modAction**: [`ModAction`](../interfaces/ModAction.md)
+
+***
+
+
+
+### operator
+
+> **operator**: `object`
+
+#### id?
+
+> `optional` **id**: `` `t2_${string}` ``
+
+#### name?
+
+> `optional` **name**: `string`
+
+***
+
+
+
+### subreddit
+
+> **subreddit**: `object`
+
+#### id?
+
+> `optional` **id**: `` `t5_${string}` ``
+
+#### name?
+
+> `optional` **name**: `string`
+
+***
+
+
+
+### type
+
+> **type**: [`ModNoteType`](../type-aliases/ModNoteType.md)
+
+***
+
+
+
+### user
+
+> **user**: `object`
+
+#### id?
+
+> `optional` **id**: `` `t2_${string}` ``
+
+#### name?
+
+> `optional` **name**: `string`
+
+***
+
+
+
+### userNote?
+
+> `optional` **userNote**: [`UserNote`](../type-aliases/UserNote.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/Post.md b/versioned_docs/version-0.13/api/redditapi/models/classes/Post.md
new file mode 100644
index 00000000..2ba40ae2
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/Post.md
@@ -0,0 +1,1368 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: Post
+
+## Accessors
+
+
+
+### approved
+
+#### Get Signature
+
+> **get** **approved**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### approvedAtUtc
+
+#### Get Signature
+
+> **get** **approvedAtUtc**(): `number`
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### archived
+
+#### Get Signature
+
+> **get** **archived**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### authorFlair
+
+#### Get Signature
+
+> **get** **authorFlair**(): `undefined` \| [`CommonFlair`](../type-aliases/CommonFlair.md)
+
+##### Returns
+
+`undefined` \| [`CommonFlair`](../type-aliases/CommonFlair.md)
+
+***
+
+
+
+### authorId
+
+#### Get Signature
+
+> **get** **authorId**(): `undefined` \| `` `t2_${string}` ``
+
+##### Returns
+
+`undefined` \| `` `t2_${string}` ``
+
+***
+
+
+
+### authorName
+
+#### Get Signature
+
+> **get** **authorName**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### bannedAtUtc
+
+#### Get Signature
+
+> **get** **bannedAtUtc**(): `number`
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### body
+
+#### Get Signature
+
+> **get** **body**(): `undefined` \| `string`
+
+##### Returns
+
+`undefined` \| `string`
+
+***
+
+
+
+### bodyHtml
+
+#### Get Signature
+
+> **get** **bodyHtml**(): `undefined` \| `string`
+
+##### Returns
+
+`undefined` \| `string`
+
+***
+
+
+
+### comments
+
+#### Get Signature
+
+> **get** **comments**(): [`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+***
+
+
+
+### createdAt
+
+#### Get Signature
+
+> **get** **createdAt**(): `Date`
+
+##### Returns
+
+`Date`
+
+***
+
+
+
+### distinguishedBy
+
+#### Get Signature
+
+> **get** **distinguishedBy**(): `undefined` \| `string`
+
+##### Returns
+
+`undefined` \| `string`
+
+***
+
+
+
+### edited
+
+#### Get Signature
+
+> **get** **edited**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### flair
+
+#### Get Signature
+
+> **get** **flair**(): `undefined` \| [`CommonFlair`](../type-aliases/CommonFlair.md)
+
+##### Returns
+
+`undefined` \| [`CommonFlair`](../type-aliases/CommonFlair.md)
+
+***
+
+
+
+### gallery
+
+#### Get Signature
+
+> **get** **gallery**(): [`GalleryMedia`](../type-aliases/GalleryMedia.md)[]
+
+Get the media in the post. Empty if the post doesn't have any media.
+
+##### Returns
+
+[`GalleryMedia`](../type-aliases/GalleryMedia.md)[]
+
+***
+
+
+
+### hidden
+
+#### Get Signature
+
+> **get** **hidden**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `` `t3_${string}` ``
+
+##### Returns
+
+`` `t3_${string}` ``
+
+***
+
+
+
+### ignoringReports
+
+#### Get Signature
+
+> **get** **ignoringReports**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### locked
+
+#### Get Signature
+
+> **get** **locked**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### modReportReasons
+
+#### Get Signature
+
+> **get** **modReportReasons**(): `string`[]
+
+##### Returns
+
+`string`[]
+
+***
+
+
+
+### nsfw
+
+#### Get Signature
+
+> **get** **nsfw**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### numberOfComments
+
+#### Get Signature
+
+> **get** **numberOfComments**(): `number`
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### numberOfReports
+
+#### Get Signature
+
+> **get** **numberOfReports**(): `number`
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### permalink
+
+#### Get Signature
+
+> **get** **permalink**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### pollData
+
+#### Get Signature
+
+> **get** **pollData**(): `undefined` \| [`PollData`](../type-aliases/PollData.md)
+
+Poll data for the post, if the post is a poll. Undefined otherwise.
+
+##### Returns
+
+`undefined` \| [`PollData`](../type-aliases/PollData.md)
+
+***
+
+
+
+### quarantined
+
+#### Get Signature
+
+> **get** **quarantined**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### removed
+
+#### Get Signature
+
+> **get** **removed**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### removedBy
+
+#### Get Signature
+
+> **get** **removedBy**(): `undefined` \| `string`
+
+Who removed this object (username)
+
+##### Returns
+
+`undefined` \| `string`
+
+***
+
+
+
+### removedByCategory
+
+#### Get Signature
+
+> **get** **removedByCategory**(): `undefined` \| `string`
+
+who/what removed this object. It will return one of the following:
+- "anti_evil_ops": object is removed by a aeops member
+- "author": object is removed by author of the post
+- "automod_filtered": object is filtered by automod
+- "community_ops": object is removed by a community team member
+- "content_takedown": object is removed due to content violation
+- "copyright_takedown": object is removed due to copyright violation
+- "deleted": object is deleted
+- "moderator": object is removed by a mod of the sub
+- "reddit": object is removed by anyone else
+- undefined: object is not removed
+
+##### Returns
+
+`undefined` \| `string`
+
+***
+
+
+
+### score
+
+#### Get Signature
+
+> **get** **score**(): `number`
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### secureMedia
+
+#### Get Signature
+
+> **get** **secureMedia**(): `undefined` \| [`SecureMedia`](../type-aliases/SecureMedia.md)
+
+##### Returns
+
+`undefined` \| [`SecureMedia`](../type-aliases/SecureMedia.md)
+
+***
+
+
+
+### spam
+
+#### Get Signature
+
+> **get** **spam**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### spoiler
+
+#### Get Signature
+
+> **get** **spoiler**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### stickied
+
+#### Get Signature
+
+> **get** **stickied**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### subredditId
+
+#### Get Signature
+
+> **get** **subredditId**(): `` `t5_${string}` ``
+
+##### Returns
+
+`` `t5_${string}` ``
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### thumbnail
+
+#### Get Signature
+
+> **get** **thumbnail**(): `undefined` \| \{ `height`: `number`; `url`: `string`; `width`: `number`; \}
+
+##### Returns
+
+`undefined` \| \{ `height`: `number`; `url`: `string`; `width`: `number`; \}
+
+***
+
+
+
+### title
+
+#### Get Signature
+
+> **get** **title**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### url
+
+#### Get Signature
+
+> **get** **url**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### userReportReasons
+
+#### Get Signature
+
+> **get** **userReportReasons**(): `string`[]
+
+##### Returns
+
+`string`[]
+
+## Methods
+
+
+
+### addComment()
+
+> **addComment**(`options`): `Promise`\<[`Comment`](Comment.md)\>
+
+#### Parameters
+
+##### options
+
+[`CommentSubmissionOptions`](../type-aliases/CommentSubmissionOptions.md)
+
+#### Returns
+
+`Promise`\<[`Comment`](Comment.md)\>
+
+***
+
+
+
+### addRemovalNote()
+
+> **addRemovalNote**(`options`): `Promise`\<`void`\>
+
+Add a mod note for why the post was removed
+
+#### Parameters
+
+##### options
+
+###### modNote?
+
+`string`
+
+the reason for removal (maximum 100 characters) (optional)
+
+###### reasonId
+
+`string`
+
+id of a Removal Reason - you can leave this as an empty string if you don't have one
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### approve()
+
+> **approve**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### crosspost()
+
+> **crosspost**(`options`): `Promise`\<`Post`\>
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`CrosspostOptions`](../type-aliases/CrosspostOptions.md), `"postId"`\>
+
+#### Returns
+
+`Promise`\<`Post`\>
+
+***
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### distinguish()
+
+> **distinguish**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### distinguishAsAdmin()
+
+> **distinguishAsAdmin**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### edit()
+
+> **edit**(`options`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### options
+
+[`PostTextOptions`](../type-aliases/PostTextOptions.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### getAuthor()
+
+> **getAuthor**(): `Promise`\<`undefined` \| [`User`](User.md)\>
+
+#### Returns
+
+`Promise`\<`undefined` \| [`User`](User.md)\>
+
+***
+
+
+
+### getCurrentUserPollOption()
+
+> **getCurrentUserPollOption**(): `Promise`\<`undefined` \| [`PollOption`](../type-aliases/PollOption.md)\>
+
+Get the poll option the authenticated user selected for this post.
+Returns undefined if the post is not a poll or the user has not voted.
+
+This method will get the poll option for the app account by default.
+To get the poll option for a user, please contact Reddit.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`PollOption`](../type-aliases/PollOption.md)\>
+
+***
+
+
+
+### getDuplicates()
+
+> **getDuplicates**(`options`): [`Listing`](Listing.md)\<`Post`\>
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`GetDuplicatesOptions`](../type-aliases/GetDuplicatesOptions.md), `"postId"`\> = `{}`
+
+#### Returns
+
+[`Listing`](Listing.md)\<`Post`\>
+
+***
+
+
+
+### getEnrichedThumbnail()
+
+> **getEnrichedThumbnail**(): `Promise`\<`undefined` \| [`EnrichedThumbnail`](../type-aliases/EnrichedThumbnail.md)\>
+
+Get a thumbnail that contains a preview image and also contains a blurred preview for
+NSFW images. The thumbnail returned has higher resolution than Post.thumbnail.
+Returns undefined if the post doesn't have a thumbnail
+
+#### Returns
+
+`Promise`\<`undefined` \| [`EnrichedThumbnail`](../type-aliases/EnrichedThumbnail.md)\>
+
+#### Throws
+
+Throws an error if the thumbnail could not be fetched
+
+#### Example
+
+```ts
+// from a menu action, form, scheduler, trigger, custom post click event, etc
+const post = await context.reddit.getPostById(context.postId);
+const enrichedThumbnail = await post.getEnrichedThumbnail();
+```
+
+***
+
+
+
+### getPostData()
+
+> **getPostData**(): `Promise`\<`undefined` \| `JsonObject`\>
+
+Get the postData for the post.
+
+#### Returns
+
+`Promise`\<`undefined` \| `JsonObject`\>
+
+#### Example
+
+```ts
+const post = await context.reddit.getPostById(context.postId);
+const postData = await post.getPostData();
+```
+
+***
+
+
+
+### hide()
+
+> **hide**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### ignoreReports()
+
+> **ignoreReports**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### isApproved()
+
+> **isApproved**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isArchived()
+
+> **isArchived**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isDistinguishedBy()
+
+> **isDistinguishedBy**(): `undefined` \| `string`
+
+#### Returns
+
+`undefined` \| `string`
+
+***
+
+
+
+### isEdited()
+
+> **isEdited**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isHidden()
+
+> **isHidden**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isIgnoringReports()
+
+> **isIgnoringReports**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isLocked()
+
+> **isLocked**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isNsfw()
+
+> **isNsfw**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isQuarantined()
+
+> **isQuarantined**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isRemoved()
+
+> **isRemoved**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isSpam()
+
+> **isSpam**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isSpoiler()
+
+> **isSpoiler**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### isStickied()
+
+> **isStickied**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+***
+
+
+
+### lock()
+
+> **lock**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### markAsNsfw()
+
+> **markAsNsfw**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### markAsSpoiler()
+
+> **markAsSpoiler**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### remove()
+
+> **remove**(`isSpam`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### isSpam
+
+`boolean` = `false`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### setCustomPostPreview()
+
+> **setCustomPostPreview**(`ui`): `Promise`\<`void`\>
+
+Set a lightweight UI that shows while the custom post renders
+
+#### Parameters
+
+##### ui
+
+`ComponentFunction`
+
+A JSX component function that returns a simple ui to be rendered.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Throws
+
+Throws an error if the preview could not be set.
+
+#### Example
+
+```ts
+const preview = (
+
+ An updated preview!
+
+);
+const post = await reddit.getPostById(context.postId);
+await post.setCustomPostPreview(() => preview);
+```
+
+***
+
+
+
+### setPostData()
+
+> **setPostData**(`postData`): `Promise`\<`void`\>
+
+Set the postData on a custom post.
+
+#### Parameters
+
+##### postData
+
+`JsonObject`
+
+Represents the postData to be set, eg: { currentScore: 55, secretWord: 'barbeque' }
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Throws
+
+Throws an error if the postData could not be set.
+
+#### Example
+
+```ts
+const post = await reddit.getPostById(context.postId);
+await post.setPostData({
+ currentScore: 55,
+ secretWord: 'barbeque',
+});
+```
+
+***
+
+
+
+### setSuggestedCommentSort()
+
+> **setSuggestedCommentSort**(`suggestedSort`): `Promise`\<`void`\>
+
+Set the suggested sort for comments on a Post.
+
+#### Parameters
+
+##### suggestedSort
+
+[`PostSuggestedCommentSort`](../type-aliases/PostSuggestedCommentSort.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Throws
+
+Throws an error if the suggested sort could not be set.
+
+#### Example
+
+```ts
+const post = await reddit.getPostById(context.postId);
+await post.setSuggestedCommentSort("NEW");
+```
+
+***
+
+
+
+### setTextFallback()
+
+> **setTextFallback**(`options`): `Promise`\<`void`\>
+
+Set a text fallback for the custom post
+
+#### Parameters
+
+##### options
+
+[`CustomPostTextFallbackOptions`](../type-aliases/CustomPostTextFallbackOptions.md)
+
+A text or a richtext to render in a fallback
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Throws
+
+Throws an error if the fallback could not be set.
+
+#### Example
+
+```ts
+// from a menu action, form, scheduler, trigger, custom post click event, etc
+const newTextFallback = { text: 'This is an updated text fallback' };
+const post = await context.reddit.getPostById(context.postId);
+await post.setTextFallback(newTextFallback);
+```
+
+***
+
+
+
+### snoozeReports()
+
+> **snoozeReports**(`reason`): `Promise`\<`void`\>
+
+Snooze subsequent reports with the given reason from the same users for the next 7 days.
+Only works for free-form reports.
+
+#### Parameters
+
+##### reason
+
+`string`
+
+The report reason to snooze.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### sticky()
+
+> **sticky**(`position`?): `Promise`\<`void`\>
+
+#### Parameters
+
+##### position?
+
+`1` | `2` | `3` | `4`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<`Post`, `"subredditName"` \| `"flair"` \| `"id"` \| `"score"` \| `"title"` \| `"subredditId"` \| `"url"` \| `"createdAt"` \| `"nsfw"` \| `"permalink"` \| `"authorId"` \| `"authorName"` \| `"body"` \| `"bodyHtml"` \| `"thumbnail"` \| `"numberOfComments"` \| `"numberOfReports"` \| `"approved"` \| `"spam"` \| `"stickied"` \| `"removed"` \| `"removedBy"` \| `"removedByCategory"` \| `"archived"` \| `"edited"` \| `"locked"` \| `"quarantined"` \| `"spoiler"` \| `"hidden"` \| `"ignoringReports"` \| `"distinguishedBy"` \| `"authorFlair"` \| `"secureMedia"` \| `"userReportReasons"` \| `"modReportReasons"`\>
+
+#### Returns
+
+`Pick`\<`Post`, `"subredditName"` \| `"flair"` \| `"id"` \| `"score"` \| `"title"` \| `"subredditId"` \| `"url"` \| `"createdAt"` \| `"nsfw"` \| `"permalink"` \| `"authorId"` \| `"authorName"` \| `"body"` \| `"bodyHtml"` \| `"thumbnail"` \| `"numberOfComments"` \| `"numberOfReports"` \| `"approved"` \| `"spam"` \| `"stickied"` \| `"removed"` \| `"removedBy"` \| `"removedByCategory"` \| `"archived"` \| `"edited"` \| `"locked"` \| `"quarantined"` \| `"spoiler"` \| `"hidden"` \| `"ignoringReports"` \| `"distinguishedBy"` \| `"authorFlair"` \| `"secureMedia"` \| `"userReportReasons"` \| `"modReportReasons"`\>
+
+***
+
+
+
+### undistinguish()
+
+> **undistinguish**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unhide()
+
+> **unhide**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unignoreReports()
+
+> **unignoreReports**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unlock()
+
+> **unlock**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unmarkAsNsfw()
+
+> **unmarkAsNsfw**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unmarkAsSpoiler()
+
+> **unmarkAsSpoiler**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unsnoozeReports()
+
+> **unsnoozeReports**(`reason`): `Promise`\<`void`\>
+
+Unsnooze reports with the given reason.
+Only works for free-form reports.
+
+#### Parameters
+
+##### reason
+
+`string`
+
+The report reason to unsnooze.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unsticky()
+
+> **unsticky**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### updateCrowdControlLevel()
+
+> **updateCrowdControlLevel**(`level`): `Promise`\<`void`\>
+
+Updates the crowd control level of the post to hide comments accordingly.
+
+#### Parameters
+
+##### level
+
+[`CrowdControlLevel`](../type-aliases/CrowdControlLevel.md)
+
+The crowd control level to set. See [CrowdControlLevel](../type-aliases/CrowdControlLevel.md) for more information.
+
+#### Returns
+
+`Promise`\<`void`\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/PostFlairSettings.md b/versioned_docs/version-0.13/api/redditapi/models/classes/PostFlairSettings.md
new file mode 100644
index 00000000..d6dc7989
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/PostFlairSettings.md
@@ -0,0 +1,33 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: PostFlairSettings
+
+## Constructors
+
+
+
+### new PostFlairSettings()
+
+> **new PostFlairSettings**(): `PostFlairSettings`
+
+#### Returns
+
+`PostFlairSettings`
+
+## Properties
+
+
+
+### isEnabled?
+
+> `optional` **isEnabled**: `boolean`
+
+***
+
+
+
+### isSelfAssignabled?
+
+> `optional` **isSelfAssignabled**: `boolean`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/PostFlairWidget.md b/versioned_docs/version-0.13/api/redditapi/models/classes/PostFlairWidget.md
new file mode 100644
index 00000000..e014c7f3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/PostFlairWidget.md
@@ -0,0 +1,167 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: PostFlairWidget
+
+## Extends
+
+- [`Widget`](Widget.md)
+
+## Constructors
+
+
+
+### new PostFlairWidget()
+
+> **new PostFlairWidget**(`widgetData`, `subredditName`, `metadata`): `PostFlairWidget`
+
+#### Parameters
+
+##### widgetData
+
+`GetWidgetsResponse_WidgetItem`
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`PostFlairWidget`
+
+#### Overrides
+
+[`Widget`](Widget.md).[`constructor`](Widget.md#constructor)
+
+## Accessors
+
+
+
+### display
+
+#### Get Signature
+
+> **get** **display**(): `"list"` \| `"cloud"`
+
+##### Returns
+
+`"list"` \| `"cloud"`
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`id`](Widget.md#id)
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`name`](Widget.md#name)
+
+***
+
+
+
+### styles
+
+#### Get Signature
+
+> **get** **styles**(): `WidgetStyles`
+
+##### Returns
+
+`WidgetStyles`
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`subredditName`](Widget.md#subredditname)
+
+***
+
+
+
+### templates
+
+#### Get Signature
+
+> **get** **templates**(): `GetWidgetsResponse_WidgetItem_PostFlairTemplate`[]
+
+##### Returns
+
+`GetWidgetsResponse_WidgetItem_PostFlairTemplate`[]
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`delete`](Widget.md#delete)
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`PostFlairWidget`, `"styles"` \| `"templates"` \| `"display"`\>
+
+#### Returns
+
+`Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`PostFlairWidget`, `"styles"` \| `"templates"` \| `"display"`\>
+
+#### Overrides
+
+[`Widget`](Widget.md).[`toJSON`](Widget.md#tojson)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/PrivateMessage.md b/versioned_docs/version-0.13/api/redditapi/models/classes/PrivateMessage.md
new file mode 100644
index 00000000..33a51330
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/PrivateMessage.md
@@ -0,0 +1,87 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: PrivateMessage
+
+## Accessors
+
+
+
+### body
+
+#### Get Signature
+
+> **get** **body**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### bodyHtml
+
+#### Get Signature
+
+> **get** **bodyHtml**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### created
+
+#### Get Signature
+
+> **get** **created**(): `Date`
+
+##### Returns
+
+`Date`
+
+***
+
+
+
+### from
+
+#### Get Signature
+
+> **get** **from**(): `PrivateMessageAuthor`
+
+##### Returns
+
+`PrivateMessageAuthor`
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `TID`
+
+##### Returns
+
+`TID`
+
+## Methods
+
+
+
+### markAsRead()
+
+> **markAsRead**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/Rule.md b/versioned_docs/version-0.13/api/redditapi/models/classes/Rule.md
new file mode 100644
index 00000000..a5431739
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/Rule.md
@@ -0,0 +1,303 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: Rule
+
+## Constructors
+
+
+
+### new Rule()
+
+> **new Rule**(`ruleData`, `subredditName`, `metadata`): `Rule`
+
+#### Parameters
+
+##### ruleData
+
+`SubredditAboutRulesResponse_SubredditRule`
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`Rule`
+
+## Accessors
+
+
+
+### createdUtc
+
+#### Get Signature
+
+> **get** **createdUtc**(): `number`
+
+The Unix timestamp of when the rule was created.
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### description
+
+#### Get Signature
+
+> **get** **description**(): `string`
+
+The full description of the rule. This appears on your subreddit's sidebar.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### descriptionHtml
+
+#### Get Signature
+
+> **get** **descriptionHtml**(): `undefined` \| `string`
+
+##### Returns
+
+`undefined` \| `string`
+
+***
+
+
+
+### kind
+
+#### Get Signature
+
+> **get** **kind**(): `"all"` \| `"link"` \| `"comment"`
+
+Which Reddit objects this rule applies to. One of "all", "link" (AKA posts), "comment".
+
+##### Returns
+
+`"all"` \| `"link"` \| `"comment"`
+
+***
+
+
+
+### priority
+
+#### Get Signature
+
+> **get** **priority**(): `number`
+
+The zero-indexed rank of the rule on the subreddit sidebar. Lower numbers appear on top.
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### shortName
+
+#### Get Signature
+
+> **get** **shortName**(): `string`
+
+The name for the rule.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+The name (without r/ prefix) of the subreddit the rule belongs to.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### violationReason
+
+#### Get Signature
+
+> **get** **violationReason**(): `string`
+
+Text to show users when reporting content due to this rule. Defaults to the shortName.
+
+##### Returns
+
+`string`
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<`Rule`, `"subredditName"` \| `"kind"` \| `"violationReason"` \| `"shortName"` \| `"description"` \| `"createdUtc"` \| `"priority"`\> & `object`
+
+#### Returns
+
+`Pick`\<`Rule`, `"subredditName"` \| `"kind"` \| `"violationReason"` \| `"shortName"` \| `"description"` \| `"createdUtc"` \| `"priority"`\> & `object`
+
+***
+
+
+
+### update()
+
+> **update**(`options`): `Promise`\<`void`\>
+
+Update an existing rule.
+
+#### Parameters
+
+##### options
+
+`Readonly`\<[`UpdateRuleOptions`](../type-aliases/UpdateRuleOptions.md)\>
+
+New values for an existing rule. All fields are optional. If a field is not provided, the existing value will not be changed.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### createRule()
+
+> `static` **createRule**(`subredditName`, `options`, `metadata`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+##### options
+
+`Readonly`\<[`CreateRuleOptions`](../type-aliases/CreateRuleOptions.md)\>
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### delete()
+
+> `static` **delete**(`subredditName`, `shortName`, `metadata`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+##### shortName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### getRules()
+
+> `static` **getRules**(`subredditName`, `metadata`): `Promise`\<`Rule`[]\>
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`Promise`\<`Rule`[]\>
+
+***
+
+
+
+### reorderRules()
+
+> `static` **reorderRules**(`subredditName`, `rules`, `metadata`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+##### rules
+
+`Rule`[]
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`Promise`\<`void`\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/Subreddit.md b/versioned_docs/version-0.13/api/redditapi/models/classes/Subreddit.md
new file mode 100644
index 00000000..d18dbcf5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/Subreddit.md
@@ -0,0 +1,1475 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: Subreddit
+
+A class representing a subreddit.
+
+## Accessors
+
+
+
+### createdAt
+
+#### Get Signature
+
+> **get** **createdAt**(): `Date`
+
+The creation date of the subreddit.
+
+##### Returns
+
+`Date`
+
+***
+
+
+
+### description
+
+#### Get Signature
+
+> **get** **description**(): `undefined` \| `string`
+
+The description of the subreddit.
+
+##### Returns
+
+`undefined` \| `string`
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `` `t5_${string}` ``
+
+The ID (starting with t5_) of the subreddit to retrieve. e.g. t5_2qjpg
+
+##### Returns
+
+`` `t5_${string}` ``
+
+***
+
+
+
+### language
+
+#### Get Signature
+
+> **get** **language**(): `string`
+
+The language of the subreddit.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+The name of a subreddit omitting the r/.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### nsfw
+
+#### Get Signature
+
+> **get** **nsfw**(): `boolean`
+
+Whether the subreddit is marked as NSFW (Not Safe For Work).
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### numberOfActiveUsers
+
+#### Get Signature
+
+> **get** **numberOfActiveUsers**(): `number`
+
+The number of active users of the subreddit.
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### numberOfSubscribers
+
+#### Get Signature
+
+> **get** **numberOfSubscribers**(): `number`
+
+The number of subscribers of the subreddit.
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### permalink
+
+#### Get Signature
+
+> **get** **permalink**(): `string`
+
+Returns a permalink path
+(R2 bug: subreddit.url is a permalink, and does not have a subreddit.permalink field)
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### postFlairsEnabled
+
+#### Get Signature
+
+> **get** **postFlairsEnabled**(): `boolean`
+
+Whether the post flairs are enabled for this subreddit.
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### settings
+
+#### Get Signature
+
+> **get** **settings**(): [`SubredditSettings`](../type-aliases/SubredditSettings.md)
+
+The settings of the subreddit.
+
+##### Returns
+
+[`SubredditSettings`](../type-aliases/SubredditSettings.md)
+
+***
+
+
+
+### title
+
+#### Get Signature
+
+> **get** **title**(): `undefined` \| `string`
+
+The title of the subreddit.
+
+##### Returns
+
+`undefined` \| `string`
+
+***
+
+
+
+### type
+
+#### Get Signature
+
+> **get** **type**(): [`SubredditType`](../type-aliases/SubredditType.md)
+
+The type of subreddit (public, private, etc.).
+
+##### Returns
+
+[`SubredditType`](../type-aliases/SubredditType.md)
+
+***
+
+
+
+### url
+
+#### Get Signature
+
+> **get** **url**(): `string`
+
+Returns the HTTP URL for the subreddit.
+(R2 bug: subreddit.url is a permalink path and does not return a fully qualified URL in subreddit.url)
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### userFlairsEnabled
+
+#### Get Signature
+
+> **get** **userFlairsEnabled**(): `boolean`
+
+Whether the user flairs are enabled for this subreddit.
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### usersCanAssignPostFlairs
+
+#### Get Signature
+
+> **get** **usersCanAssignPostFlairs**(): `boolean`
+
+Whether the user can assign post flairs.
+This is only true if the post flairs are enabled.
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### usersCanAssignUserFlairs
+
+#### Get Signature
+
+> **get** **usersCanAssignUserFlairs**(): `boolean`
+
+Whether the user can assign user flairs.
+This is only true if the user flairs are enabled.
+
+##### Returns
+
+`boolean`
+
+## Methods
+
+
+
+### addRemovalReason()
+
+> **addRemovalReason**(`options`): `Promise`\<`string`\>
+
+Add a removal reason to this subreddit.
+
+#### Parameters
+
+##### options
+
+###### message
+
+`string`
+
+The message associated with the removal reason.
+
+###### title
+
+`string`
+
+The title of the removal reason.
+
+#### Returns
+
+`Promise`\<`string`\>
+
+The new removal reason ID.
+
+***
+
+
+
+### addWikiContributor()
+
+> **addWikiContributor**(`username`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### approveUser()
+
+> **approveUser**(`username`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### banUser()
+
+> **banUser**(`options`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`BanUserOptions`](../type-aliases/BanUserOptions.md), `"subredditName"`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### banWikiContributor()
+
+> **banWikiContributor**(`options`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`BanWikiContributorOptions`](../type-aliases/BanWikiContributorOptions.md), `"subredditName"`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### createPostFlairTemplate()
+
+> **createPostFlairTemplate**(`options`): `Promise`\<[`FlairTemplate`](FlairTemplate.md)\>
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`CreateFlairTemplateOptions`](../type-aliases/CreateFlairTemplateOptions.md), `"subredditName"`\>
+
+#### Returns
+
+`Promise`\<[`FlairTemplate`](FlairTemplate.md)\>
+
+***
+
+
+
+### createRule()
+
+> **createRule**(`options`): `Promise`\<`void`\>
+
+Create a new subreddit rule.
+
+#### Parameters
+
+##### options
+
+`Readonly`\<[`CreateRuleOptions`](../type-aliases/CreateRuleOptions.md)\>
+
+Options for creating a new subreddit rule.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### createUserFlairTemplate()
+
+> **createUserFlairTemplate**(`options`): `Promise`\<[`FlairTemplate`](FlairTemplate.md)\>
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`CreateFlairTemplateOptions`](../type-aliases/CreateFlairTemplateOptions.md), `"subredditName"`\>
+
+#### Returns
+
+`Promise`\<[`FlairTemplate`](FlairTemplate.md)\>
+
+***
+
+
+
+### deleteRemovalReason()
+
+> **deleteRemovalReason**(`reasonId`): `Promise`\<`void`\>
+
+Delete a removal reason from this subreddit.
+
+#### Parameters
+
+##### reasonId
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### getApprovedUsers()
+
+> **getApprovedUsers**(`options`): [`Listing`](Listing.md)\<[`User`](User.md)\>
+
+#### Parameters
+
+##### options
+
+`GetUsersOptions` = `{}`
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`User`](User.md)\>
+
+***
+
+
+
+### getBannedUsers()
+
+> **getBannedUsers**(`options`): [`Listing`](Listing.md)\<[`User`](User.md)\>
+
+#### Parameters
+
+##### options
+
+`GetUsersOptions` = `{}`
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`User`](User.md)\>
+
+***
+
+
+
+### getBannedWikiContributors()
+
+> **getBannedWikiContributors**(`options`): [`Listing`](Listing.md)\<[`User`](User.md)\>
+
+#### Parameters
+
+##### options
+
+`GetUsersOptions` = `{}`
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`User`](User.md)\>
+
+***
+
+
+
+### getCommentsAndPostsByIds()
+
+> **getCommentsAndPostsByIds**(`ids`): [`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+Return a listing of things specified by their fullnames.
+
+#### Parameters
+
+##### ids
+
+`string`[]
+
+Array of thing full ids (e.g. t3_abc123)
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+#### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName('askReddit');
+const listing = subreddit.getCommentsAndPostsByIds(['t3_abc123', 't1_xyz123']);
+const items = await listing.all();
+console.log(items) // [Post, Comment]
+```
+
+***
+
+
+
+### getControversialPosts()
+
+> **getControversialPosts**(`options`): [`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`GetPostsOptionsWithTimeframe`](../type-aliases/GetPostsOptionsWithTimeframe.md), `"subredditName"`\> = `{}`
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+***
+
+
+
+### getEdited()
+
+#### Call Signature
+
+> **getEdited**(`options`): [`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+Return a listing of things that have been edited recently.
+
+##### Parameters
+
+###### options
+
+`AboutSubredditOptions`\<`"comment"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getEdited();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getEdited({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getEdited**(`options`): [`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+Return a listing of things that have been edited recently.
+
+##### Parameters
+
+###### options
+
+`AboutSubredditOptions`\<`"post"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getEdited();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getEdited({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getEdited**(`options`?): [`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+Return a listing of things that have been edited recently.
+
+##### Parameters
+
+###### options?
+
+`AboutSubredditOptions`\<`"all"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getEdited();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getEdited({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+***
+
+
+
+### getModerationLog()
+
+> **getModerationLog**(`options`): [`Listing`](Listing.md)\<[`ModAction`](../interfaces/ModAction.md)\>
+
+#### Parameters
+
+##### options
+
+`GetModerationLogOptions`
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`ModAction`](../interfaces/ModAction.md)\>
+
+***
+
+
+
+### getModerators()
+
+> **getModerators**(`options`): [`Listing`](Listing.md)\<[`User`](User.md)\>
+
+#### Parameters
+
+##### options
+
+`GetUsersOptions` = `{}`
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`User`](User.md)\>
+
+***
+
+
+
+### getModQueue()
+
+#### Call Signature
+
+> **getModQueue**(`options`): [`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+Return a listing of things requiring moderator review, such as reported things and items.
+
+##### Parameters
+
+###### options
+
+`AboutSubredditOptions`\<`"comment"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getModQueue();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getModQueue({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getModQueue**(`options`): [`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+Return a listing of things requiring moderator review, such as reported things and items.
+
+##### Parameters
+
+###### options
+
+`AboutSubredditOptions`\<`"post"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getModQueue();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getModQueue({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getModQueue**(`options`?): [`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+Return a listing of things requiring moderator review, such as reported things and items.
+
+##### Parameters
+
+###### options?
+
+`AboutSubredditOptions`\<`"all"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getModQueue();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getModQueue({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+***
+
+
+
+### getMutedUsers()
+
+> **getMutedUsers**(`options`): [`Listing`](Listing.md)\<[`User`](User.md)\>
+
+#### Parameters
+
+##### options
+
+`GetUsersOptions` = `{}`
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`User`](User.md)\>
+
+***
+
+
+
+### getPostFlairTemplates()
+
+> **getPostFlairTemplates**(): `Promise`\<[`FlairTemplate`](FlairTemplate.md)[]\>
+
+#### Returns
+
+`Promise`\<[`FlairTemplate`](FlairTemplate.md)[]\>
+
+***
+
+
+
+### getRemovalReasons()
+
+> **getRemovalReasons**(): `Promise`\<[`RemovalReason`](../type-aliases/RemovalReason.md)[]\>
+
+Get the list of this subreddit's removal reasons (ordered).
+
+#### Returns
+
+`Promise`\<[`RemovalReason`](../type-aliases/RemovalReason.md)[]\>
+
+***
+
+
+
+### getReports()
+
+#### Call Signature
+
+> **getReports**(`options`): [`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+Return a listing of things that have been reported.
+
+##### Parameters
+
+###### options
+
+`AboutSubredditOptions`\<`"comment"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getReports();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getReports({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getReports**(`options`): [`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+Return a listing of things that have been reported.
+
+##### Parameters
+
+###### options
+
+`AboutSubredditOptions`\<`"post"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getReports();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getReports({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getReports**(`options`?): [`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+Return a listing of things that have been reported.
+
+##### Parameters
+
+###### options?
+
+`AboutSubredditOptions`\<`"all"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getReports();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getReports({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+***
+
+
+
+### getRules()
+
+> **getRules**(): `Promise`\<[`Rule`](Rule.md)[]\>
+
+#### Returns
+
+`Promise`\<[`Rule`](Rule.md)[]\>
+
+***
+
+
+
+### getSpam()
+
+#### Call Signature
+
+> **getSpam**(`options`): [`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+Return a listing of things that have been marked as spam or otherwise removed.
+
+##### Parameters
+
+###### options
+
+`AboutSubredditOptions`\<`"comment"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getSpam();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getSpam({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getSpam**(`options`): [`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+Return a listing of things that have been marked as spam or otherwise removed.
+
+##### Parameters
+
+###### options
+
+`AboutSubredditOptions`\<`"post"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getSpam();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getSpam({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getSpam**(`options`?): [`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+Return a listing of things that have been marked as spam or otherwise removed.
+
+##### Parameters
+
+###### options?
+
+`AboutSubredditOptions`\<`"all"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getSpam();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getSpam({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+***
+
+
+
+### getTopPosts()
+
+> **getTopPosts**(`options`): [`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`GetPostsOptionsWithTimeframe`](../type-aliases/GetPostsOptionsWithTimeframe.md), `"subredditName"`\> = `{}`
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+***
+
+
+
+### getUnmoderated()
+
+#### Call Signature
+
+> **getUnmoderated**(`options`): [`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+Return a listing of things that have yet to be approved/removed by a mod.
+
+##### Parameters
+
+###### options
+
+`AboutSubredditOptions`\<`"comment"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getUnmoderated();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getUnmoderated({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getUnmoderated**(`options`): [`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+Return a listing of things that have yet to be approved/removed by a mod.
+
+##### Parameters
+
+###### options
+
+`AboutSubredditOptions`\<`"post"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getUnmoderated();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getUnmoderated({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+#### Call Signature
+
+> **getUnmoderated**(`options`?): [`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+Return a listing of things that have yet to be approved/removed by a mod.
+
+##### Parameters
+
+###### options?
+
+`AboutSubredditOptions`\<`"all"`\>
+
+##### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md) \| [`Comment`](Comment.md)\>
+
+##### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName("mysubreddit")
+let listing = await subreddit.getUnmoderated();
+console.log("Posts and Comments: ", await listing.all())
+listing = await subreddit.getUnmoderated({ type: "post"});
+console.log("Posts: ", await listing.all())
+```
+
+***
+
+
+
+### getUserFlair()
+
+> **getUserFlair**(`options`?): `Promise`\<[`GetUserFlairBySubredditResponse`](../type-aliases/GetUserFlairBySubredditResponse.md)\>
+
+Get the user flair for the given subreddit. If `usernames` is provided then it will return only the
+flair for the specified users. If retrieving the list of flair for a given subreddit and the list is long
+then this method will return a `next` field which can be passed into the `after` field on the next call to
+retrieve the next slice of data. To retrieve the previous slice of data pass the `prev` field into the `before` field
+during the subsequent call.
+
+#### Parameters
+
+##### options?
+
+[`GetUserFlairOptions`](../type-aliases/GetUserFlairOptions.md)
+
+See interface
+
+#### Returns
+
+`Promise`\<[`GetUserFlairBySubredditResponse`](../type-aliases/GetUserFlairBySubredditResponse.md)\>
+
+#### Examples
+
+```ts
+const subredditName = "mysubreddit"
+const subreddit = await reddit.getSubredditByName(subredditName)
+const response = await subreddit.getUserFlair();
+const userFlairList = response.users
+```
+
+```ts
+const response = await subreddit.getUserFlair({ after: "t2_awefae"});
+const userFlairList = response.users
+```
+
+```ts
+const response = await subreddit.getUserFlair({ usernames: ['toxictoad', 'badapple']});
+const userFlairList = response.users
+```
+
+***
+
+
+
+### getUserFlairTemplates()
+
+> **getUserFlairTemplates**(): `Promise`\<[`FlairTemplate`](FlairTemplate.md)[]\>
+
+#### Returns
+
+`Promise`\<[`FlairTemplate`](FlairTemplate.md)[]\>
+
+***
+
+
+
+### getWikiContributors()
+
+> **getWikiContributors**(`options`): [`Listing`](Listing.md)\<[`User`](User.md)\>
+
+#### Parameters
+
+##### options
+
+`GetUsersOptions` = `{}`
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`User`](User.md)\>
+
+***
+
+
+
+### inviteModerator()
+
+> **inviteModerator**(`username`, `permissions`?): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+##### permissions?
+
+[`ModeratorPermission`](../type-aliases/ModeratorPermission.md)[]
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### muteUser()
+
+> **muteUser**(`username`, `note`?): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+##### note?
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### removeModerator()
+
+> **removeModerator**(`username`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### removeUser()
+
+> **removeUser**(`username`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### removeWikiContributor()
+
+> **removeWikiContributor**(`username`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### reorderRules()
+
+> **reorderRules**(`rules`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### rules
+
+[`Rule`](Rule.md)[]
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### revokeModeratorInvite()
+
+> **revokeModeratorInvite**(`username`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### setModeratorPermissions()
+
+> **setModeratorPermissions**(`username`, `permissions`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+##### permissions
+
+[`ModeratorPermission`](../type-aliases/ModeratorPermission.md)[]
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### submitPost()
+
+> **submitPost**(`options`): `Promise`\<[`Post`](Post.md)\>
+
+#### Parameters
+
+##### options
+
+[`SubmitLinkOptions`](../type-aliases/SubmitLinkOptions.md) | [`SubmitSelfPostOptions`](../type-aliases/SubmitSelfPostOptions.md)
+
+#### Returns
+
+`Promise`\<[`Post`](Post.md)\>
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<`Subreddit`, `"type"` \| `"description"` \| `"id"` \| `"name"` \| `"title"` \| `"settings"` \| `"createdAt"` \| `"language"` \| `"numberOfSubscribers"` \| `"numberOfActiveUsers"` \| `"nsfw"`\>
+
+#### Returns
+
+`Pick`\<`Subreddit`, `"type"` \| `"description"` \| `"id"` \| `"name"` \| `"title"` \| `"settings"` \| `"createdAt"` \| `"language"` \| `"numberOfSubscribers"` \| `"numberOfActiveUsers"` \| `"nsfw"`\>
+
+***
+
+
+
+### unbanUser()
+
+> **unbanUser**(`username`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unbanWikiContributor()
+
+> **unbanWikiContributor**(`username`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### unmuteUser()
+
+> **unmuteUser**(`username`): `Promise`\<`void`\>
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### updateRemovalReason()
+
+> **updateRemovalReason**(`reasonId`, `options`): `Promise`\<`void`\>
+
+Update a removal reason's title and message in this subreddit.
+
+#### Parameters
+
+##### reasonId
+
+`string`
+
+##### options
+
+###### message
+
+`string`
+
+###### title
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### updateSettings()
+
+> **updateSettings**(`options`): `Promise`\<`void`\>
+
+Updates subreddit settings via the SiteAdmin API. Current settings are used as the base;
+only provided options are applied. In order to reset a field to its default value,
+pass the default value as the option value.
+
+#### Parameters
+
+##### options
+
+[`SubredditSettingsOptions`](../type-aliases/SubredditSettingsOptions.md)
+
+Optional settings to apply. Omitted fields are left unchanged.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Example
+
+```ts
+const subreddit = await reddit.getSubredditByName('mysubreddit');
+await subreddit.updateSettings({ restrictPosting: true, allowImages: false });
+await subreddit.updateSettings({ type: 'restricted', title: 'New Title', description: 'Sidebar text' });
+```
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/SubredditDescription.md b/versioned_docs/version-0.13/api/redditapi/models/classes/SubredditDescription.md
new file mode 100644
index 00000000..6112eda1
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/SubredditDescription.md
@@ -0,0 +1,25 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: SubredditDescription
+
+## Constructors
+
+
+
+### new SubredditDescription()
+
+> **new SubredditDescription**(): `SubredditDescription`
+
+#### Returns
+
+`SubredditDescription`
+
+## Properties
+
+
+
+### markdown?
+
+> `optional` **markdown**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/SubredditRulesWidget.md b/versioned_docs/version-0.13/api/redditapi/models/classes/SubredditRulesWidget.md
new file mode 100644
index 00000000..a63ca60a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/SubredditRulesWidget.md
@@ -0,0 +1,143 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: SubredditRulesWidget
+
+## Extends
+
+- [`Widget`](Widget.md)
+
+## Constructors
+
+
+
+### new SubredditRulesWidget()
+
+> **new SubredditRulesWidget**(`subredditAboutRulesRsp`, `widgetData`, `subredditName`, `metadata`): `SubredditRulesWidget`
+
+#### Parameters
+
+##### subredditAboutRulesRsp
+
+`SubredditAboutRulesResponse`
+
+##### widgetData
+
+`GetWidgetsResponse_WidgetItem`
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`SubredditRulesWidget`
+
+#### Overrides
+
+[`Widget`](Widget.md).[`constructor`](Widget.md#constructor)
+
+## Accessors
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`id`](Widget.md#id)
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`name`](Widget.md#name)
+
+***
+
+
+
+### rules
+
+#### Get Signature
+
+> **get** **rules**(): `SubredditRule`[]
+
+##### Returns
+
+`SubredditRule`[]
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`subredditName`](Widget.md#subredditname)
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`delete`](Widget.md#delete)
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`SubredditRulesWidget`, `"rules"`\>
+
+#### Returns
+
+`Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`SubredditRulesWidget`, `"rules"`\>
+
+#### Overrides
+
+[`Widget`](Widget.md).[`toJSON`](Widget.md#tojson)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/SubredditWikiSettings.md b/versioned_docs/version-0.13/api/redditapi/models/classes/SubredditWikiSettings.md
new file mode 100644
index 00000000..9ca8d93d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/SubredditWikiSettings.md
@@ -0,0 +1,25 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: SubredditWikiSettings
+
+## Constructors
+
+
+
+### new SubredditWikiSettings()
+
+> **new SubredditWikiSettings**(): `SubredditWikiSettings`
+
+#### Returns
+
+`SubredditWikiSettings`
+
+## Properties
+
+
+
+### wikiEditMode?
+
+> `optional` **wikiEditMode**: [`WikiEditMode`](../type-aliases/WikiEditMode.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/TextAreaWidget.md b/versioned_docs/version-0.13/api/redditapi/models/classes/TextAreaWidget.md
new file mode 100644
index 00000000..7e16bc00
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/TextAreaWidget.md
@@ -0,0 +1,153 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: TextAreaWidget
+
+## Extends
+
+- [`Widget`](Widget.md)
+
+## Constructors
+
+
+
+### new TextAreaWidget()
+
+> **new TextAreaWidget**(`widgetData`, `subredditName`, `metadata`): `TextAreaWidget`
+
+#### Parameters
+
+##### widgetData
+
+`GetWidgetsResponse_WidgetItem`
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`TextAreaWidget`
+
+#### Overrides
+
+[`Widget`](Widget.md).[`constructor`](Widget.md#constructor)
+
+## Accessors
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`id`](Widget.md#id)
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`name`](Widget.md#name)
+
+***
+
+
+
+### styles
+
+#### Get Signature
+
+> **get** **styles**(): `WidgetStyles`
+
+##### Returns
+
+`WidgetStyles`
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`subredditName`](Widget.md#subredditname)
+
+***
+
+
+
+### text
+
+#### Get Signature
+
+> **get** **text**(): `string`
+
+##### Returns
+
+`string`
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+[`Widget`](Widget.md).[`delete`](Widget.md#delete)
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`TextAreaWidget`, `"text"` \| `"styles"`\>
+
+#### Returns
+
+`Pick`\<[`Widget`](Widget.md), `"subredditName"` \| `"id"` \| `"name"`\> & `Pick`\<`TextAreaWidget`, `"text"` \| `"styles"`\>
+
+#### Overrides
+
+[`Widget`](Widget.md).[`toJSON`](Widget.md#tojson)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/User.md b/versioned_docs/version-0.13/api/redditapi/models/classes/User.md
new file mode 100644
index 00000000..28da8ed5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/User.md
@@ -0,0 +1,458 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: User
+
+A class representing a user.
+
+## Accessors
+
+
+
+### about
+
+#### Get Signature
+
+> **get** **about**(): `string`
+
+The user's public description about themselves. May be empty.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### commentKarma
+
+#### Get Signature
+
+> **get** **commentKarma**(): `number`
+
+The amount of comment karma the user has.
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### createdAt
+
+#### Get Signature
+
+> **get** **createdAt**(): `Date`
+
+The date the user was created.
+
+##### Returns
+
+`Date`
+
+***
+
+
+
+### displayName
+
+#### Get Signature
+
+> **get** **displayName**(): `string`
+
+The display name of the user. May be different from their username.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### hasRedditPremium
+
+#### Get Signature
+
+> **get** **hasRedditPremium**(): `boolean`
+
+Whether the user has Reddit Premium.
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### hasVerifiedEmail
+
+#### Get Signature
+
+> **get** **hasVerifiedEmail**(): `boolean`
+
+Indicates whether or not the user has verified their email address.
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `` `t2_${string}` ``
+
+The ID (starting with t2_) of the user to retrieve.
+
+##### Example
+
+```ts
+'t2_1w72'
+```
+
+##### Returns
+
+`` `t2_${string}` ``
+
+***
+
+
+
+### isAdmin
+
+#### Get Signature
+
+> **get** **isAdmin**(): `boolean`
+
+Whether the user is admin.
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### isModerator
+
+#### Get Signature
+
+> **get** **isModerator**(): `boolean`
+
+Whether the user is a moderator of any subreddit.
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### linkKarma
+
+#### Get Signature
+
+> **get** **linkKarma**(): `number`
+
+The amount of link karma the user has.
+
+##### Returns
+
+`number`
+
+***
+
+
+
+### modPermissions
+
+#### Get Signature
+
+> **get** **modPermissions**(): `Map`\<`string`, [`ModeratorPermission`](../type-aliases/ModeratorPermission.md)[]\>
+
+The permissions the user has on the subreddit.
+
+##### Returns
+
+`Map`\<`string`, [`ModeratorPermission`](../type-aliases/ModeratorPermission.md)[]\>
+
+***
+
+
+
+### nsfw
+
+#### Get Signature
+
+> **get** **nsfw**(): `boolean`
+
+Whether the user's profile is marked as NSFW (Not Safe For Work).
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### permalink
+
+#### Get Signature
+
+> **get** **permalink**(): `string`
+
+Returns a permalink path relative to https://www.reddit.com
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### showNsfw
+
+#### Get Signature
+
+> **get** **showNsfw**(): `boolean`
+
+Whether the user is over 18 and wishes to see NSFW content.
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### url
+
+#### Get Signature
+
+> **get** **url**(): `string`
+
+Returns the HTTP URL for the user
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### username
+
+#### Get Signature
+
+> **get** **username**(): `string`
+
+The username of the user omitting the u/.
+
+##### Example
+
+```ts
+'spez'
+```
+
+##### Returns
+
+`string`
+
+## Methods
+
+
+
+### getComments()
+
+> **getComments**(`options`): [`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+Get the user's comments.
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`GetCommentsByUserOptions`](../type-aliases/GetCommentsByUserOptions.md), `"username"`\>
+
+Options for the request
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`Comment`](Comment.md)\>
+
+A Listing of Comment objects.
+
+***
+
+
+
+### getModPermissionsForSubreddit()
+
+> **getModPermissionsForSubreddit**(`subredditName`): `Promise`\<[`ModeratorPermission`](../type-aliases/ModeratorPermission.md)[]\>
+
+Get the mod permissions the user has on the subreddit if they are a moderator.
+
+#### Parameters
+
+##### subredditName
+
+`string`
+
+name of the subreddit
+
+#### Returns
+
+`Promise`\<[`ModeratorPermission`](../type-aliases/ModeratorPermission.md)[]\>
+
+the moderator permissions the user has on the subreddit
+
+***
+
+
+
+### getPosts()
+
+> **getPosts**(`options`): [`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+Get the user's posts.
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`GetPostsByUserOptions`](../type-aliases/GetPostsByUserOptions.md), `"username"`\>
+
+Options for the request
+
+#### Returns
+
+[`Listing`](Listing.md)\<[`Post`](Post.md)\>
+
+A Listing of Post objects.
+
+***
+
+
+
+### getSnoovatarUrl()
+
+> **getSnoovatarUrl**(): `Promise`\<`undefined` \| `string`\>
+
+#### Returns
+
+`Promise`\<`undefined` \| `string`\>
+
+***
+
+
+
+### getSocialLinks()
+
+> **getSocialLinks**(): `Promise`\<[`UserSocialLink`](../type-aliases/UserSocialLink.md)[]\>
+
+Gets social links of the user
+
+#### Returns
+
+`Promise`\<[`UserSocialLink`](../type-aliases/UserSocialLink.md)[]\>
+
+A Promise that resolves an Array of UserSocialLink objects
+
+#### Example
+
+```ts
+const socialLinks = await user.getSocialLinks();
+```
+
+***
+
+
+
+### getTrophies()
+
+> **getTrophies**(): `Promise`\<[`Trophy`](../type-aliases/Trophy.md)[]\>
+
+Get the trophies displayed on this user's profile.
+
+#### Returns
+
+`Promise`\<[`Trophy`](../type-aliases/Trophy.md)[]\>
+
+A Promise that resolves to an array of Trophy objects.
+
+***
+
+
+
+### getUserFlairBySubreddit()
+
+> **getUserFlairBySubreddit**(`subreddit`): `Promise`\<`undefined` \| [`UserFlair`](../type-aliases/UserFlair.md)\>
+
+Retrieve the user's flair for the subreddit.
+
+#### Parameters
+
+##### subreddit
+
+`string`
+
+The name of the subreddit associated with the user's flair.
+
+#### Returns
+
+`Promise`\<`undefined` \| [`UserFlair`](../type-aliases/UserFlair.md)\>
+
+#### Example
+
+```ts
+const username = "badapple"
+const subredditName = "mysubreddit"
+const user = await reddit.getUserByUsername(username);
+const userFlair = await user.getUserFlairBySubreddit(subredditName);
+```
+
+***
+
+
+
+### getUserKarmaFromCurrentSubreddit()
+
+> **getUserKarmaFromCurrentSubreddit**(): `Promise`\<`GetUserKarmaForSubredditResponse`\>
+
+Returns the karma for this User in the current subreddit.
+The user making the request must be a moderator of the subreddit to read another user's karma in the subreddit.
+An exception is if the specified user is the same as the user making the request.
+
+#### Returns
+
+`Promise`\<`GetUserKarmaForSubredditResponse`\>
+
+The GetUserKarmaForSubredditResponse, containing the user's karma for comments and posts in the subreddit.
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<`User`, `"username"` \| `"id"` \| `"createdAt"` \| `"nsfw"` \| `"linkKarma"` \| `"commentKarma"`\> & `object`
+
+#### Returns
+
+`Pick`\<`User`, `"username"` \| `"id"` \| `"createdAt"` \| `"nsfw"` \| `"linkKarma"` \| `"commentKarma"`\> & `object`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/Widget.md b/versioned_docs/version-0.13/api/redditapi/models/classes/Widget.md
new file mode 100644
index 00000000..ca9bf848
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/Widget.md
@@ -0,0 +1,108 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: Widget
+
+## Extended by
+
+- [`ImageWidget`](ImageWidget.md)
+- [`CalendarWidget`](CalendarWidget.md)
+- [`TextAreaWidget`](TextAreaWidget.md)
+- [`ButtonWidget`](ButtonWidget.md)
+- [`CommunityListWidget`](CommunityListWidget.md)
+- [`PostFlairWidget`](PostFlairWidget.md)
+- [`CustomWidget`](CustomWidget.md)
+- [`SubredditRulesWidget`](SubredditRulesWidget.md)
+
+## Constructors
+
+
+
+### new Widget()
+
+> **new Widget**(`widgetData`, `subredditName`, `metadata`): `Widget`
+
+#### Parameters
+
+##### widgetData
+
+`GetWidgetsResponse_WidgetItem`
+
+##### subredditName
+
+`string`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`Widget`
+
+## Accessors
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+##### Returns
+
+`string`
+
+## Methods
+
+
+
+### delete()
+
+> **delete**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<`Widget`, `"subredditName"` \| `"id"` \| `"name"`\>
+
+#### Returns
+
+`Pick`\<`Widget`, `"subredditName"` \| `"id"` \| `"name"`\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/WikiPage.md b/versioned_docs/version-0.13/api/redditapi/models/classes/WikiPage.md
new file mode 100644
index 00000000..b067d0d4
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/WikiPage.md
@@ -0,0 +1,283 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: WikiPage
+
+## Accessors
+
+
+
+### content
+
+#### Get Signature
+
+> **get** **content**(): `string`
+
+The Markdown content of the page.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### contentHtml
+
+#### Get Signature
+
+> **get** **contentHtml**(): `string`
+
+The HTML content of the page.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+The name of the page.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### revisionAuthor
+
+#### Get Signature
+
+> **get** **revisionAuthor**(): `undefined` \| [`User`](User.md)
+
+The author of this revision.
+
+##### Returns
+
+`undefined` \| [`User`](User.md)
+
+***
+
+
+
+### revisionDate
+
+#### Get Signature
+
+> **get** **revisionDate**(): `Date`
+
+The date of the revision.
+
+##### Returns
+
+`Date`
+
+***
+
+
+
+### revisionId
+
+#### Get Signature
+
+> **get** **revisionId**(): `` `${string}-${string}-${string}-${string}-${string}` ``
+
+The ID of the revision.
+
+##### Returns
+
+`` `${string}-${string}-${string}-${string}-${string}` ``
+
+***
+
+
+
+### revisionReason
+
+#### Get Signature
+
+> **get** **revisionReason**(): `string`
+
+The reason for the revision.
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### subredditName
+
+#### Get Signature
+
+> **get** **subredditName**(): `string`
+
+The name of the subreddit the page is in.
+
+##### Returns
+
+`string`
+
+## Methods
+
+
+
+### addEditor()
+
+> **addEditor**(`username`): `Promise`\<`void`\>
+
+Add an editor to this page.
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### getRevisions()
+
+> **getRevisions**(`options`): `Promise`\<[`Listing`](Listing.md)\<[`WikiPageRevision`](WikiPageRevision.md)\>\>
+
+Get the revisions for this page.
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`GetPageRevisionsOptions`](../type-aliases/GetPageRevisionsOptions.md), `"subredditName"` \| `"page"`\>
+
+#### Returns
+
+`Promise`\<[`Listing`](Listing.md)\<[`WikiPageRevision`](WikiPageRevision.md)\>\>
+
+***
+
+
+
+### getSettings()
+
+> **getSettings**(): `Promise`\<[`WikiPageSettings`](WikiPageSettings.md)\>
+
+Get the settings for this page.
+
+#### Returns
+
+`Promise`\<[`WikiPageSettings`](WikiPageSettings.md)\>
+
+***
+
+
+
+### removeEditor()
+
+> **removeEditor**(`username`): `Promise`\<`void`\>
+
+Remove an editor from this page.
+
+#### Parameters
+
+##### username
+
+`string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### revertTo()
+
+> **revertTo**(`revisionId`): `Promise`\<`void`\>
+
+Revert this page to a previous revision.
+
+#### Parameters
+
+##### revisionId
+
+`` `${string}-${string}-${string}-${string}-${string}` ``
+
+#### Returns
+
+`Promise`\<`void`\>
+
+***
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<`WikiPage`, `"subredditName"` \| `"name"` \| `"content"` \| `"contentHtml"` \| `"revisionId"` \| `"revisionDate"` \| `"revisionReason"`\> & `object`
+
+#### Returns
+
+`Pick`\<`WikiPage`, `"subredditName"` \| `"name"` \| `"content"` \| `"contentHtml"` \| `"revisionId"` \| `"revisionDate"` \| `"revisionReason"`\> & `object`
+
+***
+
+
+
+### update()
+
+> **update**(`content`, `reason`?): `Promise`\<`WikiPage`\>
+
+Update this page.
+
+#### Parameters
+
+##### content
+
+`string`
+
+##### reason?
+
+`string`
+
+#### Returns
+
+`Promise`\<`WikiPage`\>
+
+***
+
+
+
+### updateSettings()
+
+> **updateSettings**(`options`): `Promise`\<[`WikiPageSettings`](WikiPageSettings.md)\>
+
+Update the settings for this page.
+
+#### Parameters
+
+##### options
+
+`Omit`\<[`UpdatePageSettingsOptions`](../type-aliases/UpdatePageSettingsOptions.md), `"subredditName"` \| `"page"`\>
+
+#### Returns
+
+`Promise`\<[`WikiPageSettings`](WikiPageSettings.md)\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/WikiPageRevision.md b/versioned_docs/version-0.13/api/redditapi/models/classes/WikiPageRevision.md
new file mode 100644
index 00000000..fa6610b2
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/WikiPageRevision.md
@@ -0,0 +1,123 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: WikiPageRevision
+
+## Constructors
+
+
+
+### new WikiPageRevision()
+
+> **new WikiPageRevision**(`data`, `metadata`): `WikiPageRevision`
+
+#### Parameters
+
+##### data
+
+`WikiPageRevision`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`WikiPageRevision`
+
+## Accessors
+
+
+
+### author
+
+#### Get Signature
+
+> **get** **author**(): [`User`](User.md)
+
+##### Returns
+
+[`User`](User.md)
+
+***
+
+
+
+### date
+
+#### Get Signature
+
+> **get** **date**(): `Date`
+
+##### Returns
+
+`Date`
+
+***
+
+
+
+### hidden
+
+#### Get Signature
+
+> **get** **hidden**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### id
+
+#### Get Signature
+
+> **get** **id**(): `` `${string}-${string}-${string}-${string}-${string}` ``
+
+##### Returns
+
+`` `${string}-${string}-${string}-${string}-${string}` ``
+
+***
+
+
+
+### page
+
+#### Get Signature
+
+> **get** **page**(): `string`
+
+##### Returns
+
+`string`
+
+***
+
+
+
+### reason
+
+#### Get Signature
+
+> **get** **reason**(): `string`
+
+##### Returns
+
+`string`
+
+## Methods
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<`WikiPageRevision`, `"id"` \| `"hidden"` \| `"reason"` \| `"page"` \| `"date"`\> & `object`
+
+#### Returns
+
+`Pick`\<`WikiPageRevision`, `"id"` \| `"hidden"` \| `"reason"` \| `"page"` \| `"date"`\> & `object`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/classes/WikiPageSettings.md b/versioned_docs/version-0.13/api/redditapi/models/classes/WikiPageSettings.md
new file mode 100644
index 00000000..01912b27
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/classes/WikiPageSettings.md
@@ -0,0 +1,81 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Class: WikiPageSettings
+
+## Constructors
+
+
+
+### new WikiPageSettings()
+
+> **new WikiPageSettings**(`data`, `metadata`): `WikiPageSettings`
+
+#### Parameters
+
+##### data
+
+`WikiPageSettings_Data`
+
+##### metadata
+
+`undefined` | `Metadata`
+
+#### Returns
+
+`WikiPageSettings`
+
+## Accessors
+
+
+
+### editors
+
+#### Get Signature
+
+> **get** **editors**(): [`User`](User.md)[]
+
+##### Returns
+
+[`User`](User.md)[]
+
+***
+
+
+
+### listed
+
+#### Get Signature
+
+> **get** **listed**(): `boolean`
+
+##### Returns
+
+`boolean`
+
+***
+
+
+
+### permLevel
+
+#### Get Signature
+
+> **get** **permLevel**(): [`WikiPagePermissionLevel`](../enumerations/WikiPagePermissionLevel.md)
+
+##### Returns
+
+[`WikiPagePermissionLevel`](../enumerations/WikiPagePermissionLevel.md)
+
+## Methods
+
+
+
+### toJSON()
+
+> **toJSON**(): `Pick`\<`WikiPageSettings`, `"listed"` \| `"permLevel"`\> & `object`
+
+#### Returns
+
+`Pick`\<`WikiPageSettings`, `"listed"` \| `"permLevel"`\> & `object`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/enumerations/AboutLocations.md b/versioned_docs/version-0.13/api/redditapi/models/enumerations/AboutLocations.md
new file mode 100644
index 00000000..9e1507af
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/enumerations/AboutLocations.md
@@ -0,0 +1,45 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Enumeration: AboutLocations
+
+## Enumeration Members
+
+
+
+### Edited
+
+> **Edited**: `"edited"`
+
+***
+
+
+
+### Modqueue
+
+> **Modqueue**: `"modqueue"`
+
+***
+
+
+
+### Reports
+
+> **Reports**: `"reports"`
+
+***
+
+
+
+### Spam
+
+> **Spam**: `"spam"`
+
+***
+
+
+
+### Unmoderated
+
+> **Unmoderated**: `"unmoderated"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/enumerations/FlairType.md b/versioned_docs/version-0.13/api/redditapi/models/enumerations/FlairType.md
new file mode 100644
index 00000000..59083863
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/enumerations/FlairType.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Enumeration: FlairType
+
+## Enumeration Members
+
+
+
+### Post
+
+> **Post**: `"LINK_FLAIR"`
+
+***
+
+
+
+### User
+
+> **User**: `"USER_FLAIR"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/enumerations/ModMailActionType.md b/versioned_docs/version-0.13/api/redditapi/models/enumerations/ModMailActionType.md
new file mode 100644
index 00000000..8a90c482
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/enumerations/ModMailActionType.md
@@ -0,0 +1,113 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Enumeration: ModMailActionType
+
+An ActionType describes a particular logged action within a conversation. For example,
+if a mod highlights a conversation, a ModerationAction record with the type `Highlighted`
+would be created.
+
+## Enumeration Members
+
+
+
+### Approved
+
+> **Approved**: `"Approved"`
+
+***
+
+
+
+### Archived
+
+> **Archived**: `"Archived"`
+
+***
+
+
+
+### Banned
+
+> **Banned**: `"Banned"`
+
+***
+
+
+
+### Disapproved
+
+> **Disapproved**: `"Disapproved"`
+
+***
+
+
+
+### Filtered
+
+> **Filtered**: `"Filtered"`
+
+***
+
+
+
+### Highlighted
+
+> **Highlighted**: `"Highlighted"`
+
+***
+
+
+
+### Muted
+
+> **Muted**: `"Muted"`
+
+***
+
+
+
+### ReportedToAdmins
+
+> **ReportedToAdmins**: `"ReportedToAdmins"`
+
+***
+
+
+
+### Unarchived
+
+> **Unarchived**: `"Unarchived"`
+
+***
+
+
+
+### Unbanned
+
+> **Unbanned**: `"Unbanned"`
+
+***
+
+
+
+### Unfiltered
+
+> **Unfiltered**: `"Unfiltered"`
+
+***
+
+
+
+### Unhighlighted
+
+> **Unhighlighted**: `"Unhighlighted"`
+
+***
+
+
+
+### Unmuted
+
+> **Unmuted**: `"Unmuted"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/enumerations/ModMailConversationState.md b/versioned_docs/version-0.13/api/redditapi/models/enumerations/ModMailConversationState.md
new file mode 100644
index 00000000..6994ca7b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/enumerations/ModMailConversationState.md
@@ -0,0 +1,53 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Enumeration: ModMailConversationState
+
+## Enumeration Members
+
+
+
+### Appeals
+
+> **Appeals**: `"Appeals"`
+
+***
+
+
+
+### Archived
+
+> **Archived**: `"Archived"`
+
+***
+
+
+
+### Filtered
+
+> **Filtered**: `"Filtered"`
+
+***
+
+
+
+### InProgress
+
+> **InProgress**: `"InProgress"`
+
+***
+
+
+
+### JoinRequests
+
+> **JoinRequests**: `"JoinRequests"`
+
+***
+
+
+
+### New
+
+> **New**: `"New"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/enumerations/SocialLinkType.md b/versioned_docs/version-0.13/api/redditapi/models/enumerations/SocialLinkType.md
new file mode 100644
index 00000000..9852415a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/enumerations/SocialLinkType.md
@@ -0,0 +1,213 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Enumeration: SocialLinkType
+
+## Enumeration Members
+
+
+
+### Beacons
+
+> **Beacons**: `"BEACONS"`
+
+***
+
+
+
+### BuyMeACoffee
+
+> **BuyMeACoffee**: `"BUY_ME_A_COFFEE"`
+
+***
+
+
+
+### Cameo
+
+> **Cameo**: `"CAMEO"`
+
+***
+
+
+
+### CashApp
+
+> **CashApp**: `"CASH_APP"`
+
+***
+
+
+
+### Custom
+
+> **Custom**: `"CUSTOM"`
+
+***
+
+
+
+### Discord
+
+> **Discord**: `"DISCORD"`
+
+***
+
+
+
+### Facebook
+
+> **Facebook**: `"FACEBOOK"`
+
+***
+
+
+
+### Indiegogo
+
+> **Indiegogo**: `"INDIEGOGO"`
+
+***
+
+
+
+### Instagram
+
+> **Instagram**: `"INSTAGRAM"`
+
+***
+
+
+
+### Kickstarter
+
+> **Kickstarter**: `"KICKSTARTER"`
+
+***
+
+
+
+### Kofi
+
+> **Kofi**: `"KOFI"`
+
+***
+
+
+
+### Linktree
+
+> **Linktree**: `"LINKTREE"`
+
+***
+
+
+
+### Onlyfans
+
+> **Onlyfans**: `"ONLYFANS"`
+
+***
+
+
+
+### Patreon
+
+> **Patreon**: `"PATREON"`
+
+***
+
+
+
+### Paypal
+
+> **Paypal**: `"PAYPAL"`
+
+***
+
+
+
+### Reddit
+
+> **Reddit**: `"REDDIT"`
+
+***
+
+
+
+### Shopify
+
+> **Shopify**: `"SHOPIFY"`
+
+***
+
+
+
+### Soundcloud
+
+> **Soundcloud**: `"SOUNDCLOUD"`
+
+***
+
+
+
+### Spotify
+
+> **Spotify**: `"SPOTIFY"`
+
+***
+
+
+
+### Substack
+
+> **Substack**: `"SUBSTACK"`
+
+***
+
+
+
+### Tiktok
+
+> **Tiktok**: `"TIKTOK"`
+
+***
+
+
+
+### Tumblr
+
+> **Tumblr**: `"TUMBLR"`
+
+***
+
+
+
+### Twitch
+
+> **Twitch**: `"TWITCH"`
+
+***
+
+
+
+### Twitter
+
+> **Twitter**: `"TWITTER"`
+
+***
+
+
+
+### Venmo
+
+> **Venmo**: `"VENMO"`
+
+***
+
+
+
+### Youtube
+
+> **Youtube**: `"YOUTUBE"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/enumerations/WikiPagePermissionLevel.md b/versioned_docs/version-0.13/api/redditapi/models/enumerations/WikiPagePermissionLevel.md
new file mode 100644
index 00000000..1803d9af
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/enumerations/WikiPagePermissionLevel.md
@@ -0,0 +1,35 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Enumeration: WikiPagePermissionLevel
+
+## Enumeration Members
+
+
+
+### APPROVED\_CONTRIBUTORS\_ONLY
+
+> **APPROVED\_CONTRIBUTORS\_ONLY**: `1`
+
+Only approved wiki contributors for this page may edit
+
+***
+
+
+
+### MODS\_ONLY
+
+> **MODS\_ONLY**: `2`
+
+Only mods may edit and view
+
+***
+
+
+
+### SUBREDDIT\_PERMISSIONS
+
+> **SUBREDDIT\_PERMISSIONS**: `0`
+
+Use subreddit wiki permissions
diff --git a/versioned_docs/version-0.13/api/redditapi/models/functions/getModerationLog.md b/versioned_docs/version-0.13/api/redditapi/models/functions/getModerationLog.md
new file mode 100644
index 00000000..53e4c60d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/functions/getModerationLog.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Function: getModerationLog()
+
+> **getModerationLog**(`options`, `metadata`): [`Listing`](../classes/Listing.md)\<[`ModAction`](../interfaces/ModAction.md)\>
+
+## Parameters
+
+### options
+
+[`GetModerationLogOptions`](../type-aliases/GetModerationLogOptions.md)
+
+### metadata
+
+`undefined` | `Metadata`
+
+## Returns
+
+[`Listing`](../classes/Listing.md)\<[`ModAction`](../interfaces/ModAction.md)\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditInfoById.md b/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditInfoById.md
new file mode 100644
index 00000000..7f58e6cd
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditInfoById.md
@@ -0,0 +1,27 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Function: getSubredditInfoById()
+
+> **getSubredditInfoById**(`subredditId`, `metadata`): `Promise`\<[`SubredditInfo`](../type-aliases/SubredditInfo.md)\>
+
+Gets a [SubredditInfo](../type-aliases/SubredditInfo.md) object by ID
+
+## Parameters
+
+### subredditId
+
+`string`
+
+### metadata
+
+Optional RPC metadata passed with every request.
+
+`undefined` | `Metadata`
+
+## Returns
+
+`Promise`\<[`SubredditInfo`](../type-aliases/SubredditInfo.md)\>
+
+A Promise that resolves a SubredditInfo object.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditInfoByName.md b/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditInfoByName.md
new file mode 100644
index 00000000..9d8ef0cd
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditInfoByName.md
@@ -0,0 +1,27 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Function: getSubredditInfoByName()
+
+> **getSubredditInfoByName**(`subredditName`, `metadata`): `Promise`\<[`SubredditInfo`](../type-aliases/SubredditInfo.md)\>
+
+Gets a [SubredditInfo](../type-aliases/SubredditInfo.md) object by name
+
+## Parameters
+
+### subredditName
+
+`string`
+
+### metadata
+
+Optional RPC metadata passed with every request.
+
+`undefined` | `Metadata`
+
+## Returns
+
+`Promise`\<[`SubredditInfo`](../type-aliases/SubredditInfo.md)\>
+
+A Promise that resolves a SubredditInfo object.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditLeaderboard.md b/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditLeaderboard.md
new file mode 100644
index 00000000..5f230348
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditLeaderboard.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Function: getSubredditLeaderboard()
+
+> **getSubredditLeaderboard**(`subredditId`, `metadata`): `Promise`\<[`SubredditLeaderboard`](../type-aliases/SubredditLeaderboard.md)\>
+
+## Parameters
+
+### subredditId
+
+`string`
+
+### metadata
+
+`undefined` | `Metadata`
+
+## Returns
+
+`Promise`\<[`SubredditLeaderboard`](../type-aliases/SubredditLeaderboard.md)\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditStyles.md b/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditStyles.md
new file mode 100644
index 00000000..cf79fd76
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/functions/getSubredditStyles.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Function: getSubredditStyles()
+
+> **getSubredditStyles**(`subredditId`, `metadata`): `Promise`\<[`SubredditStyles`](../type-aliases/SubredditStyles.md)\>
+
+## Parameters
+
+### subredditId
+
+`string`
+
+### metadata
+
+`undefined` | `Metadata`
+
+## Returns
+
+`Promise`\<[`SubredditStyles`](../type-aliases/SubredditStyles.md)\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/functions/getVaultByAddress.md b/versioned_docs/version-0.13/api/redditapi/models/functions/getVaultByAddress.md
new file mode 100644
index 00000000..48223b79
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/functions/getVaultByAddress.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Function: getVaultByAddress()
+
+> **getVaultByAddress**(`address`, `metadata`): `Promise`\<[`Vault`](../type-aliases/Vault.md)\>
+
+## Parameters
+
+### address
+
+`string`
+
+### metadata
+
+`undefined` | `Metadata`
+
+## Returns
+
+`Promise`\<[`Vault`](../type-aliases/Vault.md)\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/functions/getVaultByUserId.md b/versioned_docs/version-0.13/api/redditapi/models/functions/getVaultByUserId.md
new file mode 100644
index 00000000..26c9d797
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/functions/getVaultByUserId.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Function: getVaultByUserId()
+
+> **getVaultByUserId**(`userId`, `metadata`): `Promise`\<[`Vault`](../type-aliases/Vault.md)\>
+
+## Parameters
+
+### userId
+
+`` `t2_${string}` ``
+
+### metadata
+
+`undefined` | `Metadata`
+
+## Returns
+
+`Promise`\<[`Vault`](../type-aliases/Vault.md)\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/interfaces/ModAction.md b/versioned_docs/version-0.13/api/redditapi/models/interfaces/ModAction.md
new file mode 100644
index 00000000..b5684355
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/interfaces/ModAction.md
@@ -0,0 +1,113 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Interface: ModAction
+
+## Properties
+
+
+
+### createdAt
+
+> **createdAt**: `Date`
+
+When the action took place.
+
+***
+
+
+
+### description?
+
+> `optional` **description**: `string`
+
+The string "Page modmail-stats edited: Daily update of the
+modmail-stats (Wed Jul 02 2025 08:05:47 UTC+0200 (Europe/Amsterdam))" is
+made up of `description` and `details`. The "Page modmail-stats edited" is
+the "description".
+
+***
+
+
+
+### details?
+
+> `optional` **details**: `string`
+
+The string "Page modmail-stats edited: Daily update of the
+modmail-stats (Wed Jul 02 2025 08:05:47 UTC+0200 (Europe/Amsterdam))" is
+made up of `description` and `details`. The "Daily update of the
+modmail-stats (Wed Jul 02 2025 08:05:47 UTC+0200 (Europe/Amsterdam))" is
+the "details".
+
+***
+
+
+
+### id
+
+> **id**: `string`
+
+A string like `"ModAction_1b1af634-5b87-11f0-a4f1-4ddd27626cc4"`
+identifying the ModAction.
+
+***
+
+
+
+### moderatorId
+
+> **moderatorId**: `string`
+
+The t2_ id of the moderator.
+
+***
+
+
+
+### moderatorName
+
+> **moderatorName**: `string`
+
+The username of the moderator.
+
+***
+
+
+
+### subredditId
+
+> **subredditId**: `string`
+
+The ID of the subreddit the action took place.
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+The name of the subreddit the action took place.
+
+***
+
+
+
+### target?
+
+> `optional` **target**: [`ModActionTarget`](../type-aliases/ModActionTarget.md)
+
+Some context of the affected item of the modaction.
+
+***
+
+
+
+### type
+
+> **type**: [`ModActionType`](../type-aliases/ModActionType.md)
+
+The type of the action. Think of what happened.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AboutSubredditTypes.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AboutSubredditTypes.md
new file mode 100644
index 00000000..9a7f552c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AboutSubredditTypes.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: AboutSubredditTypes
+
+> **AboutSubredditTypes** = `"comment"` \| `"post"` \| `"all"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AddRemovalNoteOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AddRemovalNoteOptions.md
new file mode 100644
index 00000000..7b147be9
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AddRemovalNoteOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: AddRemovalNoteOptions
+
+> **AddRemovalNoteOptions** = `Prettify`\<`PostRemovalNoteRequest`\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AddWidgetData.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AddWidgetData.md
new file mode 100644
index 00000000..b1f9b82f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AddWidgetData.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: AddWidgetData
+
+> **AddWidgetData** = `AddImageWidgetRequest` & `object` \| `AddCalendarWidgetRequest` & `object` \| `AddTextAreaWidgetRequest` & `object` \| `AddButtonWidgetRequest` & `object` \| `AddCommunityListWidgetRequest` & `object` \| `AddPostFlairWidgetRequest` & `object` \| `AddCustomWidgetRequest` & `object`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AllowableFlairContent.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AllowableFlairContent.md
new file mode 100644
index 00000000..5ad52c1d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/AllowableFlairContent.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: AllowableFlairContent
+
+> **AllowableFlairContent** = `"all"` \| `"emoji"` \| `"text"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BackgroundImagePosition.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BackgroundImagePosition.md
new file mode 100644
index 00000000..967e263b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BackgroundImagePosition.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: BackgroundImagePosition
+
+> **BackgroundImagePosition** = `"cover"` \| `"tiled"` \| `"centered"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BanUserOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BanUserOptions.md
new file mode 100644
index 00000000..1aa8b8a0
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BanUserOptions.md
@@ -0,0 +1,77 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: BanUserOptions
+
+> **BanUserOptions** = `object`
+
+## Properties
+
+
+
+### context?
+
+> `optional` **context**: `string`
+
+The id of the post or comment you want to cite as rule breaking.
+
+***
+
+
+
+### duration?
+
+> `optional` **duration**: `number`
+
+The duration of the ban, in days. Use 0 for permanent; otherwise, it must be in the range of 1 to 999.
+
+***
+
+
+
+### message?
+
+> `optional` **message**: `string`
+
+The message to display to the user. (The "Note from the moderators:" in the ban message modmail.)
+
+***
+
+
+
+### note?
+
+> `optional` **note**: `string`
+
+The reason to show in the modlog, and the UI's user notes. This isn't show to the user, just other moderators.
+
+***
+
+
+
+### reason?
+
+> `optional` **reason**: `string`
+
+The reason for the ban. This shows up in the Banned Users Menu.
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+The name of the subreddit you want to ban the user from.
+
+***
+
+
+
+### username
+
+> **username**: `string`
+
+The username of the user you want to ban.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BanWikiContributorOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BanWikiContributorOptions.md
new file mode 100644
index 00000000..79bbfb6d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BanWikiContributorOptions.md
@@ -0,0 +1,47 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: BanWikiContributorOptions
+
+> **BanWikiContributorOptions** = `object`
+
+## Properties
+
+
+
+### duration?
+
+> `optional` **duration**: `number`
+
+***
+
+
+
+### note?
+
+> `optional` **note**: `string`
+
+***
+
+
+
+### reason?
+
+> `optional` **reason**: `string`
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+***
+
+
+
+### username
+
+> **username**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BannerHeight.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BannerHeight.md
new file mode 100644
index 00000000..9173a05b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/BannerHeight.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: BannerHeight
+
+> **BannerHeight** = `"small"` \| `"medium"` \| `"large"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommentMediaTypes.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommentMediaTypes.md
new file mode 100644
index 00000000..d17f4d22
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommentMediaTypes.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CommentMediaTypes
+
+> **CommentMediaTypes** = `"giphy"` \| `"static"` \| `"animated"` \| `"expression"` \| `"video"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommentSort.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommentSort.md
new file mode 100644
index 00000000..b79a48f7
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommentSort.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CommentSort
+
+> **CommentSort** = `"confidence"` \| `"top"` \| `"new"` \| `"controversial"` \| `"old"` \| `"random"` \| `"qa"` \| `"live"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommentSubmissionOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommentSubmissionOptions.md
new file mode 100644
index 00000000..ecdcd462
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommentSubmissionOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CommentSubmissionOptions
+
+> **CommentSubmissionOptions** = \{ `runAs`: `"USER"` \| `"APP"`; `text`: `string`; \} \| \{ `richtext`: `object` \| `RichTextBuilder`; `runAs`: `"USER"` \| `"APP"`; \}
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommonFlair.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommonFlair.md
new file mode 100644
index 00000000..9828711f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommonFlair.md
@@ -0,0 +1,109 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CommonFlair
+
+> **CommonFlair** = `object`
+
+This type is used for both the link and author flairs on Post and Comment objects.
+
+## Properties
+
+
+
+### backgroundColor?
+
+> `optional` **backgroundColor**: `string`
+
+Flair background color as a hex color string (# prefixed) or transparent
+
+#### Example
+
+```ts
+"#FF4500"
+```
+
+***
+
+
+
+### cssClass?
+
+> `optional` **cssClass**: `string`
+
+Custom CSS classes from the subreddit's stylesheet to apply to the flair if rendered as HTML
+
+***
+
+
+
+### richtext
+
+> **richtext**: `object`[]
+
+RichText object representation of the flair
+
+#### elementType?
+
+> `optional` **elementType**: `string`
+
+Enum of element types. e.g. emoji or text
+
+#### emojiRef?
+
+> `optional` **emojiRef**: `string`
+
+Emoji references, e.g. ":rainbow:"
+
+#### text?
+
+> `optional` **text**: `string`
+
+Text to show up in the flair, e.g. "Need Advice"
+
+#### url?
+
+> `optional` **url**: `string`
+
+url string, e.g. "https://reddit.com/"
+
+***
+
+
+
+### templateId?
+
+> `optional` **templateId**: `string`
+
+Flair template ID to use when rendering this flair
+
+***
+
+
+
+### text?
+
+> `optional` **text**: `string`
+
+Plain text representation of the flair
+
+***
+
+
+
+### textColor?
+
+> `optional` **textColor**: `string`
+
+One of: "light", "dark"
+
+***
+
+
+
+### type?
+
+> `optional` **type**: `string`
+
+One of: "text", "richtext"
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommonSubmitPostOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommonSubmitPostOptions.md
new file mode 100644
index 00000000..5a679933
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommonSubmitPostOptions.md
@@ -0,0 +1,63 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CommonSubmitPostOptions
+
+> **CommonSubmitPostOptions** = `object`
+
+## Properties
+
+
+
+### flairId?
+
+> `optional` **flairId**: `string`
+
+***
+
+
+
+### flairText?
+
+> `optional` **flairText**: `string`
+
+***
+
+
+
+### nsfw?
+
+> `optional` **nsfw**: `boolean`
+
+***
+
+
+
+### runAs?
+
+> `optional` **runAs**: `"USER"` \| `"APP"`
+
+***
+
+
+
+### sendreplies?
+
+> `optional` **sendreplies**: `boolean`
+
+***
+
+
+
+### spoiler?
+
+> `optional` **spoiler**: `boolean`
+
+***
+
+
+
+### title
+
+> **title**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommunityNameFormat.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommunityNameFormat.md
new file mode 100644
index 00000000..e0979845
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CommunityNameFormat.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CommunityNameFormat
+
+> **CommunityNameFormat** = `"slashtag"` \| `"pretty"` \| `"hide"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationData.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationData.md
new file mode 100644
index 00000000..e795e195
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationData.md
@@ -0,0 +1,218 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ConversationData
+
+> **ConversationData** = `object`
+
+## Properties
+
+
+
+### authors
+
+> **authors**: [`Participant`](Participant.md)[]
+
+The authors of each message in the modmail conversation.
+
+***
+
+
+
+### conversationType?
+
+> `optional` **conversationType**: `string`
+
+A ConversationType specifies whether a conversation is with a subreddit
+itself, with another user, or with another subreddit entirely.
+- `sr_user` - This is a conversation with another user outside of the
+ subreddit. The participant ID is that user's ID.
+- `internal` - This is a Mod Discussion, internal to the subreddit. There
+ is no other participant.
+- `sr_sr` - This is a conversation is with another subreddit. The
+ participant will have a subreddit ID.
+
+***
+
+
+
+### id?
+
+> `optional` **id**: `string`
+
+Conversation ID
+
+***
+
+
+
+### isAuto?
+
+> `optional` **isAuto**: `boolean`
+
+Is the conversation automatically generated e.g. from automod, u/reddit
+
+***
+
+
+
+### isHighlighted?
+
+> `optional` **isHighlighted**: `boolean`
+
+Is the conversation highlighted
+
+***
+
+
+
+### isInternal?
+
+> `optional` **isInternal**: `boolean`
+
+Is the conversation internal (i.e. mod only)
+
+***
+
+
+
+### lastModUpdate?
+
+> `optional` **lastModUpdate**: `string`
+
+The last datetime a mod from the owning subreddit made any interaction
+with the conversation.
+
+(Note that if this is a subreddit to subreddit conversation, the mods of
+the participant subreddit are irrelevant and do not affect this field.)
+
+***
+
+
+
+### lastUnread?
+
+> `optional` **lastUnread**: `string`
+
+The datetime of the last unread message within this conversation for the current viewer.
+
+***
+
+
+
+### lastUpdated?
+
+> `optional` **lastUpdated**: `string`
+
+The datetime of the last time the conversation was update.
+
+***
+
+
+
+### lastUserUpdate?
+
+> `optional` **lastUserUpdate**: `string`
+
+The last datetime a user made any interaction with the conversation
+
+***
+
+
+
+### messages
+
+> **messages**: `object`
+
+Conversation messages
+
+#### Index Signature
+
+\[`id`: `string`\]: [`MessageData`](MessageData.md)
+
+#### Example
+
+```ts
+const arrayOfMessages = Object.values(conversation.messages);
+const messageById = conversation.messages[messageId];
+```
+
+***
+
+
+
+### modActions
+
+> **modActions**: `object`
+
+Conversation mod actions
+
+#### Index Signature
+
+\[`id`: `string`\]: [`ModActionData`](ModActionData.md)
+
+#### Example
+
+```ts
+const arrayOfModActions = Object.values(conversation.modActions);
+const modActionById = conversation.modActions[modActionId];
+```
+
+***
+
+
+
+### numMessages?
+
+> `optional` **numMessages**: `number`
+
+Number of messages (not actions) in the conversation
+
+***
+
+
+
+### participant?
+
+> `optional` **participant**: [`Participant`](Participant.md)
+
+Participant. Is absent for mod discussions
+
+***
+
+
+
+### state?
+
+> `optional` **state**: [`ModMailConversationState`](../enumerations/ModMailConversationState.md)
+
+State of the conversation
+
+***
+
+
+
+### subject?
+
+> `optional` **subject**: `string`
+
+Suject of the conversation
+
+***
+
+
+
+### subreddit?
+
+> `optional` **subreddit**: `object`
+
+Subreddit owning the modmail conversation
+
+#### displayName?
+
+> `optional` **displayName**: `string`
+
+#### id?
+
+> `optional` **id**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationResponse.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationResponse.md
new file mode 100644
index 00000000..01da96f6
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationResponse.md
@@ -0,0 +1,15 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ConversationResponse
+
+> **ConversationResponse** = `object`
+
+## Properties
+
+
+
+### conversation
+
+> **conversation**: [`ConversationData`](ConversationData.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationStateFilter.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationStateFilter.md
new file mode 100644
index 00000000..9dd968c7
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationStateFilter.md
@@ -0,0 +1,12 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ConversationStateFilter
+
+> **ConversationStateFilter** = `"all"` \| `"new"` \| `"inprogress"` \| `"archived"` \| `"appeals"` \| `"join_requests"` \| `"highlighted"` \| `"mod"` \| `"notifications"` \| `"inbox"` \| `"filtered"` \| `"default"`
+
+A Conversation State is a way in which conversations may be filtered within the UI.
+
+A conversation can be in more than one state.
+For example, a conversation may be both 'highlighted' and 'inprogress'.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationUserData.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationUserData.md
new file mode 100644
index 00000000..92a74c61
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ConversationUserData.md
@@ -0,0 +1,155 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ConversationUserData
+
+> **ConversationUserData** = `object`
+
+## Properties
+
+
+
+### approveStatus?
+
+> `optional` **approveStatus**: `object`
+
+#### isApproved?
+
+> `optional` **isApproved**: `boolean`
+
+***
+
+
+
+### banStatus?
+
+> `optional` **banStatus**: `object`
+
+#### endDate?
+
+> `optional` **endDate**: `string`
+
+#### isBanned?
+
+> `optional` **isBanned**: `boolean`
+
+#### isPermanent?
+
+> `optional` **isPermanent**: `boolean`
+
+#### reason?
+
+> `optional` **reason**: `string`
+
+***
+
+
+
+### created?
+
+> `optional` **created**: `string`
+
+When was created
+
+***
+
+
+
+### id?
+
+> `optional` **id**: `string`
+
+User ID
+
+***
+
+
+
+### isShadowBanned?
+
+> `optional` **isShadowBanned**: `boolean`
+
+***
+
+
+
+### isSuspended?
+
+> `optional` **isSuspended**: `boolean`
+
+***
+
+
+
+### muteStatus?
+
+> `optional` **muteStatus**: `object`
+
+#### endDate?
+
+> `optional` **endDate**: `string`
+
+#### isMuted?
+
+> `optional` **isMuted**: `boolean`
+
+#### muteCount?
+
+> `optional` **muteCount**: `number`
+
+#### reason?
+
+> `optional` **reason**: `string`
+
+***
+
+
+
+### name?
+
+> `optional` **name**: `string`
+
+Username
+
+***
+
+
+
+### recentComments
+
+> **recentComments**: `object`
+
+Recent comments
+
+#### Index Signature
+
+\[`id`: `string`\]: `object`
+
+***
+
+
+
+### recentConvos
+
+> **recentConvos**: `object`
+
+Recent conversations
+
+#### Index Signature
+
+\[`id`: `string`\]: `object`
+
+***
+
+
+
+### recentPosts
+
+> **recentPosts**: `object`
+
+Recent posts
+
+#### Index Signature
+
+\[`id`: `string`\]: `object`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateFlairTemplateOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateFlairTemplateOptions.md
new file mode 100644
index 00000000..b79c8e4e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateFlairTemplateOptions.md
@@ -0,0 +1,85 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CreateFlairTemplateOptions
+
+> **CreateFlairTemplateOptions** = `object`
+
+## Properties
+
+
+
+### allowableContent?
+
+> `optional` **allowableContent**: [`AllowableFlairContent`](AllowableFlairContent.md)
+
+The flair template's allowable content. Either 'all', 'emoji', or 'text'.
+
+***
+
+
+
+### allowUserEdits?
+
+> `optional` **allowUserEdits**: `boolean`
+
+Whether or not users are allowed to edit this flair template before using it.
+
+***
+
+
+
+### backgroundColor?
+
+> `optional` **backgroundColor**: `string`
+
+The background color of the flair. Either 'transparent' or a hex color code. e.g. #FFC0CB
+
+***
+
+
+
+### maxEmojis?
+
+> `optional` **maxEmojis**: `number`
+
+***
+
+
+
+### modOnly?
+
+> `optional` **modOnly**: `boolean`
+
+Whether or not this flair template is only available to moderators.
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+The name of the subreddit to create the flair template in.
+
+***
+
+
+
+### text
+
+> **text**: `string`
+
+The text to display in the flair.
+
+***
+
+
+
+### textColor?
+
+> `optional` **textColor**: [`FlairTextColor`](FlairTextColor.md)
+
+Either 'dark' or 'light'.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateModNoteOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateModNoteOptions.md
new file mode 100644
index 00000000..ab23a7a4
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateModNoteOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CreateModNoteOptions
+
+> **CreateModNoteOptions** = `Prettify`\<`PostNotesRequest` & `object`\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateRelationshipOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateRelationshipOptions.md
new file mode 100644
index 00000000..3a32b6d1
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateRelationshipOptions.md
@@ -0,0 +1,81 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CreateRelationshipOptions
+
+> **CreateRelationshipOptions** = `object`
+
+## Properties
+
+
+
+### banContext?
+
+> `optional` **banContext**: `string`
+
+The ID of the post or comment that caused the ban.
+
+***
+
+
+
+### banMessage?
+
+> `optional` **banMessage**: `string`
+
+***
+
+
+
+### banReason?
+
+> `optional` **banReason**: `string`
+
+***
+
+
+
+### duration?
+
+> `optional` **duration**: `number`
+
+***
+
+
+
+### note?
+
+> `optional` **note**: `string`
+
+***
+
+
+
+### permissions?
+
+> `optional` **permissions**: [`ModeratorPermission`](ModeratorPermission.md)[]
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+***
+
+
+
+### type
+
+> **type**: [`RelationshipType`](RelationshipType.md)
+
+***
+
+
+
+### username
+
+> **username**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateRuleOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateRuleOptions.md
new file mode 100644
index 00000000..1cb184d2
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateRuleOptions.md
@@ -0,0 +1,19 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CreateRuleOptions
+
+> **CreateRuleOptions** = `Omit`\<`AddSubredditRuleRequest`, `"r"` \| `"kind"` \| `"violationReason"`\> & `object`
+
+Options for creating a new subreddit rule.
+
+## Type declaration
+
+### kind
+
+> **kind**: `"all"` \| `"link"` \| `"comment"`
+
+### violationReason?
+
+> `optional` **violationReason**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateWikiPageOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateWikiPageOptions.md
new file mode 100644
index 00000000..96092683
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CreateWikiPageOptions.md
@@ -0,0 +1,47 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CreateWikiPageOptions
+
+> **CreateWikiPageOptions** = `object`
+
+## Properties
+
+
+
+### content
+
+> **content**: `string`
+
+The content of the page.
+
+***
+
+
+
+### page
+
+> **page**: `string`
+
+The name of the page to create.
+
+***
+
+
+
+### reason?
+
+> `optional` **reason**: `string`
+
+The reason for creating the page.
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+The name of the subreddit to create the page in.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CrosspostOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CrosspostOptions.md
new file mode 100644
index 00000000..2f5b209b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CrosspostOptions.md
@@ -0,0 +1,17 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CrosspostOptions
+
+> **CrosspostOptions** = [`CommonSubmitPostOptions`](CommonSubmitPostOptions.md) & `object`
+
+## Type declaration
+
+### postId
+
+> **postId**: `string`
+
+### subredditName
+
+> **subredditName**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CrowdControlLevel.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CrowdControlLevel.md
new file mode 100644
index 00000000..e2c75eed
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CrowdControlLevel.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CrowdControlLevel
+
+> **CrowdControlLevel** = `"OFF"` \| `"LENIENT"` \| `"MEDIUM"` \| `"STRICT"`
+
+Crowd control level for posts. Determines which comments should be collapsed due to crowd control.
+OFF: Anyone with a Reddit account can comment freely.
+LENIENT: Collapse comments from people who have negative karma in your community.
+MEDIUM: Collapse comments from new Reddit users and people with negative karma in your community.
+STRICT: Collapse comments from people who haven’t joined your community, new Reddit users, and people with negative karma in your community
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CustomPostRichTextFallback.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CustomPostRichTextFallback.md
new file mode 100644
index 00000000..6591abc9
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CustomPostRichTextFallback.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CustomPostRichTextFallback
+
+> **CustomPostRichTextFallback** = `RichTextBuilder` \| `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CustomPostTextFallbackOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CustomPostTextFallbackOptions.md
new file mode 100644
index 00000000..3e830420
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CustomPostTextFallbackOptions.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CustomPostTextFallbackOptions
+
+> **CustomPostTextFallbackOptions** = \{ `text`: `string`; \} \| \{ `richtext`: [`CustomPostRichTextFallback`](CustomPostRichTextFallback.md); \}
+
+## Type declaration
+
+\{ `text`: `string`; \}
+
+### text
+
+> **text**: `string`
+
+May also include markdown. See https://www.reddit.com/r/reddit.com/wiki/markdown/
+
+\{ `richtext`: [`CustomPostRichTextFallback`](CustomPostRichTextFallback.md); \}
+
+### richtext
+
+> **richtext**: [`CustomPostRichTextFallback`](CustomPostRichTextFallback.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CustomizationFlag.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CustomizationFlag.md
new file mode 100644
index 00000000..e4ef035d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/CustomizationFlag.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: CustomizationFlag
+
+> **CustomizationFlag** = `"default"` \| `"custom"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/DeleteNotesOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/DeleteNotesOptions.md
new file mode 100644
index 00000000..3b626e64
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/DeleteNotesOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: DeleteNotesOptions
+
+> **DeleteNotesOptions** = `Prettify`\<`DeleteNotesRequest`\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/EditCommentOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/EditCommentOptions.md
new file mode 100644
index 00000000..4313d470
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/EditCommentOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: EditCommentOptions
+
+> **EditCommentOptions** = [`CommentSubmissionOptions`](CommentSubmissionOptions.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/EditFlairTemplateOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/EditFlairTemplateOptions.md
new file mode 100644
index 00000000..abdd60a9
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/EditFlairTemplateOptions.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: EditFlairTemplateOptions
+
+> **EditFlairTemplateOptions** = [`CreateFlairTemplateOptions`](CreateFlairTemplateOptions.md) & `object`
+
+## Type declaration
+
+### id
+
+> **id**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/EnrichedThumbnail.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/EnrichedThumbnail.md
new file mode 100644
index 00000000..721010c3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/EnrichedThumbnail.md
@@ -0,0 +1,73 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: EnrichedThumbnail
+
+> **EnrichedThumbnail** = `object`
+
+Contains data about a post's thumbnail. Also contains a blurred version if the thumbnail is NSFW.
+
+## Properties
+
+
+
+### attribution?
+
+> `optional` **attribution**: `string`
+
+Attribution text for the thumbnail
+
+***
+
+
+
+### image
+
+> **image**: `object`
+
+The image used for the thumbnail. May have different resolution from Post.thumbnail
+
+#### height
+
+> **height**: `number`
+
+#### url
+
+> **url**: `string`
+
+#### width
+
+> **width**: `number`
+
+***
+
+
+
+### isObfuscatedDefault
+
+> **isObfuscatedDefault**: `boolean`
+
+Whether this thumbnail appears blurred by default
+
+***
+
+
+
+### obfuscatedImage?
+
+> `optional` **obfuscatedImage**: `object`
+
+The blurred image for NSFW thumbnails
+
+#### height
+
+> **height**: `number`
+
+#### url
+
+> **url**: `string`
+
+#### width
+
+> **width**: `number`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/FlairBackgroundColor.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/FlairBackgroundColor.md
new file mode 100644
index 00000000..d5608d19
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/FlairBackgroundColor.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: FlairBackgroundColor
+
+> **FlairBackgroundColor** = `` `#${string}` `` \| `"transparent"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/FlairSettings.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/FlairSettings.md
new file mode 100644
index 00000000..0aa3c317
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/FlairSettings.md
@@ -0,0 +1,39 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: FlairSettings
+
+> **FlairSettings** = `object`
+
+## Properties
+
+
+
+### enabled
+
+> **enabled**: `boolean`
+
+***
+
+
+
+### userFlairBackgroundColor?
+
+> `optional` **userFlairBackgroundColor**: `string`
+
+***
+
+
+
+### userFlairTextColor?
+
+> `optional` **userFlairTextColor**: `string`
+
+***
+
+
+
+### usersCanAssign
+
+> **usersCanAssign**: `boolean`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/FlairTextColor.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/FlairTextColor.md
new file mode 100644
index 00000000..73ad4d10
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/FlairTextColor.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: FlairTextColor
+
+> **FlairTextColor** = `"light"` \| `"dark"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GalleryMedia.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GalleryMedia.md
new file mode 100644
index 00000000..f4335987
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GalleryMedia.md
@@ -0,0 +1,43 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GalleryMedia
+
+> **GalleryMedia** = `object`
+
+Represents media that the post may contain.
+
+## Properties
+
+
+
+### height
+
+> **height**: `number`
+
+***
+
+
+
+### status
+
+> **status**: [`GalleryMediaStatus`](GalleryMediaStatus.md)
+
+Status of the media. Media that were successfully uplaoded will have GalleryMediaStatus.VALID status
+
+***
+
+
+
+### url
+
+> **url**: `string`
+
+***
+
+
+
+### width
+
+> **width**: `number`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GalleryMediaStatus.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GalleryMediaStatus.md
new file mode 100644
index 00000000..5d0de639
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GalleryMediaStatus.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GalleryMediaStatus
+
+> **GalleryMediaStatus** = *typeof* `GalleryMediaStatusProto`\[keyof *typeof* `GalleryMediaStatusProto`\]
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetBestPostsOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetBestPostsOptions.md
new file mode 100644
index 00000000..f1ece267
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetBestPostsOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetBestPostsOptions
+
+> **GetBestPostsOptions** = [`ListingFetchOptions`](ListingFetchOptions.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetCommentsByUserOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetCommentsByUserOptions.md
new file mode 100644
index 00000000..876170db
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetCommentsByUserOptions.md
@@ -0,0 +1,63 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetCommentsByUserOptions
+
+> **GetCommentsByUserOptions** = `object`
+
+## Properties
+
+
+
+### after?
+
+> `optional` **after**: `string`
+
+***
+
+
+
+### before?
+
+> `optional` **before**: `string`
+
+***
+
+
+
+### limit?
+
+> `optional` **limit**: `number`
+
+***
+
+
+
+### pageSize?
+
+> `optional` **pageSize**: `number`
+
+***
+
+
+
+### sort?
+
+> `optional` **sort**: `"hot"` \| `"new"` \| `"top"` \| `"controversial"`
+
+***
+
+
+
+### timeframe?
+
+> `optional` **timeframe**: `"hour"` \| `"day"` \| `"week"` \| `"month"` \| `"year"` \| `"all"`
+
+***
+
+
+
+### username
+
+> **username**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetCommentsOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetCommentsOptions.md
new file mode 100644
index 00000000..f719c8f1
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetCommentsOptions.md
@@ -0,0 +1,55 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetCommentsOptions
+
+> **GetCommentsOptions** = `object`
+
+## Properties
+
+
+
+### commentId?
+
+> `optional` **commentId**: `string`
+
+***
+
+
+
+### depth?
+
+> `optional` **depth**: `number`
+
+***
+
+
+
+### limit?
+
+> `optional` **limit**: `number`
+
+***
+
+
+
+### pageSize?
+
+> `optional` **pageSize**: `number`
+
+***
+
+
+
+### postId
+
+> **postId**: `string`
+
+***
+
+
+
+### sort?
+
+> `optional` **sort**: [`CommentSort`](CommentSort.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetConversationResponse.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetConversationResponse.md
new file mode 100644
index 00000000..d2df7c95
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetConversationResponse.md
@@ -0,0 +1,19 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetConversationResponse
+
+> **GetConversationResponse** = `object` & [`WithUserData`](WithUserData.md)
+
+## Type declaration
+
+### conversation?
+
+> `optional` **conversation**: [`ConversationData`](ConversationData.md)
+
+### participantSubreddit?
+
+> `optional` **participantSubreddit**: `ParticipantSubreddit`
+
+If the conversation is with another subreddit, what subreddit we are communicating with.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetConversationsRequest.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetConversationsRequest.md
new file mode 100644
index 00000000..c13636c4
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetConversationsRequest.md
@@ -0,0 +1,64 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetConversationsRequest
+
+> **GetConversationsRequest** = `object`
+
+## Properties
+
+
+
+### after?
+
+> `optional` **after**: `string`
+
+modmail conversation id
+
+***
+
+
+
+### limit?
+
+> `optional` **limit**: `number`
+
+an integer between 1 and 100 (default: 25)
+
+***
+
+
+
+### sort?
+
+> `optional` **sort**: `"recent"` \| `"mod"` \| `"user"` \| `"unread"`
+
+Sort by:
+- `recent` - Order by whenever anyone last updated the conversation, mod or participant
+- `mod` - Order by the last time a mod updated the conversation
+- `user` - Order by the last time a participant user updated the conversation
+- `unread` - Order by the most recent unread message in the conversation for this mod
+
+***
+
+
+
+### state?
+
+> `optional` **state**: [`ConversationStateFilter`](ConversationStateFilter.md)
+
+Filter by conversation state
+
+A conversation can be in more than one state.
+For example, a conversation may be both 'highlighted' and 'inprogress'.
+
+***
+
+
+
+### subreddits?
+
+> `optional` **subreddits**: `string`[]
+
+array of subreddit names
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetConversationsResponse.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetConversationsResponse.md
new file mode 100644
index 00000000..0fdce0df
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetConversationsResponse.md
@@ -0,0 +1,39 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetConversationsResponse
+
+> **GetConversationsResponse** = `object`
+
+## Properties
+
+
+
+### conversationIds
+
+> **conversationIds**: `string`[]
+
+Array of conversation ids, ordered by the sort parameter specified in [GetConversationsRequest](GetConversationsRequest.md).
+
+***
+
+
+
+### conversations
+
+> **conversations**: `object`
+
+Conversations key-value map
+
+#### Index Signature
+
+\[`id`: `string`\]: [`ConversationData`](ConversationData.md)
+
+***
+
+
+
+### viewerId?
+
+> `optional` **viewerId**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetDuplicatesOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetDuplicatesOptions.md
new file mode 100644
index 00000000..3b41c174
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetDuplicatesOptions.md
@@ -0,0 +1,39 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetDuplicatesOptions
+
+> **GetDuplicatesOptions** = [`ListingFetchOptions`](ListingFetchOptions.md) & `object`
+
+## Type declaration
+
+### crosspostsOnly?
+
+> `optional` **crosspostsOnly**: `boolean`
+
+Only return duplicates that are crossposting this post.
+
+### postId
+
+> **postId**: `T3ID`
+
+Post ID with t3_ prefix (e.g. `t3_abc123`). The prefix is stripped internally.
+
+### show?
+
+> `optional` **show**: `string`
+
+Adding the string "all" will show all results regardless of user preferences.
+
+### sort?
+
+> `optional` **sort**: `"num_comments"` \| `"new"`
+
+One of: "num_comments", "new"
+
+### subredditName?
+
+> `optional` **subredditName**: `string`
+
+Limit search to the given subreddit name. The r/ prefix is optional.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetHotPostsOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetHotPostsOptions.md
new file mode 100644
index 00000000..996aec86
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetHotPostsOptions.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetHotPostsOptions
+
+> **GetHotPostsOptions** = [`GetPostsOptions`](GetPostsOptions.md) & `object`
+
+## Type declaration
+
+### location?
+
+> `optional` **location**: `"GLOBAL"` \| `"US"` \| `"AR"` \| `"AU"` \| `"BG"` \| `"CA"` \| `"CL"` \| `"CO"` \| `"HR"` \| `"CZ"` \| `"FI"` \| `"FR"` \| `"DE"` \| `"GR"` \| `"HU"` \| `"IS"` \| `"IN"` \| `"IE"` \| `"IT"` \| `"JP"` \| `"MY"` \| `"MX"` \| `"NZ"` \| `"PH"` \| `"PL"` \| `"PT"` \| `"PR"` \| `"RO"` \| `"RS"` \| `"SG"` \| `"ES"` \| `"SE"` \| `"TW"` \| `"TH"` \| `"TR"` \| `"GB"` \| `"US_WA"` \| `"US_DE"` \| `"US_DC"` \| `"US_WI"` \| `"US_WV"` \| `"US_HI"` \| `"US_FL"` \| `"US_WY"` \| `"US_NH"` \| `"US_NJ"` \| `"US_NM"` \| `"US_TX"` \| `"US_LA"` \| `"US_NC"` \| `"US_ND"` \| `"US_NE"` \| `"US_TN"` \| `"US_NY"` \| `"US_PA"` \| `"US_CA"` \| `"US_NV"` \| `"US_VA"` \| `"US_CO"` \| `"US_AK"` \| `"US_AL"` \| `"US_AR"` \| `"US_VT"` \| `"US_IL"` \| `"US_GA"` \| `"US_IN"` \| `"US_IA"` \| `"US_OK"` \| `"US_AZ"` \| `"US_ID"` \| `"US_CT"` \| `"US_ME"` \| `"US_MD"` \| `"US_MA"` \| `"US_OH"` \| `"US_UT"` \| `"US_MO"` \| `"US_MN"` \| `"US_MI"` \| `"US_RI"` \| `"US_KS"` \| `"US_MT"` \| `"US_MS"` \| `"US_SC"` \| `"US_KY"` \| `"US_OR"` \| `"US_SD"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetModNotesOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetModNotesOptions.md
new file mode 100644
index 00000000..cb92502b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetModNotesOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetModNotesOptions
+
+> **GetModNotesOptions** = `Prettify`\<`Pick`\<`GetNotesRequest`, `"subreddit"` \| `"user"`\> & `object` & `Pick`\<[`ListingFetchOptions`](ListingFetchOptions.md), `"limit"` \| `"before"`\>\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetModerationLogOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetModerationLogOptions.md
new file mode 100644
index 00000000..241426ae
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetModerationLogOptions.md
@@ -0,0 +1,27 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetModerationLogOptions
+
+> **GetModerationLogOptions** = [`ListingFetchOptions`](ListingFetchOptions.md) & `object`
+
+## Type declaration
+
+### moderatorUsernames?
+
+> `optional` **moderatorUsernames**: `string`[]
+
+(optional) A moderator filter. Accepts an array of usernames
+
+### subredditName
+
+> **subredditName**: `string`
+
+Subreddit name
+
+### type?
+
+> `optional` **type**: [`ModActionType`](ModActionType.md)
+
+Type of the Moderator action
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPageRevisionsOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPageRevisionsOptions.md
new file mode 100644
index 00000000..ed9e074c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPageRevisionsOptions.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetPageRevisionsOptions
+
+> **GetPageRevisionsOptions** = `Omit`\<[`ListingFetchOptions`](ListingFetchOptions.md), `"more"`\> & `object`
+
+## Type declaration
+
+### page?
+
+> `optional` **page**: `string`
+
+The name of the page to get revisions for.
+
+### subredditName
+
+> **subredditName**: `string`
+
+The name of the subreddit the page is in.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPostsByUserOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPostsByUserOptions.md
new file mode 100644
index 00000000..5e2c44a1
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPostsByUserOptions.md
@@ -0,0 +1,63 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetPostsByUserOptions
+
+> **GetPostsByUserOptions** = `object`
+
+## Properties
+
+
+
+### after?
+
+> `optional` **after**: `string`
+
+***
+
+
+
+### before?
+
+> `optional` **before**: `string`
+
+***
+
+
+
+### limit?
+
+> `optional` **limit**: `number`
+
+***
+
+
+
+### pageSize?
+
+> `optional` **pageSize**: `number`
+
+***
+
+
+
+### sort?
+
+> `optional` **sort**: `"hot"` \| `"new"` \| `"top"` \| `"controversial"`
+
+***
+
+
+
+### timeframe?
+
+> `optional` **timeframe**: `"hour"` \| `"day"` \| `"week"` \| `"month"` \| `"year"` \| `"all"`
+
+***
+
+
+
+### username
+
+> **username**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPostsOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPostsOptions.md
new file mode 100644
index 00000000..a29df03e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPostsOptions.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetPostsOptions
+
+> **GetPostsOptions** = [`ListingFetchOptions`](ListingFetchOptions.md) & `object`
+
+## Type declaration
+
+### subredditName?
+
+> `optional` **subredditName**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPostsOptionsWithTimeframe.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPostsOptionsWithTimeframe.md
new file mode 100644
index 00000000..75745ed2
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPostsOptionsWithTimeframe.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetPostsOptionsWithTimeframe
+
+> **GetPostsOptionsWithTimeframe** = [`GetPostsOptions`](GetPostsOptions.md) & `object`
+
+## Type declaration
+
+### timeframe?
+
+> `optional` **timeframe**: `"hour"` \| `"day"` \| `"week"` \| `"month"` \| `"year"` \| `"all"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPrivateMessagesOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPrivateMessagesOptions.md
new file mode 100644
index 00000000..27faf7d2
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetPrivateMessagesOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetPrivateMessagesOptions
+
+> **GetPrivateMessagesOptions** = `Prettify`\<`object` & [`ListingFetchOptions`](ListingFetchOptions.md)\>
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetSortedPostsOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetSortedPostsOptions.md
new file mode 100644
index 00000000..2d085c89
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetSortedPostsOptions.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetSortedPostsOptions
+
+> **GetSortedPostsOptions** = [`GetPostsOptionsWithTimeframe`](GetPostsOptionsWithTimeframe.md) & `object`
+
+## Type declaration
+
+### sort
+
+> **sort**: `"top"` \| `"controversial"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetSubredditUsersByTypeOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetSubredditUsersByTypeOptions.md
new file mode 100644
index 00000000..dbbfc4a2
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetSubredditUsersByTypeOptions.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetSubredditUsersByTypeOptions
+
+> **GetSubredditUsersByTypeOptions** = [`ListingFetchOptions`](ListingFetchOptions.md) & `object`
+
+## Type declaration
+
+### subredditName
+
+> **subredditName**: `string`
+
+### type
+
+> **type**: `"banned"` \| `"muted"` \| `"wikibanned"` \| `"contributors"` \| `"wikicontributors"` \| `"moderators"`
+
+### username?
+
+> `optional` **username**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserFlairBySubredditOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserFlairBySubredditOptions.md
new file mode 100644
index 00000000..19ece061
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserFlairBySubredditOptions.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetUserFlairBySubredditOptions
+
+> **GetUserFlairBySubredditOptions** = [`UserFlairPageOptions`](UserFlairPageOptions.md) & `object`
+
+## Type declaration
+
+### name?
+
+> `optional` **name**: `string`
+
+The username associated with the flair being retrieved.
+
+### subreddit
+
+> **subreddit**: `string`
+
+The subreddit associated with the flair being retrieved.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserFlairBySubredditResponse.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserFlairBySubredditResponse.md
new file mode 100644
index 00000000..cb76db4d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserFlairBySubredditResponse.md
@@ -0,0 +1,41 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetUserFlairBySubredditResponse
+
+> **GetUserFlairBySubredditResponse** = `object`
+
+## Properties
+
+
+
+### next?
+
+> `optional` **next**: `string`
+
+The user id of the last user flair in this slice. Its presence indicates
+that there are more items that can be fetched. Pass this into the "after" parameter
+in the next call to get the next slice of data
+
+***
+
+
+
+### prev?
+
+> `optional` **prev**: `string`
+
+The user id of the first user flair in this slice. Its presence indicates
+that there are items before this item that can be fetched. Pass this into the "before" parameter
+in the next call to get the previous slice of data
+
+***
+
+
+
+### users
+
+> **users**: [`UserFlair`](UserFlair.md)[]
+
+The list of user flair
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserFlairOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserFlairOptions.md
new file mode 100644
index 00000000..f1dc73b3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserFlairOptions.md
@@ -0,0 +1,16 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetUserFlairOptions
+
+> **GetUserFlairOptions** = [`UserFlairPageOptions`](UserFlairPageOptions.md) & `object`
+
+## Type declaration
+
+### usernames?
+
+> `optional` **usernames**: `string`[]
+
+If provide the method will return the flairs for the provided users, if not provided
+it will return a list of all users assigned flairs in the subreddit
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserOverviewOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserOverviewOptions.md
new file mode 100644
index 00000000..69b13fc8
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/GetUserOverviewOptions.md
@@ -0,0 +1,63 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: GetUserOverviewOptions
+
+> **GetUserOverviewOptions** = `object`
+
+## Properties
+
+
+
+### after?
+
+> `optional` **after**: `string`
+
+***
+
+
+
+### before?
+
+> `optional` **before**: `string`
+
+***
+
+
+
+### limit?
+
+> `optional` **limit**: `number`
+
+***
+
+
+
+### pageSize?
+
+> `optional` **pageSize**: `number`
+
+***
+
+
+
+### sort?
+
+> `optional` **sort**: `"hot"` \| `"new"` \| `"top"` \| `"controversial"`
+
+***
+
+
+
+### timeframe?
+
+> `optional` **timeframe**: `"hour"` \| `"day"` \| `"week"` \| `"month"` \| `"year"` \| `"all"`
+
+***
+
+
+
+### username
+
+> **username**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ImagePosition.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ImagePosition.md
new file mode 100644
index 00000000..266f2068
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ImagePosition.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ImagePosition
+
+> **ImagePosition** = `"cover"` \| `"tiled"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/InternalSetPostFlairOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/InternalSetPostFlairOptions.md
new file mode 100644
index 00000000..e10aabe7
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/InternalSetPostFlairOptions.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: InternalSetPostFlairOptions
+
+> **InternalSetPostFlairOptions** = [`SetFlairOptions`](SetFlairOptions.md) & `object`
+
+## Type declaration
+
+### postId
+
+> **postId**: `T3ID`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/LinkFlair.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/LinkFlair.md
new file mode 100644
index 00000000..1e976403
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/LinkFlair.md
@@ -0,0 +1,11 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ~~LinkFlair~~
+
+> **LinkFlair** = [`CommonFlair`](CommonFlair.md)
+
+## Deprecated
+
+Use [CommonFlair](CommonFlair.md).
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ListingFetchOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ListingFetchOptions.md
new file mode 100644
index 00000000..0af4a7c9
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ListingFetchOptions.md
@@ -0,0 +1,55 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ListingFetchOptions
+
+> **ListingFetchOptions** = `object`
+
+## Properties
+
+
+
+### after?
+
+> `optional` **after**: `string`
+
+The ID of the object to start at.
+
+***
+
+
+
+### before?
+
+> `optional` **before**: `string`
+
+The ID of the object to end at.
+
+***
+
+
+
+### limit?
+
+> `optional` **limit**: `number`
+
+The maximum number of objects to get.
+
+***
+
+
+
+### more?
+
+> `optional` **more**: [`MoreObject`](MoreObject.md)
+
+***
+
+
+
+### pageSize?
+
+> `optional` **pageSize**: `number`
+
+The number of objects to get per request.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ListingFetchResponse.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ListingFetchResponse.md
new file mode 100644
index 00000000..a30da2a4
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ListingFetchResponse.md
@@ -0,0 +1,45 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ListingFetchResponse\
+
+> **ListingFetchResponse**\<`T`\> = `object`
+
+## Type Parameters
+
+### T
+
+`T`
+
+## Properties
+
+
+
+### after?
+
+> `optional` **after**: `string`
+
+***
+
+
+
+### before?
+
+> `optional` **before**: `string`
+
+***
+
+
+
+### children
+
+> **children**: `T`[]
+
+***
+
+
+
+### more?
+
+> `optional` **more**: [`MoreObject`](MoreObject.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/MenuPosition.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/MenuPosition.md
new file mode 100644
index 00000000..d9e7efdc
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/MenuPosition.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: MenuPosition
+
+> **MenuPosition** = `"default"` \| `"overlay"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/MessageData.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/MessageData.md
new file mode 100644
index 00000000..11cb7d10
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/MessageData.md
@@ -0,0 +1,69 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: MessageData
+
+> **MessageData** = `object`
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: [`Participant`](Participant.md)
+
+***
+
+
+
+### body?
+
+> `optional` **body**: `string`
+
+Message body
+
+***
+
+
+
+### bodyMarkdown?
+
+> `optional` **bodyMarkdown**: `string`
+
+***
+
+
+
+### date?
+
+> `optional` **date**: `string`
+
+When was created
+
+***
+
+
+
+### id?
+
+> `optional` **id**: `string`
+
+Message ID
+
+***
+
+
+
+### isInternal?
+
+> `optional` **isInternal**: `boolean`
+
+***
+
+
+
+### participatingAs?
+
+> `optional` **participatingAs**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModActionData.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModActionData.md
new file mode 100644
index 00000000..ca320742
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModActionData.md
@@ -0,0 +1,75 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ModActionData
+
+> **ModActionData** = `object`
+
+## Properties
+
+
+
+### actionType
+
+> **actionType**: [`ModMailActionType`](../enumerations/ModMailActionType.md)
+
+Type of the action
+
+***
+
+
+
+### author?
+
+> `optional` **author**: `object`
+
+Action author
+
+#### id?
+
+> `optional` **id**: `number`
+
+User id
+
+#### isAdmin?
+
+> `optional` **isAdmin**: `boolean`
+
+#### isDeleted?
+
+> `optional` **isDeleted**: `boolean`
+
+#### isHidden?
+
+> `optional` **isHidden**: `boolean`
+
+#### isMod?
+
+> `optional` **isMod**: `boolean`
+
+#### name?
+
+> `optional` **name**: `string`
+
+User name
+
+***
+
+
+
+### date?
+
+> `optional` **date**: `string`
+
+When the action happened
+
+***
+
+
+
+### id?
+
+> `optional` **id**: `string`
+
+Action id
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModActionTarget.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModActionTarget.md
new file mode 100644
index 00000000..f31d458b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModActionTarget.md
@@ -0,0 +1,47 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ModActionTarget
+
+> **ModActionTarget** = `object`
+
+## Properties
+
+
+
+### author?
+
+> `optional` **author**: `string`
+
+***
+
+
+
+### body?
+
+> `optional` **body**: `string`
+
+***
+
+
+
+### id
+
+> **id**: `string`
+
+***
+
+
+
+### permalink?
+
+> `optional` **permalink**: `string`
+
+***
+
+
+
+### title?
+
+> `optional` **title**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModActionType.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModActionType.md
new file mode 100644
index 00000000..33e9b088
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModActionType.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ModActionType
+
+> **ModActionType** = `"banuser"` \| `"unbanuser"` \| `"spamlink"` \| `"removelink"` \| `"approvelink"` \| `"spamcomment"` \| `"removecomment"` \| `"approvecomment"` \| `"addmoderator"` \| `"showcomment"` \| `"invitemoderator"` \| `"uninvitemoderator"` \| `"acceptmoderatorinvite"` \| `"removemoderator"` \| `"addcontributor"` \| `"removecontributor"` \| `"editsettings"` \| `"editflair"` \| `"distinguish"` \| `"marknsfw"` \| `"wikibanned"` \| `"wikicontributor"` \| `"wikiunbanned"` \| `"wikipagelisted"` \| `"removewikicontributor"` \| `"wikirevise"` \| `"wikipermlevel"` \| `"ignorereports"` \| `"unignorereports"` \| `"setpermissions"` \| `"setsuggestedsort"` \| `"sticky"` \| `"unsticky"` \| `"setcontestmode"` \| `"unsetcontestmode"` \| `"lock"` \| `"unlock"` \| `"muteuser"` \| `"unmuteuser"` \| `"createrule"` \| `"editrule"` \| `"reorderrules"` \| `"deleterule"` \| `"spoiler"` \| `"unspoiler"` \| `"modmail_enrollment"` \| `"community_styling"` \| `"community_widgets"` \| `"markoriginalcontent"` \| `"collections"` \| `"events"` \| `"create_award"` \| `"disable_award"` \| `"delete_award"` \| `"enable_award"` \| `"mod_award_given"` \| `"hidden_award"` \| `"add_community_topics"` \| `"remove_community_topics"` \| `"create_scheduled_post"` \| `"edit_scheduled_post"` \| `"delete_scheduled_post"` \| `"submit_scheduled_post"` \| `"edit_post_requirements"` \| `"invitesubscriber"` \| `"submit_content_rating_survey"` \| `"adjust_post_crowd_control_level"` \| `"enable_post_crowd_control_filter"` \| `"disable_post_crowd_control_filter"` \| `"deleteoverriddenclassification"` \| `"overrideclassification"` \| `"reordermoderators"` \| `"snoozereports"` \| `"unsnoozereports"` \| `"addnote"` \| `"deletenote"` \| `"addremovalreason"` \| `"createremovalreason"` \| `"updateremovalreason"` \| `"deleteremovalreason"` \| `"reorderremovalreason"` \| `"dev_platform_app_changed"` \| `"dev_platform_app_disabled"` \| `"dev_platform_app_enabled"` \| `"dev_platform_app_installed"` \| `"dev_platform_app_uninstalled"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModLogOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModLogOptions.md
new file mode 100644
index 00000000..f08fce4e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModLogOptions.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ModLogOptions\
+
+> **ModLogOptions**\<`T`\> = `Omit`\<`AboutSubredditHelperOptions`\<`T`\>, `"location"`\>
+
+## Type Parameters
+
+### T
+
+`T` *extends* [`AboutSubredditTypes`](AboutSubredditTypes.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModNoteType.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModNoteType.md
new file mode 100644
index 00000000..314a4c75
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModNoteType.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ModNoteType
+
+> **ModNoteType** = `"NOTE"` \| `"APPROVAL"` \| `"REMOVAL"` \| `"BAN"` \| `"MUTE"` \| `"INVITE"` \| `"SPAM"` \| `"CONTENT_CHANGE"` \| `"MOD_ACTION"` \| `"ALL"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModeratorPermission.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModeratorPermission.md
new file mode 100644
index 00000000..444c3fd7
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ModeratorPermission.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ModeratorPermission
+
+> **ModeratorPermission** = `"all"` \| `"wiki"` \| `"posts"` \| `"access"` \| `"mail"` \| `"config"` \| `"flair"` \| `"chat_operator"` \| `"chat_config"` \| `"channels"` \| `"community_chat"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/MoreObject.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/MoreObject.md
new file mode 100644
index 00000000..8f44247e
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/MoreObject.md
@@ -0,0 +1,31 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: MoreObject
+
+> **MoreObject** = `object`
+
+## Properties
+
+
+
+### children
+
+> **children**: `T1ID`[]
+
+***
+
+
+
+### depth
+
+> **depth**: `number`
+
+***
+
+
+
+### parentId
+
+> **parentId**: `T1ID` \| `T3ID`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/OEmbed.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/OEmbed.md
new file mode 100644
index 00000000..f12b1690
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/OEmbed.md
@@ -0,0 +1,142 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: OEmbed
+
+> **OEmbed** = `object`
+
+oEmbed is a format for allowing an embedded representation of a URL on third party sites.
+The simple API allows a website to display embedded content (such as photos or videos)
+when a user posts a link to that resource, without having to parse the resource directly.
+See: https://oembed.com/
+
+## Properties
+
+
+
+### authorName?
+
+> `optional` **authorName**: `string`
+
+The name of the author/owner of the resource. E.g. "Reddit"
+
+***
+
+
+
+### authorUrl?
+
+> `optional` **authorUrl**: `string`
+
+A URL for the author/owner of the resource. E.g. "https://www.youtube.com/@Reddit"
+
+***
+
+
+
+### height?
+
+> `optional` **height**: `number`
+
+The width in pixels required to display the HTML.
+
+***
+
+
+
+### html
+
+> **html**: `string`
+
+The HTML required to embed a video player. The HTML should have no padding or margins. Consumers may wish to load the HTML in an off-domain iframe to avoid XSS vulnerabilities.
+
+***
+
+
+
+### providerName?
+
+> `optional` **providerName**: `string`
+
+A URL for the author/owner of the resource. E.g. "YouTube"
+
+***
+
+
+
+### providerUrl?
+
+> `optional` **providerUrl**: `string`
+
+The name of the resource provider. E.g "https://www.youtube.com/"
+
+***
+
+
+
+### thumbnailHeight?
+
+> `optional` **thumbnailHeight**: `number`
+
+The height of the optional thumbnail in pixels
+
+***
+
+
+
+### thumbnailUrl?
+
+> `optional` **thumbnailUrl**: `string`
+
+A URL to a thumbnail image representing the resource.
+
+***
+
+
+
+### thumbnailWidth?
+
+> `optional` **thumbnailWidth**: `number`
+
+The width of the optional thumbnail in pixels
+
+***
+
+
+
+### title?
+
+> `optional` **title**: `string`
+
+A text title, describing the resource.
+
+***
+
+
+
+### type
+
+> **type**: `string`
+
+The resource type. Valid values, along with value-specific parameters, are described below. E.g. "video"
+
+***
+
+
+
+### version
+
+> **version**: `string`
+
+The oEmbed version number. This must be 1.0.
+
+***
+
+
+
+### width?
+
+> `optional` **width**: `number`
+
+The height in pixels required to display the HTML.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Participant.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Participant.md
new file mode 100644
index 00000000..91c62147
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Participant.md
@@ -0,0 +1,81 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: Participant
+
+> **Participant** = `object`
+
+Conversation participant
+
+## Properties
+
+
+
+### id?
+
+> `optional` **id**: `number`
+
+***
+
+
+
+### isAdmin?
+
+> `optional` **isAdmin**: `boolean`
+
+***
+
+
+
+### isApproved?
+
+> `optional` **isApproved**: `boolean`
+
+***
+
+
+
+### isDeleted?
+
+> `optional` **isDeleted**: `boolean`
+
+***
+
+
+
+### isHidden?
+
+> `optional` **isHidden**: `boolean`
+
+***
+
+
+
+### isMod?
+
+> `optional` **isMod**: `boolean`
+
+***
+
+
+
+### isOp?
+
+> `optional` **isOp**: `boolean`
+
+***
+
+
+
+### isParticipant?
+
+> `optional` **isParticipant**: `boolean`
+
+***
+
+
+
+### name?
+
+> `optional` **name**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PollData.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PollData.md
new file mode 100644
index 00000000..3c821ff5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PollData.md
@@ -0,0 +1,39 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: PollData
+
+> **PollData** = `object`
+
+Aggregated poll data for a poll post.
+
+## Properties
+
+
+
+### options
+
+> **options**: [`PollOption`](PollOption.md)[]
+
+Options in the poll.
+
+***
+
+
+
+### totalVoteCount
+
+> **totalVoteCount**: `number`
+
+Total number of votes cast in the poll. Aggregated across all PollOption objects.
+
+***
+
+
+
+### votingEndTimestamp
+
+> **votingEndTimestamp**: `number`
+
+Time the poll voting closes, in Unix milliseconds.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PollOption.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PollOption.md
new file mode 100644
index 00000000..0d92fb05
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PollOption.md
@@ -0,0 +1,39 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: PollOption
+
+> **PollOption** = `object`
+
+Poll option on a poll post.
+
+## Properties
+
+
+
+### id
+
+> **id**: `string`
+
+ID of the poll option.
+
+***
+
+
+
+### text
+
+> **text**: `string`
+
+The text of the poll option.
+
+***
+
+
+
+### voteCount
+
+> **voteCount**: `number`
+
+The number of votes this poll option has received.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PositionedImagePosition.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PositionedImagePosition.md
new file mode 100644
index 00000000..9a5e9b32
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PositionedImagePosition.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: PositionedImagePosition
+
+> **PositionedImagePosition** = `"left"` \| `"right"` \| `"centered"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostCapabilities.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostCapabilities.md
new file mode 100644
index 00000000..733f0bf8
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostCapabilities.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: PostCapabilities
+
+> **PostCapabilities** = `"ama"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostSuggestedCommentSort.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostSuggestedCommentSort.md
new file mode 100644
index 00000000..a796a330
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostSuggestedCommentSort.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: PostSuggestedCommentSort
+
+> **PostSuggestedCommentSort** = `"BLANK"` \| `"CONFIDENCE"` \| `"CONTROVERSIAL"` \| `"LIVE"` \| `"NEW"` \| `"OLD"` \| `"QA"` \| `"RANDOM"` \| `"TOP"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostTextOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostTextOptions.md
new file mode 100644
index 00000000..75d7819b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostTextOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: PostTextOptions
+
+> **PostTextOptions** = \{ `text`: `string`; \} \| \{ `richtext`: `object` \| `RichTextBuilder`; \}
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostType.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostType.md
new file mode 100644
index 00000000..813fd85b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/PostType.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: PostType
+
+> **PostType** = `"link"` \| `"image"` \| `"video"` \| `"text"` \| `"spoiler"` \| `"poll"` \| `"gallery"` \| `"talk"` \| `"prediction"` \| `"videogif"` \| `"streaming"` \| `"crosspost"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RedditVideo.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RedditVideo.md
new file mode 100644
index 00000000..cfde1437
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RedditVideo.md
@@ -0,0 +1,109 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: RedditVideo
+
+> **RedditVideo** = `object`
+
+Contains the data for a video hosted on Reddit that is in a post
+
+## Properties
+
+
+
+### bitrateKbps?
+
+> `optional` **bitrateKbps**: `number`
+
+The bitrate of the video in kilobits per second. E.g. 450
+
+***
+
+
+
+### dashUrl?
+
+> `optional` **dashUrl**: `string`
+
+The URL to the DASH playlist file. E.g. "https://v.redd.it/abc123/DASHPlaylist.mpd"
+
+***
+
+
+
+### duration?
+
+> `optional` **duration**: `number`
+
+The duration of the video in seconds. E.g. 30
+
+***
+
+
+
+### fallbackUrl?
+
+> `optional` **fallbackUrl**: `string`
+
+The direct URL to the video. E.g. "https://v.redd.it/abc123/DASH_1080.mp4?source=fallback"
+
+***
+
+
+
+### height?
+
+> `optional` **height**: `number`
+
+The height of the video in pixels. E.g. 1080
+
+***
+
+
+
+### hlsUrl?
+
+> `optional` **hlsUrl**: `string`
+
+The URL to the HLS playlist file. E.g. "https://v.redd.it/abc123/HLSPlaylist.m3u8"
+
+***
+
+
+
+### isGif?
+
+> `optional` **isGif**: `boolean`
+
+If `true`, the video is a GIF
+
+***
+
+
+
+### scrubberMediaUrl?
+
+> `optional` **scrubberMediaUrl**: `string`
+
+The URL to the scrubber media file. E.g. "https://v.redd.it/abc123/DASH_96.mp4"
+
+***
+
+
+
+### transcodingStatus?
+
+> `optional` **transcodingStatus**: `string`
+
+The status of the transcoding process. E.g. "completed"
+
+***
+
+
+
+### width?
+
+> `optional` **width**: `number`
+
+The width of the video in pixels. E.g. 1920
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RelationshipType.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RelationshipType.md
new file mode 100644
index 00000000..8261513d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RelationshipType.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: RelationshipType
+
+> **RelationshipType** = `"moderator_invite"` \| `"contributor"` \| `"banned"` \| `"muted"` \| `"wikibanned"` \| `"wikicontributor"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RemovalReason.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RemovalReason.md
new file mode 100644
index 00000000..7b91fafc
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RemovalReason.md
@@ -0,0 +1,41 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: RemovalReason
+
+> **RemovalReason** = `object`
+
+Plain data for a subreddit removal reason. Use [Subreddit.updateRemovalReason](../classes/Subreddit.md#updateremovalreason),
+[Subreddit.deleteRemovalReason](../classes/Subreddit.md#deleteremovalreason), or the matching [RedditAPIClient](../../RedditAPIClient/README.md) methods to change
+or remove it.
+
+## Properties
+
+
+
+### id
+
+> **id**: `string`
+
+The ID of the removal reason.
+
+***
+
+
+
+### message
+
+> **message**: `string`
+
+The message associated with the removal reason.
+
+***
+
+
+
+### title
+
+> **title**: `string`
+
+The title of the removal reason.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RemoveRelationshipOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RemoveRelationshipOptions.md
new file mode 100644
index 00000000..85305bd3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/RemoveRelationshipOptions.md
@@ -0,0 +1,31 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: RemoveRelationshipOptions
+
+> **RemoveRelationshipOptions** = `object`
+
+## Properties
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+***
+
+
+
+### type
+
+> **type**: [`RelationshipType`](RelationshipType.md) \| `"moderator"`
+
+***
+
+
+
+### username
+
+> **username**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ReplyToCommentOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ReplyToCommentOptions.md
new file mode 100644
index 00000000..84ea7f00
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/ReplyToCommentOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: ReplyToCommentOptions
+
+> **ReplyToCommentOptions** = [`CommentSubmissionOptions`](CommentSubmissionOptions.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SecureMedia.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SecureMedia.md
new file mode 100644
index 00000000..dcf52159
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SecureMedia.md
@@ -0,0 +1,33 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SecureMedia
+
+> **SecureMedia** = `object`
+
+## Properties
+
+
+
+### oembed?
+
+> `optional` **oembed**: [`OEmbed`](OEmbed.md)
+
+***
+
+
+
+### redditVideo?
+
+> `optional` **redditVideo**: [`RedditVideo`](RedditVideo.md)
+
+***
+
+
+
+### type?
+
+> `optional` **type**: `string`
+
+The type of the OEmbed media, if present (e.g. "youtube.com")
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SendPrivateMessageAsSubredditOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SendPrivateMessageAsSubredditOptions.md
new file mode 100644
index 00000000..a92572fc
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SendPrivateMessageAsSubredditOptions.md
@@ -0,0 +1,15 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SendPrivateMessageAsSubredditOptions
+
+> **SendPrivateMessageAsSubredditOptions** = [`SendPrivateMessageOptions`](SendPrivateMessageOptions.md) & `object`
+
+## Type declaration
+
+### fromSubredditName
+
+> **fromSubredditName**: `string`
+
+The name of the subreddit the message is being sent from (without the leading r/)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SendPrivateMessageOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SendPrivateMessageOptions.md
new file mode 100644
index 00000000..c25520d5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SendPrivateMessageOptions.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SendPrivateMessageOptions
+
+> **SendPrivateMessageOptions** = `object`
+
+## Properties
+
+
+
+### subject
+
+> **subject**: `string`
+
+The subject of the message.
+
+***
+
+
+
+### text
+
+> **text**: `string`
+
+The body of the message in markdown text format.
+
+***
+
+
+
+### to
+
+> **to**: `string`
+
+Recipient username (without the leading u/), or /r/name for that subreddit's moderators.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetFlairOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetFlairOptions.md
new file mode 100644
index 00000000..3399c7be
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetFlairOptions.md
@@ -0,0 +1,67 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SetFlairOptions
+
+> **SetFlairOptions** = `object`
+
+## Properties
+
+
+
+### backgroundColor?
+
+> `optional` **backgroundColor**: `string`
+
+The flair background color. Either 'transparent' or a hex color code. e.g. #FFC0CB
+
+***
+
+
+
+### cssClass?
+
+> `optional` **cssClass**: `string`
+
+The flair CSS class
+
+***
+
+
+
+### flairTemplateId?
+
+> `optional` **flairTemplateId**: `string`
+
+The flair template's ID
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+The name of the subreddit of the item to set the flair on
+
+***
+
+
+
+### text?
+
+> `optional` **text**: `string`
+
+The flair text
+
+***
+
+
+
+### textColor?
+
+> `optional` **textColor**: [`FlairTextColor`](FlairTextColor.md)
+
+The flair text color. Either 'dark' or 'light'.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetPostFlairOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetPostFlairOptions.md
new file mode 100644
index 00000000..0735701d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetPostFlairOptions.md
@@ -0,0 +1,15 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SetPostFlairOptions
+
+> **SetPostFlairOptions** = [`SetFlairOptions`](SetFlairOptions.md) & `object`
+
+## Type declaration
+
+### postId
+
+> **postId**: `string`
+
+The ID of the post to set the flair on
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetUserFlairBatchConfig.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetUserFlairBatchConfig.md
new file mode 100644
index 00000000..9812d8ec
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetUserFlairBatchConfig.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SetUserFlairBatchConfig
+
+> **SetUserFlairBatchConfig** = `object`
+
+## Properties
+
+
+
+### cssClass?
+
+> `optional` **cssClass**: `string`
+
+The flair CSS class
+
+***
+
+
+
+### text?
+
+> `optional` **text**: `string`
+
+The flair text. Can't contain the comma character (",")
+
+***
+
+
+
+### username
+
+> **username**: `string`
+
+The username of the user to edit the flair on
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetUserFlairOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetUserFlairOptions.md
new file mode 100644
index 00000000..2dbd28cb
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SetUserFlairOptions.md
@@ -0,0 +1,15 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SetUserFlairOptions
+
+> **SetUserFlairOptions** = [`SetFlairOptions`](SetFlairOptions.md) & `object`
+
+## Type declaration
+
+### username
+
+> **username**: `string`
+
+The username of the user to set the flair on
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitCustomPostOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitCustomPostOptions.md
new file mode 100644
index 00000000..f879507b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitCustomPostOptions.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubmitCustomPostOptions
+
+> **SubmitCustomPostOptions** = [`CommonSubmitPostOptions`](CommonSubmitPostOptions.md) & [`SubmitCustomPostTextFallbackOptions`](SubmitCustomPostTextFallbackOptions.md) & `object`
+
+## Type declaration
+
+### postData?
+
+> `optional` **postData**: `PostData`
+
+### preview
+
+> **preview**: `JSX.Element`
+
+### userGeneratedContent?
+
+> `optional` **userGeneratedContent**: `UserGeneratedContent`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitCustomPostTextFallbackOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitCustomPostTextFallbackOptions.md
new file mode 100644
index 00000000..8415fe9f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitCustomPostTextFallbackOptions.md
@@ -0,0 +1,15 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubmitCustomPostTextFallbackOptions
+
+> **SubmitCustomPostTextFallbackOptions** = `object`
+
+## Properties
+
+
+
+### textFallback?
+
+> `optional` **textFallback**: [`CustomPostTextFallbackOptions`](CustomPostTextFallbackOptions.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitLinkOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitLinkOptions.md
new file mode 100644
index 00000000..07788e32
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitLinkOptions.md
@@ -0,0 +1,23 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubmitLinkOptions
+
+> **SubmitLinkOptions** = [`CommonSubmitPostOptions`](CommonSubmitPostOptions.md) & `object`
+
+## Type declaration
+
+### ~~resubmit?~~
+
+> `optional` **resubmit**: `boolean`
+
+#### Deprecated
+
+Unsupported. This property is for backwards compatibility and
+has no effect. It will removed in a future version. New code should not
+use it.
+
+### url
+
+> **url**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitMediaOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitMediaOptions.md
new file mode 100644
index 00000000..60d4e861
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitMediaOptions.md
@@ -0,0 +1,21 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubmitMediaOptions
+
+> **SubmitMediaOptions** = [`CommonSubmitPostOptions`](CommonSubmitPostOptions.md) & `object`
+
+## Type declaration
+
+### imageUrls?
+
+> `optional` **imageUrls**: \[`string`\]
+
+### kind
+
+> **kind**: `"image"` \| `"video"` \| `"videogif"`
+
+### videoPosterUrl?
+
+> `optional` **videoPosterUrl**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitPostOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitPostOptions.md
new file mode 100644
index 00000000..fb71fa2f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitPostOptions.md
@@ -0,0 +1,13 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubmitPostOptions
+
+> **SubmitPostOptions** = [`SubmitLinkOptions`](SubmitLinkOptions.md) \| [`SubmitSelfPostOptions`](SubmitSelfPostOptions.md) \| [`SubmitCustomPostOptions`](SubmitCustomPostOptions.md) \| [`SubmitMediaOptions`](SubmitMediaOptions.md) & `object`
+
+## Type declaration
+
+### subredditName
+
+> **subredditName**: `string`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitSelfPostOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitSelfPostOptions.md
new file mode 100644
index 00000000..6c81fa36
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubmitSelfPostOptions.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubmitSelfPostOptions
+
+> **SubmitSelfPostOptions** = [`PostTextOptions`](PostTextOptions.md) & [`CommonSubmitPostOptions`](CommonSubmitPostOptions.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditData.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditData.md
new file mode 100644
index 00000000..cdd53cdb
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditData.md
@@ -0,0 +1,79 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubredditData
+
+> **SubredditData** = `object`
+
+## Properties
+
+
+
+### communityIcon?
+
+> `optional` **communityIcon**: `string`
+
+***
+
+
+
+### displayName?
+
+> `optional` **displayName**: `string`
+
+***
+
+
+
+### icon?
+
+> `optional` **icon**: `string`
+
+***
+
+
+
+### id?
+
+> `optional` **id**: `string`
+
+***
+
+
+
+### keyColor?
+
+> `optional` **keyColor**: `string`
+
+***
+
+
+
+### lastUpdated?
+
+> `optional` **lastUpdated**: `string`
+
+***
+
+
+
+### name?
+
+> `optional` **name**: `string`
+
+***
+
+
+
+### primaryColor?
+
+> `optional` **primaryColor**: `string`
+
+***
+
+
+
+### subscribers?
+
+> `optional` **subscribers**: `number`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditInfo.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditInfo.md
new file mode 100644
index 00000000..20b4feeb
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditInfo.md
@@ -0,0 +1,241 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubredditInfo
+
+> **SubredditInfo** = `object`
+
+A class representing information about a Subreddit.
+
+## Properties
+
+
+
+### activeCount?
+
+> `optional` **activeCount**: `number`
+
+***
+
+
+
+### allAllowedPostTypes?
+
+> `optional` **allAllowedPostTypes**: [`PostType`](PostType.md)[]
+
+***
+
+
+
+### allowedMediaInComments?
+
+> `optional` **allowedMediaInComments**: [`CommentMediaTypes`](CommentMediaTypes.md)[]
+
+***
+
+
+
+### allowedPostCapabilities?
+
+> `optional` **allowedPostCapabilities**: [`PostCapabilities`](PostCapabilities.md)[]
+
+***
+
+
+
+### authorFlairSettings?
+
+> `optional` **authorFlairSettings**: [`AuthorFlairSettings`](../classes/AuthorFlairSettings.md)
+
+***
+
+
+
+### createdAt?
+
+> `optional` **createdAt**: `Date`
+
+***
+
+
+
+### description?
+
+> `optional` **description**: [`SubredditDescription`](../classes/SubredditDescription.md)
+
+***
+
+
+
+### detectedLanguage?
+
+> `optional` **detectedLanguage**: `string`
+
+***
+
+
+
+### id?
+
+> `optional` **id**: `T5ID`
+
+***
+
+
+
+### isArchivePostsEnabled?
+
+> `optional` **isArchivePostsEnabled**: `boolean`
+
+***
+
+
+
+### isChatPostCreationAllowed?
+
+> `optional` **isChatPostCreationAllowed**: `boolean`
+
+***
+
+
+
+### isChatPostFeatureEnabled?
+
+> `optional` **isChatPostFeatureEnabled**: `boolean`
+
+***
+
+
+
+### isCommentingRestricted?
+
+> `optional` **isCommentingRestricted**: `boolean`
+
+***
+
+
+
+### isCrosspostingAllowed?
+
+> `optional` **isCrosspostingAllowed**: `boolean`
+
+***
+
+
+
+### isDiscoveryAllowed?
+
+> `optional` **isDiscoveryAllowed**: `boolean`
+
+***
+
+
+
+### isEmojisEnabled?
+
+> `optional` **isEmojisEnabled**: `boolean`
+
+***
+
+
+
+### isNsfw?
+
+> `optional` **isNsfw**: `boolean`
+
+***
+
+
+
+### isPostingRestricted?
+
+> `optional` **isPostingRestricted**: `boolean`
+
+***
+
+
+
+### isPredictionAllowed?
+
+> `optional` **isPredictionAllowed**: `boolean`
+
+***
+
+
+
+### isPredictionContributorsAllowed?
+
+> `optional` **isPredictionContributorsAllowed**: `boolean`
+
+***
+
+
+
+### isPredictionsTournamentAllowed?
+
+> `optional` **isPredictionsTournamentAllowed**: `boolean`
+
+***
+
+
+
+### isQuarantined?
+
+> `optional` **isQuarantined**: `boolean`
+
+***
+
+
+
+### isSpoilerAvailable?
+
+> `optional` **isSpoilerAvailable**: `boolean`
+
+***
+
+
+
+### name?
+
+> `optional` **name**: `string`
+
+***
+
+
+
+### postFlairSettings?
+
+> `optional` **postFlairSettings**: [`PostFlairSettings`](../classes/PostFlairSettings.md)
+
+***
+
+
+
+### subscribersCount?
+
+> `optional` **subscribersCount**: `number`
+
+***
+
+
+
+### title?
+
+> `optional` **title**: `string`
+
+***
+
+
+
+### type?
+
+> `optional` **type**: [`SubredditType`](SubredditType.md)
+
+***
+
+
+
+### wikiSettings?
+
+> `optional` **wikiSettings**: [`SubredditWikiSettings`](../classes/SubredditWikiSettings.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditLeaderboard.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditLeaderboard.md
new file mode 100644
index 00000000..2ab008c3
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditLeaderboard.md
@@ -0,0 +1,25 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubredditLeaderboard
+
+> **SubredditLeaderboard** = `object`
+
+An individual Leaderboard object.
+
+## Properties
+
+
+
+### id
+
+> **id**: `string`
+
+***
+
+
+
+### summary
+
+> **summary**: [`SubredditLeaderboardSummary`](SubredditLeaderboardSummary.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditLeaderboardSummary.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditLeaderboardSummary.md
new file mode 100644
index 00000000..2080b349
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditLeaderboardSummary.md
@@ -0,0 +1,15 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubredditLeaderboardSummary
+
+> **SubredditLeaderboardSummary** = `object`
+
+## Properties
+
+
+
+### data
+
+> **data**: [`SubredditLeaderboardSummaryRow`](SubredditLeaderboardSummaryRow.md)[]
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditLeaderboardSummaryRow.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditLeaderboardSummaryRow.md
new file mode 100644
index 00000000..deee2b0f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditLeaderboardSummaryRow.md
@@ -0,0 +1,31 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubredditLeaderboardSummaryRow
+
+> **SubredditLeaderboardSummaryRow** = `object`
+
+## Properties
+
+
+
+### key
+
+> **key**: `string`
+
+***
+
+
+
+### title
+
+> **title**: `string`
+
+***
+
+
+
+### value
+
+> **value**: `number`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditSettings.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditSettings.md
new file mode 100644
index 00000000..4fe9ae61
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditSettings.md
@@ -0,0 +1,387 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubredditSettings
+
+> **SubredditSettings** = `object`
+
+## Properties
+
+
+
+### acceptFollowers
+
+> **acceptFollowers**: `boolean`
+
+Whether the subreddit accepts followers or not.
+
+***
+
+
+
+### allOriginalContent
+
+> **allOriginalContent**: `boolean`
+
+Whether all content posted on the subreddit is original.
+
+***
+
+
+
+### allowChatPostCreation
+
+> **allowChatPostCreation**: `boolean`
+
+Whether users are allowed to create chat posts on the subreddit.
+
+***
+
+
+
+### allowDiscovery
+
+> **allowDiscovery**: `boolean`
+
+Whether the subreddit can be discovered through search.
+
+***
+
+
+
+### allowedMediaInComments
+
+> **allowedMediaInComments**: [`CommentMediaTypes`](CommentMediaTypes.md)[]
+
+List of allowed media types in the comments made in the subreddit.
+
+***
+
+
+
+### allowedPostType
+
+> **allowedPostType**: `"any"` \| `"link"` \| `"self"`
+
+The types of post allowed in this subreddit. Either "any", "link", or "self".
+
+***
+
+
+
+### allowGalleries
+
+> **allowGalleries**: `boolean`
+
+Whether the subreddit allows galleries.
+
+***
+
+
+
+### allowImages
+
+> **allowImages**: `boolean`
+
+Whether the subreddit allows images.
+
+***
+
+
+
+### allowPolls
+
+> **allowPolls**: `boolean`
+
+Whether the subreddit allows polls.
+
+***
+
+
+
+### allowPredictionContributors
+
+> **allowPredictionContributors**: `boolean`
+
+Whether contributors are allowed to make predictions on the subreddit.
+
+***
+
+
+
+### allowPredictions
+
+> **allowPredictions**: `boolean`
+
+Whether predictions are allowed on the subreddit.
+
+***
+
+
+
+### allowPredictionsTournament
+
+> **allowPredictionsTournament**: `boolean`
+
+Whether prediction tournaments are allowed on the subreddit.
+
+***
+
+
+
+### allowTalks
+
+> **allowTalks**: `boolean`
+
+Whether talks are allowed on the subreddit.
+
+***
+
+
+
+### allowVideoGifs
+
+> **allowVideoGifs**: `boolean`
+
+Whether video GIFs are allowed on the subreddit.
+
+***
+
+
+
+### allowVideos
+
+> **allowVideos**: `boolean`
+
+Whether videos are allowed on the subreddit.
+
+***
+
+
+
+### bannerBackgroundColor?
+
+> `optional` **bannerBackgroundColor**: `string`
+
+a 6-digit rgb hex color of the banner e.g. `#AABBCC`,
+
+***
+
+
+
+### bannerBackgroundImage?
+
+> `optional` **bannerBackgroundImage**: `string`
+
+The background image of the banner.
+
+***
+
+
+
+### bannerImage?
+
+> `optional` **bannerImage**: `string`
+
+The URL of the banner image.
+
+***
+
+
+
+### chatPostEnabled
+
+> **chatPostEnabled**: `boolean`
+
+Whether chat posts are enabled on the subreddit.
+
+***
+
+
+
+### collectionsEnabled
+
+> **collectionsEnabled**: `boolean`
+
+Whether collections are enabled on the subreddit.
+
+***
+
+
+
+### communityIcon?
+
+> `optional` **communityIcon**: `string`
+
+The URL of the community icon.
+
+***
+
+
+
+### crosspostable
+
+> **crosspostable**: `boolean`
+
+Whether crossposts can be made to this subreddit.
+
+***
+
+
+
+### emojisEnabled
+
+> **emojisEnabled**: `boolean`
+
+Whether emojis are enabled on the subreddit.
+
+***
+
+
+
+### eventPostsEnabled
+
+> **eventPostsEnabled**: `boolean`
+
+Whether event posts are enabled on the subreddit.
+
+***
+
+
+
+### headerTitle?
+
+> `optional` **headerTitle**: `string`
+
+The header title.
+
+***
+
+
+
+### keyColor?
+
+> `optional` **keyColor**: `string`
+
+The 6-digit rgb hex color of the subreddit's key color, e.g. `#AABBCC`,
+
+***
+
+
+
+### linkFlairEnabled
+
+> **linkFlairEnabled**: `boolean`
+
+Whether link flairs are enabled on the subreddit.
+
+***
+
+
+
+### mobileBannerImage?
+
+> `optional` **mobileBannerImage**: `string`
+
+Banner image used on mobile apps.
+
+***
+
+
+
+### originalContentTagEnabled
+
+> **originalContentTagEnabled**: `boolean`
+
+Whether the Original Content tag is enabled.
+
+***
+
+
+
+### postFlairs
+
+> **postFlairs**: [`FlairSettings`](FlairSettings.md)
+
+The post flair settings for the subreddit.
+
+***
+
+
+
+### primaryColor?
+
+> `optional` **primaryColor**: `string`
+
+The 6-digit rgb hex color of the subreddit's primary color, e.g. `#AABBCC`,
+
+***
+
+
+
+### restrictCommenting
+
+> **restrictCommenting**: `boolean`
+
+Whether commenting is restricted in the subreddit.
+
+***
+
+
+
+### restrictPosting
+
+> **restrictPosting**: `boolean`
+
+Whether posting is restricted in the subreddit.
+
+***
+
+
+
+### shouldArchivePosts
+
+> **shouldArchivePosts**: `boolean`
+
+Whether posts in the subreddit should be automatically archived after 6 months.
+
+***
+
+
+
+### spoilersEnabled
+
+> **spoilersEnabled**: `boolean`
+
+Whether the Spoiler tag is enabled.
+
+***
+
+
+
+### url
+
+> **url**: `string`
+
+HTTP URL to the subreddit
+
+***
+
+
+
+### userFlairs
+
+> **userFlairs**: [`FlairSettings`](FlairSettings.md)
+
+The user flair settings for the subreddit.
+
+***
+
+
+
+### wikiEnabled
+
+> **wikiEnabled**: `boolean`
+
+Whether the wiki is enabled for the subreddit.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditSettingsOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditSettingsOptions.md
new file mode 100644
index 00000000..95e50355
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditSettingsOptions.md
@@ -0,0 +1,30 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubredditSettingsOptions
+
+> **SubredditSettingsOptions** = `Partial`\<[`SubredditSettings`](SubredditSettings.md)\> & `object`
+
+Optional overrides for subreddit settings. Only provided fields are applied;
+the rest remain unchanged when calling [Subreddit.updateSettings](../classes/Subreddit.md#updatesettings).
+
+## Type declaration
+
+### description?
+
+> `optional` **description**: `string`
+
+Subreddit description (raw markdown). Appears in the sidebar of the subreddit.
+
+### title?
+
+> `optional` **title**: `string`
+
+Subreddit title.
+
+### type?
+
+> `optional` **type**: [`SubredditType`](SubredditType.md)
+
+Subreddit type (e.g. public, private, restricted).
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditStyles.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditStyles.md
new file mode 100644
index 00000000..ace4e6fc
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditStyles.md
@@ -0,0 +1,377 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubredditStyles
+
+> **SubredditStyles** = `object`
+
+A class representing the styles of a Subreddit.
+
+## Properties
+
+
+
+### backgroundColor?
+
+> `optional` **backgroundColor**: `string`
+
+***
+
+
+
+### backgroundImage?
+
+> `optional` **backgroundImage**: `string`
+
+***
+
+
+
+### backgroundImagePosition?
+
+> `optional` **backgroundImagePosition**: [`BackgroundImagePosition`](BackgroundImagePosition.md)
+
+***
+
+
+
+### bannerBackgroundColor?
+
+> `optional` **bannerBackgroundColor**: `string`
+
+***
+
+
+
+### bannerBackgroundImage?
+
+> `optional` **bannerBackgroundImage**: `string`
+
+***
+
+
+
+### bannerBackgroundImagePosition?
+
+> `optional` **bannerBackgroundImagePosition**: [`ImagePosition`](ImagePosition.md)
+
+***
+
+
+
+### bannerCommunityName?
+
+> `optional` **bannerCommunityName**: `string`
+
+***
+
+
+
+### bannerCommunityNameFormat?
+
+> `optional` **bannerCommunityNameFormat**: [`CommunityNameFormat`](CommunityNameFormat.md)
+
+***
+
+
+
+### bannerHeight?
+
+> `optional` **bannerHeight**: [`BannerHeight`](BannerHeight.md)
+
+***
+
+
+
+### bannerOverlayColor?
+
+> `optional` **bannerOverlayColor**: `string`
+
+***
+
+
+
+### bannerPositionedImage?
+
+> `optional` **bannerPositionedImage**: `string`
+
+***
+
+
+
+### bannerPositionedImagePosition?
+
+> `optional` **bannerPositionedImagePosition**: [`PositionedImagePosition`](PositionedImagePosition.md)
+
+***
+
+
+
+### bannerShowCommunityIcon?
+
+> `optional` **bannerShowCommunityIcon**: [`Visibility`](Visibility.md)
+
+***
+
+
+
+### highlightColor?
+
+> `optional` **highlightColor**: `string`
+
+***
+
+
+
+### icon?
+
+> `optional` **icon**: `string`
+
+***
+
+
+
+### legacyBannerBackgroundImage?
+
+> `optional` **legacyBannerBackgroundImage**: `string`
+
+***
+
+
+
+### legacyPrimaryColor?
+
+> `optional` **legacyPrimaryColor**: `string`
+
+***
+
+
+
+### menuBackgroundBlur?
+
+> `optional` **menuBackgroundBlur**: `number`
+
+***
+
+
+
+### menuBackgroundColor?
+
+> `optional` **menuBackgroundColor**: `string`
+
+***
+
+
+
+### menuBackgroundImage?
+
+> `optional` **menuBackgroundImage**: `string`
+
+***
+
+
+
+### menuBackgroundOpacity?
+
+> `optional` **menuBackgroundOpacity**: `number`
+
+***
+
+
+
+### menuLinkColorActive?
+
+> `optional` **menuLinkColorActive**: `string`
+
+***
+
+
+
+### menuLinkColorHover?
+
+> `optional` **menuLinkColorHover**: `string`
+
+***
+
+
+
+### menuLinkColorInactive?
+
+> `optional` **menuLinkColorInactive**: `string`
+
+***
+
+
+
+### menuPosition?
+
+> `optional` **menuPosition**: [`MenuPosition`](MenuPosition.md)
+
+***
+
+
+
+### mobileBannerImage?
+
+> `optional` **mobileBannerImage**: `string`
+
+***
+
+
+
+### mobileKeyColor?
+
+> `optional` **mobileKeyColor**: `string`
+
+***
+
+
+
+### postBackgroundColor?
+
+> `optional` **postBackgroundColor**: `string`
+
+***
+
+
+
+### postBackgroundImage?
+
+> `optional` **postBackgroundImage**: `string`
+
+***
+
+
+
+### postBackgroundImagePosition?
+
+> `optional` **postBackgroundImagePosition**: [`ImagePosition`](ImagePosition.md)
+
+***
+
+
+
+### postDownvoteCountColor?
+
+> `optional` **postDownvoteCountColor**: `string`
+
+***
+
+
+
+### postDownvoteIconActive?
+
+> `optional` **postDownvoteIconActive**: `string`
+
+***
+
+
+
+### postDownvoteIconInactive?
+
+> `optional` **postDownvoteIconInactive**: `string`
+
+***
+
+
+
+### postPlaceholderImage?
+
+> `optional` **postPlaceholderImage**: `string`
+
+***
+
+
+
+### postPlaceholderImagePosition?
+
+> `optional` **postPlaceholderImagePosition**: [`ImagePosition`](ImagePosition.md)
+
+***
+
+
+
+### postTitleColor?
+
+> `optional` **postTitleColor**: `string`
+
+***
+
+
+
+### postUpvoteCountColor?
+
+> `optional` **postUpvoteCountColor**: `string`
+
+***
+
+
+
+### postUpvoteIconActive?
+
+> `optional` **postUpvoteIconActive**: `string`
+
+***
+
+
+
+### postUpvoteIconInactive?
+
+> `optional` **postUpvoteIconInactive**: `string`
+
+***
+
+
+
+### postVoteIcons?
+
+> `optional` **postVoteIcons**: [`CustomizationFlag`](CustomizationFlag.md)
+
+***
+
+
+
+### primaryColor?
+
+> `optional` **primaryColor**: `string`
+
+***
+
+
+
+### secondaryBannerPositionedImage?
+
+> `optional` **secondaryBannerPositionedImage**: `string`
+
+***
+
+
+
+### sidebarWidgetBackgroundColor?
+
+> `optional` **sidebarWidgetBackgroundColor**: `string`
+
+***
+
+
+
+### sidebarWidgetHeaderColor?
+
+> `optional` **sidebarWidgetHeaderColor**: `string`
+
+***
+
+
+
+### submenuBackgroundColor?
+
+> `optional` **submenuBackgroundColor**: `string`
+
+***
+
+
+
+### submenuBackgroundStyle?
+
+> `optional` **submenuBackgroundStyle**: [`CustomizationFlag`](CustomizationFlag.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditType.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditType.md
new file mode 100644
index 00000000..d33aba5c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/SubredditType.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: SubredditType
+
+> **SubredditType** = `"public"` \| `"private"` \| `"restricted"` \| `"employees_only"` \| `"gold_only"` \| `"gold_restricted"` \| `"archived"` \| `"user"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Trophy.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Trophy.md
new file mode 100644
index 00000000..0b2da249
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Trophy.md
@@ -0,0 +1,89 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: Trophy
+
+> **Trophy** = `object`
+
+A trophy displayed on a user's profile.
+
+## Properties
+
+
+
+### awardId
+
+> **awardId**: `T6ID` \| `undefined`
+
+Award ID.
+
+***
+
+
+
+### description
+
+> **description**: `string` \| `undefined`
+
+Description.
+
+***
+
+
+
+### grantedAt
+
+> **grantedAt**: `number` \| `undefined`
+
+When the trophy was granted (Unix timestamp).
+
+***
+
+
+
+### iconSmallUrl
+
+> **iconSmallUrl**: `string` \| `undefined`
+
+URL of the small icon. Currently 40x40.
+
+***
+
+
+
+### iconUrl
+
+> **iconUrl**: `string` \| `undefined`
+
+URL of the trophy icon. Currently 70x70.
+
+***
+
+
+
+### id
+
+> **id**: `T6ID` \| `undefined`
+
+Trophy ID.
+
+***
+
+
+
+### name
+
+> **name**: `string` \| `undefined`
+
+Display name of the trophy.
+
+***
+
+
+
+### url
+
+> **url**: `string` \| `undefined`
+
+URL to redirect to when the trophy is clicked.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UnreadCountResponse.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UnreadCountResponse.md
new file mode 100644
index 00000000..31dbb9b8
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UnreadCountResponse.md
@@ -0,0 +1,79 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: UnreadCountResponse
+
+> **UnreadCountResponse** = `object`
+
+## Properties
+
+
+
+### appeals?
+
+> `optional` **appeals**: `number`
+
+***
+
+
+
+### archived?
+
+> `optional` **archived**: `number`
+
+***
+
+
+
+### filtered?
+
+> `optional` **filtered**: `number`
+
+***
+
+
+
+### highlighted?
+
+> `optional` **highlighted**: `number`
+
+***
+
+
+
+### inprogress?
+
+> `optional` **inprogress**: `number`
+
+***
+
+
+
+### joinRequests?
+
+> `optional` **joinRequests**: `number`
+
+***
+
+
+
+### mod?
+
+> `optional` **mod**: `number`
+
+***
+
+
+
+### new?
+
+> `optional` **new**: `number`
+
+***
+
+
+
+### notifications?
+
+> `optional` **notifications**: `number`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdatePageSettingsOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdatePageSettingsOptions.md
new file mode 100644
index 00000000..4f6d363d
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdatePageSettingsOptions.md
@@ -0,0 +1,47 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: UpdatePageSettingsOptions
+
+> **UpdatePageSettingsOptions** = `object`
+
+## Properties
+
+
+
+### listed
+
+> **listed**: `boolean`
+
+Whether the page should be listed in the wiki index.
+
+***
+
+
+
+### page
+
+> **page**: `string`
+
+The name of the page to update settings for.
+
+***
+
+
+
+### permLevel
+
+> **permLevel**: [`WikiPagePermissionLevel`](../enumerations/WikiPagePermissionLevel.md)
+
+The permission level for the page.
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+The name of the subreddit the page is in.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdateRuleOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdateRuleOptions.md
new file mode 100644
index 00000000..2c79a3ac
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdateRuleOptions.md
@@ -0,0 +1,15 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: UpdateRuleOptions
+
+> **UpdateRuleOptions** = `Partial`\<`Omit`\<`UpdateSubredditRuleRequest`, `"r"` \| `"oldShortName"`\>\> & `object`
+
+New values for an existing rule. All fields are optional. If a field is not provided, the existing value will not be changed.
+
+## Type declaration
+
+### kind?
+
+> `optional` **kind**: `"all"` \| `"link"` \| `"comment"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdateWidgetData.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdateWidgetData.md
new file mode 100644
index 00000000..2f554cbc
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdateWidgetData.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: UpdateWidgetData
+
+> **UpdateWidgetData** = `UpdateImageWidgetRequest` & `object` \| `UpdateCalendarWidgetRequest` & `object` \| `UpdateTextAreaWidgetRequest` & `object` \| `UpdateButtonWidgetRequest` & `object` \| `UpdateCommunityListWidgetRequest` & `object` \| `UpdatePostFlairWidgetRequest` & `object` \| `UpdateCustomWidgetRequest` & `object`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdateWikiPageOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdateWikiPageOptions.md
new file mode 100644
index 00000000..f8cd52c0
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UpdateWikiPageOptions.md
@@ -0,0 +1,47 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: UpdateWikiPageOptions
+
+> **UpdateWikiPageOptions** = `object`
+
+## Properties
+
+
+
+### content
+
+> **content**: `string`
+
+The new content of the page.
+
+***
+
+
+
+### page
+
+> **page**: `string`
+
+The name of the page to update.
+
+***
+
+
+
+### reason?
+
+> `optional` **reason**: `string`
+
+The reason for updating the page.
+
+***
+
+
+
+### subredditName
+
+> **subredditName**: `string`
+
+The name of the subreddit the page is in.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserFlair.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserFlair.md
new file mode 100644
index 00000000..6e15bace
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserFlair.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: UserFlair
+
+> **UserFlair** = `object`
+
+## Properties
+
+
+
+### flairCssClass?
+
+> `optional` **flairCssClass**: `string`
+
+The CSS class applied to this flair in the UI.
+
+***
+
+
+
+### flairText?
+
+> `optional` **flairText**: `string`
+
+The text displayed in the UI for this flair.
+
+***
+
+
+
+### user?
+
+> `optional` **user**: `string`
+
+The username of the user to which this flair is assigned.
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserFlairPageOptions.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserFlairPageOptions.md
new file mode 100644
index 00000000..6bf554f5
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserFlairPageOptions.md
@@ -0,0 +1,37 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: UserFlairPageOptions
+
+> **UserFlairPageOptions** = `object`
+
+## Properties
+
+
+
+### after?
+
+> `optional` **after**: `string`
+
+A user id optionally provided which will result in a slice of user flairs, starting after this user, to be returned.
+
+***
+
+
+
+### before?
+
+> `optional` **before**: `string`
+
+A user id optionally provided which will result in a slice of user flairs, starting before this user, to be returned.
+
+***
+
+
+
+### limit?
+
+> `optional` **limit**: `number`
+
+A limit to the number of flairs that will be returned. Default: 25, Max: 1000
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserNote.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserNote.md
new file mode 100644
index 00000000..6e7fc270
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserNote.md
@@ -0,0 +1,31 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: UserNote
+
+> **UserNote** = `object`
+
+## Properties
+
+
+
+### label?
+
+> `optional` **label**: [`UserNoteLabel`](UserNoteLabel.md)
+
+***
+
+
+
+### note?
+
+> `optional` **note**: `string`
+
+***
+
+
+
+### redditId?
+
+> `optional` **redditId**: `T1ID` \| `T3ID` \| `T5ID`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserNoteLabel.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserNoteLabel.md
new file mode 100644
index 00000000..8bc357bc
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserNoteLabel.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: UserNoteLabel
+
+> **UserNoteLabel** = `"BOT_BAN"` \| `"PERMA_BAN"` \| `"BAN"` \| `"ABUSE_WARNING"` \| `"SPAM_WARNING"` \| `"SPAM_WATCH"` \| `"SOLID_CONTRIBUTOR"` \| `"HELPFUL_USER"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserSocialLink.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserSocialLink.md
new file mode 100644
index 00000000..d31a528a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/UserSocialLink.md
@@ -0,0 +1,67 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: UserSocialLink
+
+> **UserSocialLink** = `object`
+
+## Field
+
+id: ID of the social link.
+
+## Field
+
+handle: Display name of social media link.
+
+## Field
+
+outboundUrl: Outbound url of social media link.
+
+## Field
+
+type: Type of social media link i.e. Instagram, YouTube.
+
+## Field
+
+title: Title or name of social media link.
+
+## Properties
+
+
+
+### handle?
+
+> `optional` **handle**: `string`
+
+***
+
+
+
+### id
+
+> **id**: `string`
+
+***
+
+
+
+### outboundUrl
+
+> **outboundUrl**: `string`
+
+***
+
+
+
+### title
+
+> **title**: `string`
+
+***
+
+
+
+### type
+
+> **type**: [`SocialLinkType`](../enumerations/SocialLinkType.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Vault.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Vault.md
new file mode 100644
index 00000000..1ad0cd6a
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Vault.md
@@ -0,0 +1,77 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: Vault
+
+> **Vault** = `object`
+
+A type representing a Vault (crypto wallet).
+
+## Properties
+
+
+
+### address
+
+> **address**: `string`
+
+The address of the Vault.
+
+#### Example
+
+```ts
+'0x205ee28744456bDBf180A0Fa7De51e0F116d54Ed'
+```
+
+***
+
+
+
+### createdAt
+
+> **createdAt**: `string`
+
+The date the Vault was created.
+
+***
+
+
+
+### isActive
+
+> **isActive**: `boolean`
+
+Whether the Vault is active.
+
+***
+
+
+
+### provider
+
+> **provider**: `string`
+
+The provider of the Vault address.
+
+#### Example
+
+```ts
+'ethereum'
+```
+
+***
+
+
+
+### userId
+
+> **userId**: `T2ID`
+
+The ID (starting with t2_) of the user owning the Vault.
+
+#### Example
+
+```ts
+'t2_1w72'
+```
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Visibility.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Visibility.md
new file mode 100644
index 00000000..b62cda2b
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/Visibility.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: Visibility
+
+> **Visibility** = `"show"` \| `"hide"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/WikiEditMode.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/WikiEditMode.md
new file mode 100644
index 00000000..f1f95f02
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/WikiEditMode.md
@@ -0,0 +1,7 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: WikiEditMode
+
+> **WikiEditMode** = `"disabled"` \| `"modonly"` \| `"anyone"`
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/WikiPageRevisionId.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/WikiPageRevisionId.md
new file mode 100644
index 00000000..8531614c
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/WikiPageRevisionId.md
@@ -0,0 +1,9 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: WikiPageRevisionId
+
+> **WikiPageRevisionId** = `` `${string}-${string}-${string}-${string}-${string}` ``
+
+The revision ID is a v4 UUID
diff --git a/versioned_docs/version-0.13/api/redditapi/models/type-aliases/WithUserData.md b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/WithUserData.md
new file mode 100644
index 00000000..ffac5e3f
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/type-aliases/WithUserData.md
@@ -0,0 +1,15 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Type Alias: WithUserData
+
+> **WithUserData** = `object`
+
+## Properties
+
+
+
+### user?
+
+> `optional` **user**: [`ConversationUserData`](ConversationUserData.md)
diff --git a/versioned_docs/version-0.13/api/redditapi/models/variables/GalleryMediaStatus.md b/versioned_docs/version-0.13/api/redditapi/models/variables/GalleryMediaStatus.md
new file mode 100644
index 00000000..9e05f267
--- /dev/null
+++ b/versioned_docs/version-0.13/api/redditapi/models/variables/GalleryMediaStatus.md
@@ -0,0 +1,27 @@
+[**@devvit/public-api v0.13.0-dev**](../../README.md)
+
+***
+
+# Variable: GalleryMediaStatus
+
+> `const` **GalleryMediaStatus**: `object`
+
+## Type declaration
+
+
+
+### FAILED
+
+> `readonly` **FAILED**: `2` = `2`
+
+
+
+### UNKNOWN
+
+> `readonly` **UNKNOWN**: `0` = `0`
+
+
+
+### VALID
+
+> `readonly` **VALID**: `1` = `1`
diff --git a/versioned_docs/version-0.13/assets/ai-tools/hackathon-logo.png b/versioned_docs/version-0.13/assets/ai-tools/hackathon-logo.png
new file mode 100644
index 00000000..0ce6dcaa
Binary files /dev/null and b/versioned_docs/version-0.13/assets/ai-tools/hackathon-logo.png differ
diff --git a/versioned_docs/version-0.13/assets/ai-tools/open-in-bolt-2x.png b/versioned_docs/version-0.13/assets/ai-tools/open-in-bolt-2x.png
new file mode 100644
index 00000000..9f440b47
Binary files /dev/null and b/versioned_docs/version-0.13/assets/ai-tools/open-in-bolt-2x.png differ
diff --git a/versioned_docs/version-0.13/assets/app-details-5.png b/versioned_docs/version-0.13/assets/app-details-5.png
new file mode 100644
index 00000000..cbaab15a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app-details-5.png differ
diff --git a/versioned_docs/version-0.13/assets/app-details-install-modal.png b/versioned_docs/version-0.13/assets/app-details-install-modal.png
new file mode 100644
index 00000000..85be9796
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app-details-install-modal.png differ
diff --git a/versioned_docs/version-0.13/assets/app-details.png b/versioned_docs/version-0.13/assets/app-details.png
new file mode 100644
index 00000000..049e5d9f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app-details.png differ
diff --git a/versioned_docs/version-0.13/assets/app-image-cover.png b/versioned_docs/version-0.13/assets/app-image-cover.png
new file mode 100644
index 00000000..c3a4ac02
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app-image-cover.png differ
diff --git a/versioned_docs/version-0.13/assets/app-image-fill.png b/versioned_docs/version-0.13/assets/app-image-fill.png
new file mode 100644
index 00000000..4b531d9e
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app-image-fill.png differ
diff --git a/versioned_docs/version-0.13/assets/app-image-fit.png b/versioned_docs/version-0.13/assets/app-image-fit.png
new file mode 100644
index 00000000..d37a95fc
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app-image-fit.png differ
diff --git a/versioned_docs/version-0.13/assets/app-image-fixed-size.png b/versioned_docs/version-0.13/assets/app-image-fixed-size.png
new file mode 100644
index 00000000..4497894a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app-image-fixed-size.png differ
diff --git a/versioned_docs/version-0.13/assets/app-image-relative-size.png b/versioned_docs/version-0.13/assets/app-image-relative-size.png
new file mode 100644
index 00000000..6289cab2
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app-image-relative-size.png differ
diff --git a/versioned_docs/version-0.13/assets/app-install-2.png b/versioned_docs/version-0.13/assets/app-install-2.png
new file mode 100644
index 00000000..8c15e66d
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app-install-2.png differ
diff --git a/versioned_docs/version-0.13/assets/app-update.png b/versioned_docs/version-0.13/assets/app-update.png
new file mode 100644
index 00000000..498c440b
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app-update.png differ
diff --git a/versioned_docs/version-0.13/assets/app_account_everything_permissions.png b/versioned_docs/version-0.13/assets/app_account_everything_permissions.png
new file mode 100644
index 00000000..a6d87f39
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app_account_everything_permissions.png differ
diff --git a/versioned_docs/version-0.13/assets/app_analytics.png b/versioned_docs/version-0.13/assets/app_analytics.png
new file mode 100644
index 00000000..1a04a174
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app_analytics.png differ
diff --git a/versioned_docs/version-0.13/assets/app_config_screen.png b/versioned_docs/version-0.13/assets/app_config_screen.png
new file mode 100644
index 00000000..0bc1afa9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app_config_screen.png differ
diff --git a/versioned_docs/version-0.13/assets/app_details.png b/versioned_docs/version-0.13/assets/app_details.png
new file mode 100644
index 00000000..260522ab
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app_details.png differ
diff --git a/versioned_docs/version-0.13/assets/app_failed_build_error.png b/versioned_docs/version-0.13/assets/app_failed_build_error.png
new file mode 100644
index 00000000..af542820
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app_failed_build_error.png differ
diff --git a/versioned_docs/version-0.13/assets/app_install.png b/versioned_docs/version-0.13/assets/app_install.png
new file mode 100644
index 00000000..c7e4527c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app_install.png differ
diff --git a/versioned_docs/version-0.13/assets/app_permissions.png b/versioned_docs/version-0.13/assets/app_permissions.png
new file mode 100644
index 00000000..a308d4fd
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app_permissions.png differ
diff --git a/versioned_docs/version-0.13/assets/app_upgrade.png b/versioned_docs/version-0.13/assets/app_upgrade.png
new file mode 100644
index 00000000..28e41adb
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app_upgrade.png differ
diff --git a/versioned_docs/version-0.13/assets/app_upgrade_confirm.png b/versioned_docs/version-0.13/assets/app_upgrade_confirm.png
new file mode 100644
index 00000000..8722b1c9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app_upgrade_confirm.png differ
diff --git a/versioned_docs/version-0.13/assets/app_versions_panel.png b/versioned_docs/version-0.13/assets/app_versions_panel.png
new file mode 100644
index 00000000..bea6fa36
Binary files /dev/null and b/versioned_docs/version-0.13/assets/app_versions_panel.png differ
diff --git a/versioned_docs/version-0.13/assets/ask_ai_icon.png b/versioned_docs/version-0.13/assets/ask_ai_icon.png
new file mode 100644
index 00000000..830c3ca0
Binary files /dev/null and b/versioned_docs/version-0.13/assets/ask_ai_icon.png differ
diff --git a/versioned_docs/version-0.13/assets/ask_ai_start_project.png b/versioned_docs/version-0.13/assets/ask_ai_start_project.png
new file mode 100644
index 00000000..fd320fa2
Binary files /dev/null and b/versioned_docs/version-0.13/assets/ask_ai_start_project.png differ
diff --git a/versioned_docs/version-0.13/assets/ask_ai_troubleshoot.png b/versioned_docs/version-0.13/assets/ask_ai_troubleshoot.png
new file mode 100644
index 00000000..85cd754f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/ask_ai_troubleshoot.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-appearance.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-appearance.png
new file mode 100644
index 00000000..aaeaa5a1
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-appearance.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-disabled.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-disabled.png
new file mode 100644
index 00000000..7fe9159f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-disabled.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-icon-label.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-icon-label.png
new file mode 100644
index 00000000..14efdb9c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-icon-label.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-sizes.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-sizes.png
new file mode 100644
index 00000000..30ec19b0
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-button-sizes.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-alienblue.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-alienblue.png
new file mode 100644
index 00000000..312d6c79
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-alienblue.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-berrypurple.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-berrypurple.png
new file mode 100644
index 00000000..c80c7975
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-berrypurple.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-brown.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-brown.png
new file mode 100644
index 00000000..0892f8b6
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-brown.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-coolgray.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-coolgray.png
new file mode 100644
index 00000000..d2480c24
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-coolgray.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-kiwigreen.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-kiwigreen.png
new file mode 100644
index 00000000..806b0512
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-kiwigreen.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-lightblue.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-lightblue.png
new file mode 100644
index 00000000..b260a918
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-lightblue.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-lime.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-lime.png
new file mode 100644
index 00000000..eb3abec7
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-lime.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-mintgreen.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-mintgreen.png
new file mode 100644
index 00000000..76fad270
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-mintgreen.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-orangered.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-orangered.png
new file mode 100644
index 00000000..436d6b70
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-orangered.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-periwinkle.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-periwinkle.png
new file mode 100644
index 00000000..10bddd8b
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-periwinkle.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-puregray.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-puregray.png
new file mode 100644
index 00000000..e528ba04
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-puregray.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-red.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-red.png
new file mode 100644
index 00000000..9f4c7bde
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-red.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-sakurapink.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-sakurapink.png
new file mode 100644
index 00000000..37b138df
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-sakurapink.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-yellow.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-yellow.png
new file mode 100644
index 00000000..d473be2a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-yellow.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-yelloworange.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-yelloworange.png
new file mode 100644
index 00000000..bf4d5945
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-colors-yelloworange.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-alignment.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-alignment.png
new file mode 100644
index 00000000..e270da2d
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-alignment.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-border-width.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-border-width.png
new file mode 100644
index 00000000..ed4f3669
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-border-width.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-corner-radius.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-corner-radius.png
new file mode 100644
index 00000000..cc3e6a57
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-corner-radius.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-gap.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-gap.png
new file mode 100644
index 00000000..9999f283
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-gap.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-padding.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-padding.png
new file mode 100644
index 00000000..a7dbe692
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-padding.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-reverse.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-reverse.png
new file mode 100644
index 00000000..d2210806
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-stacks-reverse.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-text-size.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-text-size.png
new file mode 100644
index 00000000..456ef23d
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-text-size.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks/docs-blocks-text-weights.png b/versioned_docs/version-0.13/assets/blocks/docs-blocks-text-weights.png
new file mode 100644
index 00000000..fd3651d6
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks/docs-blocks-text-weights.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks_post_example.png b/versioned_docs/version-0.13/assets/blocks_post_example.png
new file mode 100644
index 00000000..8a5adcd9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks_post_example.png differ
diff --git a/versioned_docs/version-0.13/assets/blocks_post_menu.png b/versioned_docs/version-0.13/assets/blocks_post_menu.png
new file mode 100644
index 00000000..41d373fb
Binary files /dev/null and b/versioned_docs/version-0.13/assets/blocks_post_menu.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/adding-links/adding-links-external-link-dialog.png b/versioned_docs/version-0.13/assets/capabilities/adding-links/adding-links-external-link-dialog.png
new file mode 100644
index 00000000..cfb9e946
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/adding-links/adding-links-external-link-dialog.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/app-configurations/app-configurations-all-types.png b/versioned_docs/version-0.13/assets/capabilities/app-configurations/app-configurations-all-types.png
new file mode 100644
index 00000000..294e141a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/app-configurations/app-configurations-all-types.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/app-configurations/app-configurations-data-toast.png b/versioned_docs/version-0.13/assets/capabilities/app-configurations/app-configurations-data-toast.png
new file mode 100644
index 00000000..7899fa2a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/app-configurations/app-configurations-data-toast.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/app-configurations/app-configurations-validation.png b/versioned_docs/version-0.13/assets/capabilities/app-configurations/app-configurations-validation.png
new file mode 100644
index 00000000..c2c093fc
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/app-configurations/app-configurations-validation.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/app_permissions.png b/versioned_docs/version-0.13/assets/capabilities/app_permissions.png
new file mode 100644
index 00000000..523c13d6
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/app_permissions.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/forms/forms-boolean.png b/versioned_docs/version-0.13/assets/capabilities/forms/forms-boolean.png
new file mode 100644
index 00000000..7b4f93d9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/forms/forms-boolean.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/forms/forms-dialog.png b/versioned_docs/version-0.13/assets/capabilities/forms/forms-dialog.png
new file mode 100644
index 00000000..99cf1bdd
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/forms/forms-dialog.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/forms/forms-image.png b/versioned_docs/version-0.13/assets/capabilities/forms/forms-image.png
new file mode 100644
index 00000000..8f714bd8
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/forms/forms-image.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/forms/forms-number.png b/versioned_docs/version-0.13/assets/capabilities/forms/forms-number.png
new file mode 100644
index 00000000..fae216de
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/forms/forms-number.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/forms/forms-paragraph.png b/versioned_docs/version-0.13/assets/capabilities/forms/forms-paragraph.png
new file mode 100644
index 00000000..a3a0d19c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/forms/forms-paragraph.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/forms/forms-select.png b/versioned_docs/version-0.13/assets/capabilities/forms/forms-select.png
new file mode 100644
index 00000000..c92fa319
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/forms/forms-select.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/forms/forms-string.png b/versioned_docs/version-0.13/assets/capabilities/forms/forms-string.png
new file mode 100644
index 00000000..8fc3fe94
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/forms/forms-string.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/http-fetch/http-fetch-legal-links.png b/versioned_docs/version-0.13/assets/capabilities/http-fetch/http-fetch-legal-links.png
new file mode 100644
index 00000000..fe5659a9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/http-fetch/http-fetch-legal-links.png differ
diff --git a/versioned_docs/version-0.13/assets/capabilities/menu-actions/menu-actions-subreddit.png b/versioned_docs/version-0.13/assets/capabilities/menu-actions/menu-actions-subreddit.png
new file mode 100644
index 00000000..c5d63135
Binary files /dev/null and b/versioned_docs/version-0.13/assets/capabilities/menu-actions/menu-actions-subreddit.png differ
diff --git a/versioned_docs/version-0.13/assets/clock-plugin.png b/versioned_docs/version-0.13/assets/clock-plugin.png
new file mode 100644
index 00000000..a5319e8c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/clock-plugin.png differ
diff --git a/versioned_docs/version-0.13/assets/communities-install-list.png b/versioned_docs/version-0.13/assets/communities-install-list.png
new file mode 100644
index 00000000..9fd1f43d
Binary files /dev/null and b/versioned_docs/version-0.13/assets/communities-install-list.png differ
diff --git a/versioned_docs/version-0.13/assets/communities_install.png b/versioned_docs/version-0.13/assets/communities_install.png
new file mode 100644
index 00000000..24241213
Binary files /dev/null and b/versioned_docs/version-0.13/assets/communities_install.png differ
diff --git a/versioned_docs/version-0.13/assets/community-games/bubbleshooterpro.png b/versioned_docs/version-0.13/assets/community-games/bubbleshooterpro.png
new file mode 100644
index 00000000..82df4cff
Binary files /dev/null and b/versioned_docs/version-0.13/assets/community-games/bubbleshooterpro.png differ
diff --git a/versioned_docs/version-0.13/assets/community-games/farmmergevalley.png b/versioned_docs/version-0.13/assets/community-games/farmmergevalley.png
new file mode 100644
index 00000000..85d98806
Binary files /dev/null and b/versioned_docs/version-0.13/assets/community-games/farmmergevalley.png differ
diff --git a/versioned_docs/version-0.13/assets/community-games/hotandcold.jpg b/versioned_docs/version-0.13/assets/community-games/hotandcold.jpg
new file mode 100644
index 00000000..a1d01bb9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/community-games/hotandcold.jpg differ
diff --git a/versioned_docs/version-0.13/assets/community-games/syllo_leaderboard.jpg b/versioned_docs/version-0.13/assets/community-games/syllo_leaderboard.jpg
new file mode 100644
index 00000000..5366b9e9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/community-games/syllo_leaderboard.jpg differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/custom-posts-dimensions.png b/versioned_docs/version-0.13/assets/custom-posts/custom-posts-dimensions.png
new file mode 100644
index 00000000..7aaed307
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/custom-posts-dimensions.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/custom-posts-overview.png b/versioned_docs/version-0.13/assets/custom-posts/custom-posts-overview.png
new file mode 100644
index 00000000..cbd62206
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/custom-posts-overview.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/custom-posts-useinterval.png b/versioned_docs/version-0.13/assets/custom-posts/custom-posts-useinterval.png
new file mode 100644
index 00000000..c49ea89d
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/custom-posts-useinterval.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-app-settings-alt.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-app-settings-alt.png
new file mode 100644
index 00000000..0a2cd1c7
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-app-settings-alt.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-app-settings.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-app-settings.png
new file mode 100644
index 00000000..9c48595f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-app-settings.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-custom-experience-pro.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-custom-experience-pro.png
new file mode 100644
index 00000000..b3368b24
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-custom-experience-pro.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-custom-experience.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-custom-experience.png
new file mode 100644
index 00000000..cfc78b5c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-custom-experience.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-empty.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-empty.png
new file mode 100644
index 00000000..1042adcb
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-empty.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-forms.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-forms.png
new file mode 100644
index 00000000..f2aec204
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-forms.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-image-uploads.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-image-uploads.png
new file mode 100644
index 00000000..567e71ab
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-image-uploads.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-intro-to-devvit.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-intro-to-devvit.png
new file mode 100644
index 00000000..6c7df8e2
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-intro-to-devvit.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-menu-action.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-menu-action.png
new file mode 100644
index 00000000..b3e1b2e7
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-menu-action.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-redis.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-redis.png
new file mode 100644
index 00000000..65e69adb
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-redis.png differ
diff --git a/versioned_docs/version-0.13/assets/custom-posts/templates/template-triggers.png b/versioned_docs/version-0.13/assets/custom-posts/templates/template-triggers.png
new file mode 100644
index 00000000..a1a3360e
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom-posts/templates/template-triggers.png differ
diff --git a/versioned_docs/version-0.13/assets/custom_action.png b/versioned_docs/version-0.13/assets/custom_action.png
new file mode 100644
index 00000000..8456a516
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom_action.png differ
diff --git a/versioned_docs/version-0.13/assets/custom_post_form_example_1.png b/versioned_docs/version-0.13/assets/custom_post_form_example_1.png
new file mode 100644
index 00000000..caa778ef
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom_post_form_example_1.png differ
diff --git a/versioned_docs/version-0.13/assets/custom_post_form_example_2.png b/versioned_docs/version-0.13/assets/custom_post_form_example_2.png
new file mode 100644
index 00000000..bdfa90bc
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom_post_form_example_2.png differ
diff --git a/versioned_docs/version-0.13/assets/custom_post_menu_item.png b/versioned_docs/version-0.13/assets/custom_post_menu_item.png
new file mode 100644
index 00000000..e564fee5
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom_post_menu_item.png differ
diff --git a/versioned_docs/version-0.13/assets/custom_post_new_window.png b/versioned_docs/version-0.13/assets/custom_post_new_window.png
new file mode 100644
index 00000000..77d23d09
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom_post_new_window.png differ
diff --git a/versioned_docs/version-0.13/assets/custom_post_poll_example_1.png b/versioned_docs/version-0.13/assets/custom_post_poll_example_1.png
new file mode 100644
index 00000000..1b96bd7a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom_post_poll_example_1.png differ
diff --git a/versioned_docs/version-0.13/assets/custom_post_poll_example_2.png b/versioned_docs/version-0.13/assets/custom_post_poll_example_2.png
new file mode 100644
index 00000000..60d8327c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom_post_poll_example_2.png differ
diff --git a/versioned_docs/version-0.13/assets/custom_post_poll_example_3.png b/versioned_docs/version-0.13/assets/custom_post_poll_example_3.png
new file mode 100644
index 00000000..7395d418
Binary files /dev/null and b/versioned_docs/version-0.13/assets/custom_post_poll_example_3.png differ
diff --git a/versioned_docs/version-0.13/assets/default_product_image.png b/versioned_docs/version-0.13/assets/default_product_image.png
new file mode 100644
index 00000000..90888788
Binary files /dev/null and b/versioned_docs/version-0.13/assets/default_product_image.png differ
diff --git a/versioned_docs/version-0.13/assets/developer_permissions.png b/versioned_docs/version-0.13/assets/developer_permissions.png
new file mode 100644
index 00000000..18aad5fe
Binary files /dev/null and b/versioned_docs/version-0.13/assets/developer_permissions.png differ
diff --git a/versioned_docs/version-0.13/assets/devvit-flair.png b/versioned_docs/version-0.13/assets/devvit-flair.png
new file mode 100644
index 00000000..e9d73983
Binary files /dev/null and b/versioned_docs/version-0.13/assets/devvit-flair.png differ
diff --git a/versioned_docs/version-0.13/assets/devvit_web/clone_repo.png b/versioned_docs/version-0.13/assets/devvit_web/clone_repo.png
new file mode 100644
index 00000000..1f761b48
Binary files /dev/null and b/versioned_docs/version-0.13/assets/devvit_web/clone_repo.png differ
diff --git a/versioned_docs/version-0.13/assets/devvit_web/create_playtest_post.png b/versioned_docs/version-0.13/assets/devvit_web/create_playtest_post.png
new file mode 100644
index 00000000..56ed69f3
Binary files /dev/null and b/versioned_docs/version-0.13/assets/devvit_web/create_playtest_post.png differ
diff --git a/versioned_docs/version-0.13/assets/devvit_web/create_repo.png b/versioned_docs/version-0.13/assets/devvit_web/create_repo.png
new file mode 100644
index 00000000..e5d61218
Binary files /dev/null and b/versioned_docs/version-0.13/assets/devvit_web/create_repo.png differ
diff --git a/versioned_docs/version-0.13/assets/devvit_web/devvit_web_arch.png b/versioned_docs/version-0.13/assets/devvit_web/devvit_web_arch.png
new file mode 100644
index 00000000..dc5e4015
Binary files /dev/null and b/versioned_docs/version-0.13/assets/devvit_web/devvit_web_arch.png differ
diff --git a/versioned_docs/version-0.13/assets/devvit_web/playtest_app.png b/versioned_docs/version-0.13/assets/devvit_web/playtest_app.png
new file mode 100644
index 00000000..e15753ac
Binary files /dev/null and b/versioned_docs/version-0.13/assets/devvit_web/playtest_app.png differ
diff --git a/versioned_docs/version-0.13/assets/devvit_web/set_up_repo.png b/versioned_docs/version-0.13/assets/devvit_web/set_up_repo.png
new file mode 100644
index 00000000..b0fb9534
Binary files /dev/null and b/versioned_docs/version-0.13/assets/devvit_web/set_up_repo.png differ
diff --git a/versioned_docs/version-0.13/assets/docs-app-image-assets-1.png b/versioned_docs/version-0.13/assets/docs-app-image-assets-1.png
new file mode 100644
index 00000000..e7aa477e
Binary files /dev/null and b/versioned_docs/version-0.13/assets/docs-app-image-assets-1.png differ
diff --git a/versioned_docs/version-0.13/assets/docs-app-image-assets-2.png b/versioned_docs/version-0.13/assets/docs-app-image-assets-2.png
new file mode 100644
index 00000000..a8bfd131
Binary files /dev/null and b/versioned_docs/version-0.13/assets/docs-app-image-assets-2.png differ
diff --git a/versioned_docs/version-0.13/assets/domain_exceptions.png b/versioned_docs/version-0.13/assets/domain_exceptions.png
new file mode 100644
index 00000000..fe7bd18e
Binary files /dev/null and b/versioned_docs/version-0.13/assets/domain_exceptions.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-bingo.png b/versioned_docs/version-0.13/assets/examples/app-bingo.png
new file mode 100644
index 00000000..f74c9147
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-bingo.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-blocks-gallery.png b/versioned_docs/version-0.13/assets/examples/app-blocks-gallery.png
new file mode 100644
index 00000000..9238ae7a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-blocks-gallery.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-capture-the-flag.png b/versioned_docs/version-0.13/assets/examples/app-capture-the-flag.png
new file mode 100644
index 00000000..b11225ad
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-capture-the-flag.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-chess-quizzes.png b/versioned_docs/version-0.13/assets/examples/app-chess-quizzes.png
new file mode 100644
index 00000000..15593e65
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-chess-quizzes.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-feed-me.png b/versioned_docs/version-0.13/assets/examples/app-feed-me.png
new file mode 100644
index 00000000..a400a3ed
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-feed-me.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-icon-gallery.png b/versioned_docs/version-0.13/assets/examples/app-icon-gallery.png
new file mode 100644
index 00000000..9982303e
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-icon-gallery.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-live-scores-soccer.png b/versioned_docs/version-0.13/assets/examples/app-live-scores-soccer.png
new file mode 100644
index 00000000..4f35be77
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-live-scores-soccer.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-live-scores-taylor-version.png b/versioned_docs/version-0.13/assets/examples/app-live-scores-taylor-version.png
new file mode 100644
index 00000000..da6c6d2c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-live-scores-taylor-version.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-livescores-ts-desktop.png b/versioned_docs/version-0.13/assets/examples/app-livescores-ts-desktop.png
new file mode 100644
index 00000000..164e2793
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-livescores-ts-desktop.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-livescores-ts-mobile.png b/versioned_docs/version-0.13/assets/examples/app-livescores-ts-mobile.png
new file mode 100644
index 00000000..cea03de2
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-livescores-ts-mobile.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-minesweeper.png b/versioned_docs/version-0.13/assets/examples/app-minesweeper.png
new file mode 100644
index 00000000..3503c641
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-minesweeper.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-mtg.png b/versioned_docs/version-0.13/assets/examples/app-mtg.png
new file mode 100644
index 00000000..1dc7f1fe
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-mtg.png differ
diff --git a/versioned_docs/version-0.13/assets/examples/app-pixelary.png b/versioned_docs/version-0.13/assets/examples/app-pixelary.png
new file mode 100644
index 00000000..0cc45d8c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/examples/app-pixelary.png differ
diff --git a/versioned_docs/version-0.13/assets/experience-post-example.png b/versioned_docs/version-0.13/assets/experience-post-example.png
new file mode 100644
index 00000000..619814e5
Binary files /dev/null and b/versioned_docs/version-0.13/assets/experience-post-example.png differ
diff --git a/versioned_docs/version-0.13/assets/fallback_markdown.png b/versioned_docs/version-0.13/assets/fallback_markdown.png
new file mode 100644
index 00000000..7c271276
Binary files /dev/null and b/versioned_docs/version-0.13/assets/fallback_markdown.png differ
diff --git a/versioned_docs/version-0.13/assets/fallback_richtext.png b/versioned_docs/version-0.13/assets/fallback_richtext.png
new file mode 100644
index 00000000..1e247c30
Binary files /dev/null and b/versioned_docs/version-0.13/assets/fallback_richtext.png differ
diff --git a/versioned_docs/version-0.13/assets/fallback_text_string.png b/versioned_docs/version-0.13/assets/fallback_text_string.png
new file mode 100644
index 00000000..06e05e21
Binary files /dev/null and b/versioned_docs/version-0.13/assets/fallback_text_string.png differ
diff --git a/versioned_docs/version-0.13/assets/featured_cd_mobile.png b/versioned_docs/version-0.13/assets/featured_cd_mobile.png
new file mode 100644
index 00000000..15bdd76a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/featured_cd_mobile.png differ
diff --git a/versioned_docs/version-0.13/assets/featured_cd_web.png b/versioned_docs/version-0.13/assets/featured_cd_web.png
new file mode 100644
index 00000000..66352d30
Binary files /dev/null and b/versioned_docs/version-0.13/assets/featured_cd_web.png differ
diff --git a/versioned_docs/version-0.13/assets/featured_games.png b/versioned_docs/version-0.13/assets/featured_games.png
new file mode 100644
index 00000000..91c5c435
Binary files /dev/null and b/versioned_docs/version-0.13/assets/featured_games.png differ
diff --git a/versioned_docs/version-0.13/assets/form.png b/versioned_docs/version-0.13/assets/form.png
new file mode 100644
index 00000000..58519c1c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/form.png differ
diff --git a/versioned_docs/version-0.13/assets/form_popup.png b/versioned_docs/version-0.13/assets/form_popup.png
new file mode 100644
index 00000000..003f53d0
Binary files /dev/null and b/versioned_docs/version-0.13/assets/form_popup.png differ
diff --git a/versioned_docs/version-0.13/assets/get_settings_toast_output.png b/versioned_docs/version-0.13/assets/get_settings_toast_output.png
new file mode 100644
index 00000000..0b5fe885
Binary files /dev/null and b/versioned_docs/version-0.13/assets/get_settings_toast_output.png differ
diff --git a/versioned_docs/version-0.13/assets/hello_block.png b/versioned_docs/version-0.13/assets/hello_block.png
new file mode 100644
index 00000000..e6f3bf6c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/hello_block.png differ
diff --git a/versioned_docs/version-0.13/assets/hello_blocks_v2.png b/versioned_docs/version-0.13/assets/hello_blocks_v2.png
new file mode 100644
index 00000000..f71c4fed
Binary files /dev/null and b/versioned_docs/version-0.13/assets/hello_blocks_v2.png differ
diff --git a/versioned_docs/version-0.13/assets/icon_examples_changelog.png b/versioned_docs/version-0.13/assets/icon_examples_changelog.png
new file mode 100644
index 00000000..fbb920ae
Binary files /dev/null and b/versioned_docs/version-0.13/assets/icon_examples_changelog.png differ
diff --git a/versioned_docs/version-0.13/assets/icons/icon-3rd-party-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-3rd-party-fill.svg
new file mode 100644
index 00000000..8a17b83f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-3rd-party-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-3rd-party-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-3rd-party-outline.svg
new file mode 100644
index 00000000..543f46a2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-3rd-party-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-activity-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-activity-fill.svg
new file mode 100644
index 00000000..b075118e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-activity-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-activity-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-activity-outline.svg
new file mode 100644
index 00000000..e0dd0fd3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-activity-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-add-emoji-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-add-emoji-fill.svg
new file mode 100644
index 00000000..1e258d8e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-add-emoji-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-add-emoji-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-add-emoji-outline.svg
new file mode 100644
index 00000000..c0fb7077
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-add-emoji-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-add-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-add-fill-24.svg
new file mode 100644
index 00000000..99b2b25b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-add-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-add-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-add-fill.svg
new file mode 100644
index 00000000..59f84598
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-add-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-add-media-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-add-media-fill.svg
new file mode 100644
index 00000000..cdfe2808
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-add-media-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-add-media-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-add-media-outline.svg
new file mode 100644
index 00000000..5a928518
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-add-media-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-add-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-add-outline-24.svg
new file mode 100644
index 00000000..6d1c0b17
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-add-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-add-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-add-outline.svg
new file mode 100644
index 00000000..ae3492c1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-add-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-add-to-feed-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-add-to-feed-fill.svg
new file mode 100644
index 00000000..f0e9ff51
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-add-to-feed-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-add-to-feed-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-add-to-feed-outline.svg
new file mode 100644
index 00000000..810f0f92
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-add-to-feed-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-admin-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-admin-fill.svg
new file mode 100644
index 00000000..6499db27
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-admin-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-admin-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-admin-outline.svg
new file mode 100644
index 00000000..67a6ec72
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-admin-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ads-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-ads-fill.svg
new file mode 100644
index 00000000..a65520ab
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ads-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ads-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-ads-outline.svg
new file mode 100644
index 00000000..7e422927
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ads-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-align-center-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-align-center-fill.svg
new file mode 100644
index 00000000..a1b8363f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-align-center-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-align-center-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-align-center-outline.svg
new file mode 100644
index 00000000..b71c9264
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-align-center-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-align-left-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-align-left-fill.svg
new file mode 100644
index 00000000..846f7cc7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-align-left-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-align-left-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-align-left-outline.svg
new file mode 100644
index 00000000..c85dc5fa
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-align-left-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-align-right-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-align-right-fill.svg
new file mode 100644
index 00000000..0a6ba952
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-align-right-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-align-right-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-align-right-outline.svg
new file mode 100644
index 00000000..9b9b0a2c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-align-right-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-all-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-all-fill.svg
new file mode 100644
index 00000000..5ab79216
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-all-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-all-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-all-outline.svg
new file mode 100644
index 00000000..eea5d15d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-all-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-appearance-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-appearance-fill.svg
new file mode 100644
index 00000000..016c52f2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-appearance-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-appearance-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-appearance-outline.svg
new file mode 100644
index 00000000..d90839ac
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-appearance-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-approve-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-approve-fill.svg
new file mode 100644
index 00000000..ad45b4ef
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-approve-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-approve-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-approve-outline.svg
new file mode 100644
index 00000000..9d4f2563
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-approve-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-archived-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-archived-fill.svg
new file mode 100644
index 00000000..ad770c5a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-archived-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-archived-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-archived-outline.svg
new file mode 100644
index 00000000..a1daf995
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-archived-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-aspect-ratio-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-aspect-ratio-fill.svg
new file mode 100644
index 00000000..df78ddb3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-aspect-ratio-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-aspect-ratio-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-aspect-ratio-outline.svg
new file mode 100644
index 00000000..0253c370
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-aspect-ratio-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-aspect-rectangle-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-aspect-rectangle-fill.svg
new file mode 100644
index 00000000..bc66cefa
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-aspect-rectangle-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-aspect-rectangle-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-aspect-rectangle-outline.svg
new file mode 100644
index 00000000..6e6c59af
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-aspect-rectangle-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-attach-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-attach-fill.svg
new file mode 100644
index 00000000..34fe8250
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-attach-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-attach-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-attach-outline.svg
new file mode 100644
index 00000000..d0e5403c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-attach-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-audience-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-audience-fill.svg
new file mode 100644
index 00000000..0fcc5b8f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-audience-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-audience-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-audience-outline.svg
new file mode 100644
index 00000000..867df736
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-audience-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-audio-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-audio-fill.svg
new file mode 100644
index 00000000..81370bea
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-audio-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-audio-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-audio-outline.svg
new file mode 100644
index 00000000..fa373832
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-audio-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-author-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-author-fill.svg
new file mode 100644
index 00000000..3324936e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-author-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-author-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-author-outline.svg
new file mode 100644
index 00000000..a15b5af6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-author-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-automod-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-automod-fill.svg
new file mode 100644
index 00000000..d852bc09
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-automod-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-automod-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-automod-outline.svg
new file mode 100644
index 00000000..a560282d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-automod-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-avatar-style-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-avatar-style-fill.svg
new file mode 100644
index 00000000..5870f91a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-avatar-style-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-avatar-style-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-avatar-style-outline.svg
new file mode 100644
index 00000000..2b31769c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-avatar-style-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-award-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-award-fill.svg
new file mode 100644
index 00000000..0cc0b178
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-award-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-award-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-award-outline.svg
new file mode 100644
index 00000000..a9c9b118
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-award-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-back-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-back-fill-24.svg
new file mode 100644
index 00000000..8d752726
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-back-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-back-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-back-fill.svg
new file mode 100644
index 00000000..9915841e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-back-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-back-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-back-outline-24.svg
new file mode 100644
index 00000000..24f38490
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-back-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-back-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-back-outline.svg
new file mode 100644
index 00000000..e0a29588
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-back-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-backup-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-backup-fill.svg
new file mode 100644
index 00000000..ff5e9bbc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-backup-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-backup-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-backup-outline.svg
new file mode 100644
index 00000000..9eacf619
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-backup-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ban-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-ban-fill.svg
new file mode 100644
index 00000000..536b7ca1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ban-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ban-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-ban-outline.svg
new file mode 100644
index 00000000..209e5d98
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ban-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-basketball-color-24.svg b/versioned_docs/version-0.13/assets/icons/icon-basketball-color-24.svg
new file mode 100644
index 00000000..34f2d20f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-basketball-color-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-basketball-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-basketball-fill-24.svg
new file mode 100644
index 00000000..3188dfe9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-basketball-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-basketball-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-basketball-outline-24.svg
new file mode 100644
index 00000000..83894d13
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-basketball-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-best-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-best-fill.svg
new file mode 100644
index 00000000..435ef82d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-best-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-best-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-best-outline.svg
new file mode 100644
index 00000000..55643001
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-best-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-binoculars-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-binoculars-fill.svg
new file mode 100644
index 00000000..40620bfb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-binoculars-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-binoculars-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-binoculars-outline.svg
new file mode 100644
index 00000000..0e2c2a4c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-binoculars-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-caret-updown-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-caret-updown-fill.svg
new file mode 100644
index 00000000..9ebc2d1a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-caret-updown-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-caret-updown-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-caret-updown-outline.svg
new file mode 100644
index 00000000..1f546702
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-caret-updown-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-latest-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-latest-fill.svg
new file mode 100644
index 00000000..19a21bde
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-latest-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-latest-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-latest-outline.svg
new file mode 100644
index 00000000..d4d0ba1d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-latest-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-planet-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-planet-fill.svg
new file mode 100644
index 00000000..de9f2875
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-planet-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-planet-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-planet-outline.svg
new file mode 100644
index 00000000..1191ec27
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-planet-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-talk-01-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-talk-01-outline.svg
new file mode 100644
index 00000000..f0320473
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-talk-01-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-talk-02-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-talk-02-outline.svg
new file mode 100644
index 00000000..a9ffbf13
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-talk-02-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-talk-add-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-talk-add-fill.svg
new file mode 100644
index 00000000..02417667
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-talk-add-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-talk-add-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-talk-add-outline.svg
new file mode 100644
index 00000000..238d0b2d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-talk-add-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-telescope-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-telescope-fill.svg
new file mode 100644
index 00000000..1d33e54e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-telescope-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-beta-telescope-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-beta-telescope-outline.svg
new file mode 100644
index 00000000..f6d80314
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-beta-telescope-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-block-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-block-fill.svg
new file mode 100644
index 00000000..3dc16c9d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-block-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-block-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-block-outline.svg
new file mode 100644
index 00000000..5573cbd6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-block-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-blockchain-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-blockchain-fill.svg
new file mode 100644
index 00000000..2f44aebf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-blockchain-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-blockchain-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-blockchain-outline.svg
new file mode 100644
index 00000000..f9692627
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-blockchain-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-bold-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-bold-fill.svg
new file mode 100644
index 00000000..3ac8e479
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-bold-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-bold-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-bold-outline.svg
new file mode 100644
index 00000000..4821692e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-bold-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-bot-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-bot-fill.svg
new file mode 100644
index 00000000..a368bf22
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-bot-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-bot-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-bot-outline.svg
new file mode 100644
index 00000000..b83870f9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-bot-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-bounce-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-bounce-fill.svg
new file mode 100644
index 00000000..702f7dec
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-bounce-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-bounce-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-bounce-outline.svg
new file mode 100644
index 00000000..4e90c6e9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-bounce-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-brand-awareness-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-brand-awareness-fill.svg
new file mode 100644
index 00000000..f295907a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-brand-awareness-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-brand-awareness-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-brand-awareness-outline.svg
new file mode 100644
index 00000000..630501d5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-brand-awareness-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-browse-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-browse-fill.svg
new file mode 100644
index 00000000..4c59d268
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-browse-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-browse-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-browse-outline.svg
new file mode 100644
index 00000000..56235f72
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-browse-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-browser-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-browser-fill.svg
new file mode 100644
index 00000000..7992f73f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-browser-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-browser-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-browser-outline.svg
new file mode 100644
index 00000000..c62d27d7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-browser-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-cake-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-cake-fill.svg
new file mode 100644
index 00000000..598e5314
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-cake-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-cake-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-cake-outline.svg
new file mode 100644
index 00000000..345098d0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-cake-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-calendar-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-calendar-fill.svg
new file mode 100644
index 00000000..1ce757d1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-calendar-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-calendar-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-calendar-outline.svg
new file mode 100644
index 00000000..3334631b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-calendar-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-camera-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-camera-fill-24.svg
new file mode 100644
index 00000000..b7fae92c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-camera-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-camera-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-camera-fill.svg
new file mode 100644
index 00000000..2dd491c4
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-camera-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-camera-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-camera-outline-24.svg
new file mode 100644
index 00000000..6a5e003f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-camera-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-camera-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-camera-outline.svg
new file mode 100644
index 00000000..8641d11d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-camera-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-campaign-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-campaign-fill.svg
new file mode 100644
index 00000000..7223b7d5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-campaign-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-campaign-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-campaign-outline.svg
new file mode 100644
index 00000000..c6e1bc94
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-campaign-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-caret-down-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-caret-down-fill.svg
new file mode 100644
index 00000000..c02ba9c7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-caret-down-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-caret-down-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-caret-down-outline.svg
new file mode 100644
index 00000000..6450b6a6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-caret-down-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-caret-left-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-caret-left-fill.svg
new file mode 100644
index 00000000..b9526918
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-caret-left-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-caret-left-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-caret-left-outline.svg
new file mode 100644
index 00000000..a108c3c2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-caret-left-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-caret-right-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-caret-right-fill.svg
new file mode 100644
index 00000000..16597e50
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-caret-right-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-caret-right-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-caret-right-outline.svg
new file mode 100644
index 00000000..c90909f4
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-caret-right-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-caret-up-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-caret-up-fill.svg
new file mode 100644
index 00000000..6404217c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-caret-up-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-caret-up-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-caret-up-outline.svg
new file mode 100644
index 00000000..4b0f9a78
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-caret-up-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chat-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-chat-fill-24.svg
new file mode 100644
index 00000000..ddec741f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chat-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chat-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-chat-fill.svg
new file mode 100644
index 00000000..3a482240
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chat-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chat-group-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-chat-group-fill.svg
new file mode 100644
index 00000000..4eaac310
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chat-group-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chat-group-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-chat-group-outline.svg
new file mode 100644
index 00000000..d2bdf29f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chat-group-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chat-new-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-chat-new-fill.svg
new file mode 100644
index 00000000..79ec3040
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chat-new-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chat-new-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-chat-new-outline.svg
new file mode 100644
index 00000000..32f1bbf5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chat-new-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chat-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-chat-outline-24.svg
new file mode 100644
index 00000000..0a479099
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chat-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chat-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-chat-outline.svg
new file mode 100644
index 00000000..c1292da5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chat-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chat-private-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-chat-private-fill.svg
new file mode 100644
index 00000000..8394f0df
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chat-private-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chat-private-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-chat-private-outline.svg
new file mode 100644
index 00000000..d7e24cea
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chat-private-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-checkbox-dismiss-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-checkbox-dismiss-fill.svg
new file mode 100644
index 00000000..017df15b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-checkbox-dismiss-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-checkbox-dismiss-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-checkbox-dismiss-outline.svg
new file mode 100644
index 00000000..475aa619
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-checkbox-dismiss-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-checkbox-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-checkbox-fill.svg
new file mode 100644
index 00000000..13d4fb4c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-checkbox-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-checkbox-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-checkbox-outline.svg
new file mode 100644
index 00000000..30d5c6fa
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-checkbox-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-checkmark-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-checkmark-fill.svg
new file mode 100644
index 00000000..bd746f3a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-checkmark-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-checkmark-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-checkmark-outline.svg
new file mode 100644
index 00000000..51b95142
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-checkmark-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chrome-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-chrome-fill.svg
new file mode 100644
index 00000000..861618f2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chrome-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-chrome-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-chrome-outline.svg
new file mode 100644
index 00000000..3fbbc47e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-chrome-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-clear-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-clear-fill.svg
new file mode 100644
index 00000000..130cee20
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-clear-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-clear-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-clear-outline.svg
new file mode 100644
index 00000000..5ca3b18e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-clear-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-client-list-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-client-list-fill.svg
new file mode 100644
index 00000000..de9438d9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-client-list-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-client-list-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-client-list-outline.svg
new file mode 100644
index 00000000..c2025eb5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-client-list-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-close-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-close-fill.svg
new file mode 100644
index 00000000..7457383e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-close-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-close-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-close-outline.svg
new file mode 100644
index 00000000..3dbfadbc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-close-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-closed-captioning-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-closed-captioning-fill.svg
new file mode 100644
index 00000000..e6e81eee
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-closed-captioning-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-closed-captioning-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-closed-captioning-outline.svg
new file mode 100644
index 00000000..b33b9dcd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-closed-captioning-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-code-block-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-code-block-fill.svg
new file mode 100644
index 00000000..fe8f70de
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-code-block-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-code-block-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-code-block-outline.svg
new file mode 100644
index 00000000..0659b3a0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-code-block-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-code-inline-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-code-inline-fill.svg
new file mode 100644
index 00000000..40d8b284
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-code-inline-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-code-inline-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-code-inline-outline.svg
new file mode 100644
index 00000000..b16e54b9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-code-inline-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-coins-color-old.svg b/versioned_docs/version-0.13/assets/icons/icon-coins-color-old.svg
new file mode 100644
index 00000000..c26dfd23
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-coins-color-old.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-coins-color.svg b/versioned_docs/version-0.13/assets/icons/icon-coins-color.svg
new file mode 100644
index 00000000..9eee1fe3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-coins-color.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-coins-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-coins-fill.svg
new file mode 100644
index 00000000..5295b847
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-coins-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-coins-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-coins-outline.svg
new file mode 100644
index 00000000..0635d06a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-coins-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-collapse-left-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-collapse-left-fill.svg
new file mode 100644
index 00000000..94ced469
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-collapse-left-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-collapse-left-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-collapse-left-outline.svg
new file mode 100644
index 00000000..571e6666
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-collapse-left-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-collapse-right-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-collapse-right-fill.svg
new file mode 100644
index 00000000..d1a6ec06
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-collapse-right-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-collapse-right-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-collapse-right-outline.svg
new file mode 100644
index 00000000..762313e8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-collapse-right-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-collectible-expressions-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-collectible-expressions-fill.svg
new file mode 100644
index 00000000..f48e0f71
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-collectible-expressions-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-collectible-expressions-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-collectible-expressions-outline.svg
new file mode 100644
index 00000000..842276e4
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-collectible-expressions-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-collection-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-collection-fill.svg
new file mode 100644
index 00000000..063d0294
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-collection-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-collection-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-collection-outline.svg
new file mode 100644
index 00000000..2bf8ade0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-collection-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-comment-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-comment-fill.svg
new file mode 100644
index 00000000..64caddb5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-comment-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-comment-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-comment-outline.svg
new file mode 100644
index 00000000..ca549202
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-comment-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-comments-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-comments-fill.svg
new file mode 100644
index 00000000..c7e198b3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-comments-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-comments-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-comments-outline.svg
new file mode 100644
index 00000000..aead6ad2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-comments-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-communities-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-communities-fill.svg
new file mode 100644
index 00000000..7a89db20
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-communities-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-communities-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-communities-outline.svg
new file mode 100644
index 00000000..21b1de32
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-communities-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-community-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-community-fill.svg
new file mode 100644
index 00000000..5e996d59
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-community-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-community-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-community-outline.svg
new file mode 100644
index 00000000..f2c48d9d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-community-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-confidence-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-confidence-fill.svg
new file mode 100644
index 00000000..907e7490
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-confidence-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-confidence-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-confidence-outline.svg
new file mode 100644
index 00000000..2c0841fa
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-confidence-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-contest-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-contest-fill.svg
new file mode 100644
index 00000000..f5ee8261
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-contest-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-contest-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-contest-outline.svg
new file mode 100644
index 00000000..b9b18066
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-contest-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-controversial-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-controversial-fill.svg
new file mode 100644
index 00000000..0d10d0fa
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-controversial-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-controversial-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-controversial-outline.svg
new file mode 100644
index 00000000..d9f13ba6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-controversial-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-conversion-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-conversion-fill.svg
new file mode 100644
index 00000000..f341451d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-conversion-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-conversion-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-conversion-outline.svg
new file mode 100644
index 00000000..f1aaecb5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-conversion-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-copy-clipboard-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-copy-clipboard-fill.svg
new file mode 100644
index 00000000..b66a0d37
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-copy-clipboard-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-copy-clipboard-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-copy-clipboard-outline.svg
new file mode 100644
index 00000000..4345cc6c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-copy-clipboard-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-cricket-fill-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-cricket-fill-outline-24.svg
new file mode 100644
index 00000000..bba0bff1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-cricket-fill-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-cricket-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-cricket-outline-24.svg
new file mode 100644
index 00000000..d7e95702
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-cricket-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-crop-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-crop-fill.svg
new file mode 100644
index 00000000..8dea1c3e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-crop-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-crop-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-crop-outline.svg
new file mode 100644
index 00000000..927c77e7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-crop-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-crosspost-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-crosspost-fill.svg
new file mode 100644
index 00000000..e8871467
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-crosspost-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-crosspost-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-crosspost-outline.svg
new file mode 100644
index 00000000..34e2bc39
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-crosspost-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-crowd-control-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-crowd-control-fill.svg
new file mode 100644
index 00000000..82eff220
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-crowd-control-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-crowd-control-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-crowd-control-outline.svg
new file mode 100644
index 00000000..44fc0779
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-crowd-control-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-custom-feed-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-custom-feed-fill.svg
new file mode 100644
index 00000000..2fc20489
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-custom-feed-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-custom-feed-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-custom-feed-outline.svg
new file mode 100644
index 00000000..4fe08a0e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-custom-feed-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-customize-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-customize-fill.svg
new file mode 100644
index 00000000..11c082bb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-customize-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-customize-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-customize-outline.svg
new file mode 100644
index 00000000..60fcb5a8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-customize-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-dashboard-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-dashboard-fill.svg
new file mode 100644
index 00000000..164bbc6f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-dashboard-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-dashboard-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-dashboard-outline.svg
new file mode 100644
index 00000000..7bcc395f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-dashboard-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-day-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-day-fill.svg
new file mode 100644
index 00000000..60076123
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-day-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-day-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-day-outline.svg
new file mode 100644
index 00000000..42e19da8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-day-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-delete-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-delete-fill.svg
new file mode 100644
index 00000000..090d5fa4
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-delete-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-delete-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-delete-outline.svg
new file mode 100644
index 00000000..f21a44b5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-delete-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-discover-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-discover-fill-24.svg
new file mode 100644
index 00000000..3db7366a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-discover-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-discover-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-discover-fill.svg
new file mode 100644
index 00000000..a4558664
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-discover-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-discover-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-discover-outline-24.svg
new file mode 100644
index 00000000..5f2814a9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-discover-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-discover-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-discover-outline.svg
new file mode 100644
index 00000000..d45c3aa9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-discover-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-dismiss-all-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-dismiss-all-fill.svg
new file mode 100644
index 00000000..04d7747b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-dismiss-all-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-dismiss-all-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-dismiss-all-outline.svg
new file mode 100644
index 00000000..77b35add
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-dismiss-all-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-distinguish-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-distinguish-fill.svg
new file mode 100644
index 00000000..2e837d40
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-distinguish-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-distinguish-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-distinguish-outline.svg
new file mode 100644
index 00000000..11656e89
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-distinguish-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-down-arrow-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-down-arrow-outline.svg
new file mode 100644
index 00000000..f11339cf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-down-arrow-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-down-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-down-fill.svg
new file mode 100644
index 00000000..04d79cc5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-down-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-down-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-down-outline.svg
new file mode 100644
index 00000000..cb801921
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-down-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-download-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-download-fill.svg
new file mode 100644
index 00000000..22873612
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-download-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-download-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-download-outline.svg
new file mode 100644
index 00000000..8a9dace4
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-download-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-downvote-fill-mask.svg b/versioned_docs/version-0.13/assets/icons/icon-downvote-fill-mask.svg
new file mode 100644
index 00000000..770e75e7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-downvote-fill-mask.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-downvote-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-downvote-fill.svg
new file mode 100644
index 00000000..362c529b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-downvote-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-downvote-offsetmask.svg b/versioned_docs/version-0.13/assets/icons/icon-downvote-offsetmask.svg
new file mode 100644
index 00000000..770e75e7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-downvote-offsetmask.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-downvote-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-downvote-outline.svg
new file mode 100644
index 00000000..851f1b2e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-downvote-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-downvotes-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-downvotes-fill.svg
new file mode 100644
index 00000000..e7b8054e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-downvotes-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-downvotes-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-downvotes-outline.svg
new file mode 100644
index 00000000..5fb64734
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-downvotes-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-drag-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-drag-outline.svg
new file mode 100644
index 00000000..fa395bab
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-drag-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-drugs-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-drugs-fill.svg
new file mode 100644
index 00000000..dd31eefd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-drugs-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-drugs-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-drugs-outline.svg
new file mode 100644
index 00000000..dd83cdba
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-drugs-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-duplicate-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-duplicate-fill.svg
new file mode 100644
index 00000000..7b04b793
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-duplicate-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-duplicate-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-duplicate-outline.svg
new file mode 100644
index 00000000..3113be7c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-duplicate-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-edit-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-edit-fill.svg
new file mode 100644
index 00000000..4d2b4cb0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-edit-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-edit-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-edit-outline.svg
new file mode 100644
index 00000000..be2f8741
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-edit-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-effect-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-effect-fill.svg
new file mode 100644
index 00000000..ef14838c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-effect-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-effect-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-effect-outline.svg
new file mode 100644
index 00000000..158c8072
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-effect-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-embed-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-embed-fill.svg
new file mode 100644
index 00000000..e48f5245
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-embed-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-embed-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-embed-outline.svg
new file mode 100644
index 00000000..04dd5ea2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-embed-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-emoji-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-emoji-fill.svg
new file mode 100644
index 00000000..75cccf76
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-emoji-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-emoji-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-emoji-outline.svg
new file mode 100644
index 00000000..251ffd34
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-emoji-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-end-live-chat-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-end-live-chat-fill.svg
new file mode 100644
index 00000000..156b5404
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-end-live-chat-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-end-live-chat-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-end-live-chat-outline.svg
new file mode 100644
index 00000000..e734d5bf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-end-live-chat-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-error-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-error-fill.svg
new file mode 100644
index 00000000..fd31f05f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-error-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-error-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-error-outline.svg
new file mode 100644
index 00000000..44acd06e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-error-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-expand-left-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-expand-left-fill.svg
new file mode 100644
index 00000000..bb1bd749
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-expand-left-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-expand-left-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-expand-left-outline.svg
new file mode 100644
index 00000000..0425ba50
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-expand-left-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-expand-right-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-expand-right-fill.svg
new file mode 100644
index 00000000..74352973
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-expand-right-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-expand-right-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-expand-right-outline.svg
new file mode 100644
index 00000000..92ab7ecd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-expand-right-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-external-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-external-fill.svg
new file mode 100644
index 00000000..f7f0187f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-external-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-external-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-external-outline.svg
new file mode 100644
index 00000000..e7c5cfab
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-external-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-feed-video-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-feed-video-fill.svg
new file mode 100644
index 00000000..a10e7ba6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-feed-video-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-feed-video-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-feed-video-outline.svg
new file mode 100644
index 00000000..51c13c0f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-feed-video-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-filter-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-filter-fill-24.svg
new file mode 100644
index 00000000..dfee079e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-filter-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-filter-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-filter-fill.svg
new file mode 100644
index 00000000..ec4bb3d7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-filter-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-filter-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-filter-outline-24.svg
new file mode 100644
index 00000000..bac30dde
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-filter-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-filter-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-filter-outline.svg
new file mode 100644
index 00000000..5006950f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-filter-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-football-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-football-fill-24.svg
new file mode 100644
index 00000000..87eaed64
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-football-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-football-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-football-outline-24.svg
new file mode 100644
index 00000000..f80eaede
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-football-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-format-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-format-fill.svg
new file mode 100644
index 00000000..fb58cba0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-format-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-format-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-format-outline.svg
new file mode 100644
index 00000000..c67d21ac
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-format-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-forward-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-forward-fill.svg
new file mode 100644
index 00000000..6cfb1af0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-forward-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-forward-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-forward-outline.svg
new file mode 100644
index 00000000..7cd531c2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-forward-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-funnel-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-funnel-fill.svg
new file mode 100644
index 00000000..c6ed3533
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-funnel-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-funnel-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-funnel-outline.svg
new file mode 100644
index 00000000..18d1a624
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-funnel-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-gif-post-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-gif-post-fill.svg
new file mode 100644
index 00000000..827178c2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-gif-post-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-gif-post-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-gif-post-outline.svg
new file mode 100644
index 00000000..dfeb11e9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-gif-post-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-hashtag-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-hashtag-fill.svg
new file mode 100644
index 00000000..b476fac0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-hashtag-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-hashtag-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-hashtag-outline.svg
new file mode 100644
index 00000000..2bf939ee
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-hashtag-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-heart-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-heart-fill.svg
new file mode 100644
index 00000000..c8c3917c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-heart-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-heart-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-heart-outline.svg
new file mode 100644
index 00000000..39c25eb5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-heart-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-help-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-help-fill.svg
new file mode 100644
index 00000000..fb9356cf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-help-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-help-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-help-outline.svg
new file mode 100644
index 00000000..f5b4ccdd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-help-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-hide-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-hide-fill.svg
new file mode 100644
index 00000000..90caafca
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-hide-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-hide-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-hide-outline.svg
new file mode 100644
index 00000000..e616adb0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-hide-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-history-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-history-fill.svg
new file mode 100644
index 00000000..ad5025e1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-history-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-history-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-history-outline.svg
new file mode 100644
index 00000000..14f8fa65
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-history-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-hockey-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-hockey-fill-24.svg
new file mode 100644
index 00000000..a8a5510c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-hockey-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-hockey-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-hockey-outline-24.svg
new file mode 100644
index 00000000..8112f60d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-hockey-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-home-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-home-fill-24.svg
new file mode 100644
index 00000000..f0ed1780
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-home-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-home-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-home-fill.svg
new file mode 100644
index 00000000..9f4149fc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-home-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-home-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-home-outline-24.svg
new file mode 100644
index 00000000..1ef79ad0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-home-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-home-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-home-outline.svg
new file mode 100644
index 00000000..9058fc9f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-home-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-hot-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-hot-fill.svg
new file mode 100644
index 00000000..ff4581da
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-hot-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-hot-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-hot-outline.svg
new file mode 100644
index 00000000..0bd5e91d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-hot-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ignore-reports-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-ignore-reports-fill.svg
new file mode 100644
index 00000000..acdc10dc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ignore-reports-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ignore-reports-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-ignore-reports-outline.svg
new file mode 100644
index 00000000..4232ad15
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ignore-reports-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-image-post-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-image-post-fill.svg
new file mode 100644
index 00000000..074a343c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-image-post-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-image-post-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-image-post-outline.svg
new file mode 100644
index 00000000..db1ecf0c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-image-post-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-inbox-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-inbox-fill.svg
new file mode 100644
index 00000000..bf6e5dfe
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-inbox-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-inbox-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-inbox-outline.svg
new file mode 100644
index 00000000..779a551d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-inbox-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-india-independence-24-color.svg b/versioned_docs/version-0.13/assets/icons/icon-india-independence-24-color.svg
new file mode 100644
index 00000000..8eea6f0d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-india-independence-24-color.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-india-independence-color.svg b/versioned_docs/version-0.13/assets/icons/icon-india-independence-color.svg
new file mode 100644
index 00000000..8eea6f0d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-india-independence-color.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-india-independence-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-india-independence-outline-24.svg
new file mode 100644
index 00000000..934f6a68
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-india-independence-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-info-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-info-fill.svg
new file mode 100644
index 00000000..25b91054
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-info-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-info-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-info-outline.svg
new file mode 100644
index 00000000..2d63f79e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-info-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-invite-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-invite-fill.svg
new file mode 100644
index 00000000..73c016b2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-invite-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-invite-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-invite-outline.svg
new file mode 100644
index 00000000..43d8b715
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-invite-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-italic-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-italic-fill.svg
new file mode 100644
index 00000000..9978e417
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-italic-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-italic-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-italic-outline.svg
new file mode 100644
index 00000000..12575e17
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-italic-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-join-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-join-fill.svg
new file mode 100644
index 00000000..942ed803
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-join-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-join-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-join-outline.svg
new file mode 100644
index 00000000..ae4c3048
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-join-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-joined-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-joined-fill.svg
new file mode 100644
index 00000000..b03349b6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-joined-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-joined-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-joined-outline.svg
new file mode 100644
index 00000000..5dbb4ce8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-joined-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-jump-down-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-jump-down-fill.svg
new file mode 100644
index 00000000..32646b50
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-jump-down-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-jump-down-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-jump-down-outline.svg
new file mode 100644
index 00000000..a76193f5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-jump-down-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-jump-up-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-jump-up-fill.svg
new file mode 100644
index 00000000..8de1dd13
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-jump-up-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-jump-up-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-jump-up-outline.svg
new file mode 100644
index 00000000..156471d0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-jump-up-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-karma-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-karma-fill.svg
new file mode 100644
index 00000000..b182869a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-karma-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-karma-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-karma-outline.svg
new file mode 100644
index 00000000..36543fda
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-karma-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-keyboard-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-keyboard-fill.svg
new file mode 100644
index 00000000..fbb222ee
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-keyboard-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-keyboard-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-keyboard-outline.svg
new file mode 100644
index 00000000..7763e8eb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-keyboard-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-kick-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-kick-fill.svg
new file mode 100644
index 00000000..539d91b5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-kick-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-kick-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-kick-outline.svg
new file mode 100644
index 00000000..6e508580
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-kick-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-language-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-language-fill.svg
new file mode 100644
index 00000000..43e3dde4
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-language-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-language-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-language-outline.svg
new file mode 100644
index 00000000..9e9f57e1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-language-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-leave-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-leave-fill.svg
new file mode 100644
index 00000000..d29be345
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-leave-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-leave-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-leave-outline.svg
new file mode 100644
index 00000000..9e96def3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-leave-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-left-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-left-fill-24.svg
new file mode 100644
index 00000000..2839379a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-left-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-left-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-left-fill.svg
new file mode 100644
index 00000000..080d2714
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-left-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-left-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-left-outline-24.svg
new file mode 100644
index 00000000..509a1843
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-left-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-left-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-left-outline.svg
new file mode 100644
index 00000000..ffc206b5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-left-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-link-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-link-fill.svg
new file mode 100644
index 00000000..a777ba34
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-link-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-link-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-link-outline.svg
new file mode 100644
index 00000000..71d3657c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-link-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-link-post-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-link-post-fill.svg
new file mode 100644
index 00000000..a777ba34
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-link-post-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-link-post-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-link-post-outline.svg
new file mode 100644
index 00000000..71d3657c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-link-post-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-list-bulleted-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-list-bulleted-fill.svg
new file mode 100644
index 00000000..0ded6919
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-list-bulleted-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-list-bulleted-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-list-bulleted-outline.svg
new file mode 100644
index 00000000..10b57c77
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-list-bulleted-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-list-numbered-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-list-numbered-fill.svg
new file mode 100644
index 00000000..2fa2f9df
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-list-numbered-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-list-numbered-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-list-numbered-outline.svg
new file mode 100644
index 00000000..cb85ac03
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-list-numbered-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-live-chat-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-live-chat-fill.svg
new file mode 100644
index 00000000..63bae6d9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-live-chat-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-live-chat-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-live-chat-outline.svg
new file mode 100644
index 00000000..cbd60c93
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-live-chat-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-live-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-live-fill.svg
new file mode 100644
index 00000000..c3d8fa8b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-live-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-live-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-live-outline.svg
new file mode 100644
index 00000000..b8aff72d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-live-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-load-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-load-outline.svg
new file mode 100644
index 00000000..2498bb69
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-load-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-location-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-location-fill.svg
new file mode 100644
index 00000000..3a02508d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-location-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-location-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-location-outline.svg
new file mode 100644
index 00000000..a93fa330
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-location-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-lock-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-lock-fill.svg
new file mode 100644
index 00000000..0acaf024
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-lock-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-lock-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-lock-outline.svg
new file mode 100644
index 00000000..2d2ba761
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-lock-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-logout-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-logout-fill.svg
new file mode 100644
index 00000000..aece4455
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-logout-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-logout-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-logout-outline.svg
new file mode 100644
index 00000000..18f43dcc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-logout-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-loop-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-loop-fill.svg
new file mode 100644
index 00000000..d407bc1d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-loop-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-loop-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-loop-outline.svg
new file mode 100644
index 00000000..057ae18f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-loop-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-macro-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-macro-fill.svg
new file mode 100644
index 00000000..fed9fc68
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-macro-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-macro-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-macro-outline.svg
new file mode 100644
index 00000000..e0fcc990
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-macro-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mark-read-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mark-read-fill.svg
new file mode 100644
index 00000000..8cd0d2bc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mark-read-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mark-read-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mark-read-outline.svg
new file mode 100644
index 00000000..a67ce2f6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mark-read-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-marketplace-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-marketplace-fill.svg
new file mode 100644
index 00000000..85253c42
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-marketplace-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-marketplace-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-marketplace-outline.svg
new file mode 100644
index 00000000..ddcf924b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-marketplace-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mask-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mask-fill.svg
new file mode 100644
index 00000000..c1614d16
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mask-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mask-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mask-outline.svg
new file mode 100644
index 00000000..948d95be
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mask-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-media-gallery-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-media-gallery-fill.svg
new file mode 100644
index 00000000..b4c09cbd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-media-gallery-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-media-gallery-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-media-gallery-outline.svg
new file mode 100644
index 00000000..8cefd4cc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-media-gallery-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-meme-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-meme-fill.svg
new file mode 100644
index 00000000..8e07d53a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-meme-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-meme-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-meme-outline.svg
new file mode 100644
index 00000000..d0161712
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-meme-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-menu-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-menu-fill-24.svg
new file mode 100644
index 00000000..a4b11bcf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-menu-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-menu-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-menu-fill.svg
new file mode 100644
index 00000000..e3a48d72
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-menu-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-menu-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-menu-outline-24.svg
new file mode 100644
index 00000000..cd101a91
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-menu-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-menu-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-menu-outline.svg
new file mode 100644
index 00000000..c277d63a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-menu-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-message-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-message-fill.svg
new file mode 100644
index 00000000..bf6e5dfe
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-message-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-message-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-message-outline.svg
new file mode 100644
index 00000000..779a551d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-message-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mic-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mic-fill.svg
new file mode 100644
index 00000000..23b42265
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mic-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mic-mute-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mic-mute-fill.svg
new file mode 100644
index 00000000..f309e349
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mic-mute-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mic-mute-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mic-mute-outline.svg
new file mode 100644
index 00000000..c4b36eef
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mic-mute-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mic-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mic-outline.svg
new file mode 100644
index 00000000..d9174bcf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mic-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-fill.svg
new file mode 100644
index 00000000..3d4e15bd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-mail-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-mail-fill.svg
new file mode 100644
index 00000000..a994d73e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-mail-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-mail-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-mail-outline.svg
new file mode 100644
index 00000000..add3fc29
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-mail-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-mode-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-mode-fill.svg
new file mode 100644
index 00000000..0a3b61d2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-mode-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-mode-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-mode-outline.svg
new file mode 100644
index 00000000..783794c2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-mode-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-mute-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-mute-fill.svg
new file mode 100644
index 00000000..0405eb39
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-mute-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-mute-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-mute-outline.svg
new file mode 100644
index 00000000..0f00cbd0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-mute-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-outline.svg
new file mode 100644
index 00000000..3c34d75e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-overflow-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-overflow-fill.svg
new file mode 100644
index 00000000..a27ddc1c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-overflow-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-overflow-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-overflow-outline.svg
new file mode 100644
index 00000000..40d581e8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-overflow-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-queue-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-queue-fill.svg
new file mode 100644
index 00000000..c24794c6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-queue-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-queue-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-queue-outline.svg
new file mode 100644
index 00000000..f501bb50
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-queue-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-unmute-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-unmute-fill.svg
new file mode 100644
index 00000000..4fe5e323
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-unmute-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mod-unmute-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mod-unmute-outline.svg
new file mode 100644
index 00000000..fc66aec9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mod-unmute-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-music-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-music-fill.svg
new file mode 100644
index 00000000..572bbb39
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-music-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-music-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-music-outline.svg
new file mode 100644
index 00000000..a5727ff3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-music-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mute-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-mute-fill.svg
new file mode 100644
index 00000000..832479a5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mute-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-mute-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-mute-outline.svg
new file mode 100644
index 00000000..e3020eaf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-mute-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-new-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-new-fill.svg
new file mode 100644
index 00000000..b663a159
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-new-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-new-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-new-outline.svg
new file mode 100644
index 00000000..fbbf8adc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-new-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-night-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-night-fill.svg
new file mode 100644
index 00000000..c266c32d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-night-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-night-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-night-outline.svg
new file mode 100644
index 00000000..da392e61
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-night-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-notification-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-notification-fill-24.svg
new file mode 100644
index 00000000..21899eb1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-notification-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-notification-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-notification-fill.svg
new file mode 100644
index 00000000..ee584c12
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-notification-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-notification-frequent-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-notification-frequent-fill.svg
new file mode 100644
index 00000000..cdb5cc57
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-notification-frequent-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-notification-frequent-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-notification-frequent-outline.svg
new file mode 100644
index 00000000..8ef14b28
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-notification-frequent-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-notification-off-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-notification-off-fill.svg
new file mode 100644
index 00000000..8ec456fc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-notification-off-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-notification-off-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-notification-off-outline.svg
new file mode 100644
index 00000000..9fff79d6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-notification-off-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-notification-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-notification-outline-24.svg
new file mode 100644
index 00000000..80641815
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-notification-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-notification-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-notification-outline.svg
new file mode 100644
index 00000000..7308b277
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-notification-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-nsfw-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-nsfw-fill.svg
new file mode 100644
index 00000000..c586800d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-nsfw-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-nsfw-language-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-nsfw-language-fill.svg
new file mode 100644
index 00000000..18329ee2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-nsfw-language-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-nsfw-language-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-nsfw-language-outline.svg
new file mode 100644
index 00000000..b33c2979
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-nsfw-language-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-nsfw-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-nsfw-outline.svg
new file mode 100644
index 00000000..9a4de5cc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-nsfw-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-nsfw-violence-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-nsfw-violence-fill.svg
new file mode 100644
index 00000000..8bd10746
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-nsfw-violence-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-nsfw-violence-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-nsfw-violence-outline.svg
new file mode 100644
index 00000000..b094986b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-nsfw-violence-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-official-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-official-fill.svg
new file mode 100644
index 00000000..e168285b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-official-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-official-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-official-outline.svg
new file mode 100644
index 00000000..598e67f9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-official-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-original-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-original-fill.svg
new file mode 100644
index 00000000..4ca68cd6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-original-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-original-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-original-outline.svg
new file mode 100644
index 00000000..30a44e12
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-original-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-overflow-caret-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-overflow-caret-fill.svg
new file mode 100644
index 00000000..f66f72dc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-overflow-caret-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-overflow-caret-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-overflow-caret-outline.svg
new file mode 100644
index 00000000..26a891eb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-overflow-caret-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-fill-24.svg
new file mode 100644
index 00000000..663e67ac
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-fill.svg
new file mode 100644
index 00000000..eef8a3f1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-outline-24.svg
new file mode 100644
index 00000000..d9c8f021
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-outline.svg
new file mode 100644
index 00000000..8e0f71ca
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-overflow-horizontal-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-overflow-vertical-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-overflow-vertical-fill.svg
new file mode 100644
index 00000000..bba12847
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-overflow-vertical-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-overflow-vertical-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-overflow-vertical-outline.svg
new file mode 100644
index 00000000..42e98cb8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-overflow-vertical-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-pause-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-pause-fill.svg
new file mode 100644
index 00000000..2893f421
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-pause-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-pause-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-pause-outline.svg
new file mode 100644
index 00000000..4aae6725
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-pause-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-payment-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-payment-fill.svg
new file mode 100644
index 00000000..f47242b9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-payment-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-payment-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-payment-outline.svg
new file mode 100644
index 00000000..11bb1569
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-payment-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-peace-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-peace-fill.svg
new file mode 100644
index 00000000..73afbd4a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-peace-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-peace-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-peace-outline.svg
new file mode 100644
index 00000000..f59fa853
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-peace-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-pending-posts-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-pending-posts-fill.svg
new file mode 100644
index 00000000..eeae35fd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-pending-posts-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-pending-posts-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-pending-posts-outline.svg
new file mode 100644
index 00000000..f52af44f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-pending-posts-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-phone-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-phone-fill.svg
new file mode 100644
index 00000000..2fe1fe6d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-phone-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-phone-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-phone-outline.svg
new file mode 100644
index 00000000..d061ef94
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-phone-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-pin-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-pin-fill.svg
new file mode 100644
index 00000000..ffbb5ca6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-pin-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-pin-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-pin-outline.svg
new file mode 100644
index 00000000..5468381d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-pin-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-play-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-play-fill.svg
new file mode 100644
index 00000000..1fde6b1f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-play-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-play-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-play-outline.svg
new file mode 100644
index 00000000..44072b5c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-play-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-poll-post-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-poll-post-fill.svg
new file mode 100644
index 00000000..b5ef83c7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-poll-post-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-poll-post-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-poll-post-outline.svg
new file mode 100644
index 00000000..f96a5866
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-poll-post-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-popular-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-popular-fill.svg
new file mode 100644
index 00000000..4c9f39b0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-popular-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-popular-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-popular-outline.svg
new file mode 100644
index 00000000..94697c6e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-popular-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-posts-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-posts-fill.svg
new file mode 100644
index 00000000..f8e2ef7a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-posts-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-posts-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-posts-outline.svg
new file mode 100644
index 00000000..8bbdf583
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-posts-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-powerup-color.svg b/versioned_docs/version-0.13/assets/icons/icon-powerup-color.svg
new file mode 100644
index 00000000..0c8e798b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-powerup-color.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-powerup-fill-color.svg b/versioned_docs/version-0.13/assets/icons/icon-powerup-fill-color.svg
new file mode 100644
index 00000000..02b99781
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-powerup-fill-color.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-powerup-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-powerup-fill.svg
new file mode 100644
index 00000000..bc5d965a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-powerup-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-powerup-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-powerup-outline.svg
new file mode 100644
index 00000000..5dc7da1d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-powerup-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-predictions-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-predictions-fill.svg
new file mode 100644
index 00000000..7c8be073
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-predictions-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-predictions-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-predictions-outline.svg
new file mode 100644
index 00000000..6ce3f850
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-predictions-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-premium-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-premium-fill.svg
new file mode 100644
index 00000000..b0e88393
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-premium-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-premium-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-premium-outline.svg
new file mode 100644
index 00000000..36ff985d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-premium-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-privacy-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-privacy-fill.svg
new file mode 100644
index 00000000..7c5ce2de
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-privacy-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-privacy-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-privacy-outline.svg
new file mode 100644
index 00000000..37c9aa4e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-privacy-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-profile-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-profile-fill.svg
new file mode 100644
index 00000000..9d9f41e7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-profile-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-profile-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-profile-outline.svg
new file mode 100644
index 00000000..d428dccc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-profile-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-qa-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-qa-fill.svg
new file mode 100644
index 00000000..3324936e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-qa-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-qa-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-qa-outline.svg
new file mode 100644
index 00000000..a15b5af6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-qa-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-qr-code-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-qr-code-fill.svg
new file mode 100644
index 00000000..5c4e4e63
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-qr-code-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-qr-code-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-qr-code-outline.svg
new file mode 100644
index 00000000..db71b109
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-qr-code-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-quarantined-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-quarantined-fill.svg
new file mode 100644
index 00000000..d422850c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-quarantined-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-quarantined-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-quarantined-outline.svg
new file mode 100644
index 00000000..bd0fe499
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-quarantined-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-quote-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-quote-fill.svg
new file mode 100644
index 00000000..2e16b66e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-quote-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-quote-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-quote-outline.svg
new file mode 100644
index 00000000..138fdede
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-quote-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-r-slash-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-r-slash-fill.svg
new file mode 100644
index 00000000..8ea867a5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-r-slash-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-r-slash-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-r-slash-outline.svg
new file mode 100644
index 00000000..d53e0d81
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-r-slash-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-radio-button-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-radio-button-fill.svg
new file mode 100644
index 00000000..17634cc6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-radio-button-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-radio-button-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-radio-button-outline.svg
new file mode 100644
index 00000000..61ab9d15
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-radio-button-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-raise-hand-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-raise-hand-fill.svg
new file mode 100644
index 00000000..c2ee6b51
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-raise-hand-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-raise-hand-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-raise-hand-outline.svg
new file mode 100644
index 00000000..ca88b8d6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-raise-hand-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-random-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-random-fill.svg
new file mode 100644
index 00000000..aaf21bd5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-random-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-random-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-random-outline.svg
new file mode 100644
index 00000000..8328568b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-random-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ratings-everyone-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-ratings-everyone-fill.svg
new file mode 100644
index 00000000..79d5e207
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ratings-everyone-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ratings-everyone-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-ratings-everyone-outline.svg
new file mode 100644
index 00000000..958cfaab
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ratings-everyone-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ratings-mature-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-ratings-mature-fill.svg
new file mode 100644
index 00000000..adebf06f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ratings-mature-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ratings-mature-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-ratings-mature-outline.svg
new file mode 100644
index 00000000..7375df49
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ratings-mature-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ratings-nsfw-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-ratings-nsfw-fill.svg
new file mode 100644
index 00000000..8ae101a9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ratings-nsfw-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ratings-nsfw-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-ratings-nsfw-outline.svg
new file mode 100644
index 00000000..5efaece2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ratings-nsfw-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ratings-violence-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-ratings-violence-fill.svg
new file mode 100644
index 00000000..4b130fc8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ratings-violence-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-ratings-violence-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-ratings-violence-outline.svg
new file mode 100644
index 00000000..209cb32b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-ratings-violence-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-recovery-phrase-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-recovery-phrase-fill.svg
new file mode 100644
index 00000000..59912fcc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-recovery-phrase-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-recovery-phrase-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-recovery-phrase-outline.svg
new file mode 100644
index 00000000..f030d4a3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-recovery-phrase-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-refresh-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-refresh-fill.svg
new file mode 100644
index 00000000..145af422
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-refresh-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-refresh-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-refresh-outline.svg
new file mode 100644
index 00000000..fd337e0a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-refresh-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-removal-reasons-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-removal-reasons-fill.svg
new file mode 100644
index 00000000..f449e496
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-removal-reasons-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-removal-reasons-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-removal-reasons-outline.svg
new file mode 100644
index 00000000..2959171f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-removal-reasons-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-remove-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-remove-fill.svg
new file mode 100644
index 00000000..77c90322
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-remove-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-remove-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-remove-outline.svg
new file mode 100644
index 00000000..427a0ba3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-remove-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-reply-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-reply-fill.svg
new file mode 100644
index 00000000..f9ed4ea8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-reply-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-reply-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-reply-outline.svg
new file mode 100644
index 00000000..1005ebc7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-reply-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-report-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-report-fill.svg
new file mode 100644
index 00000000..c8b2f953
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-report-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-report-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-report-outline.svg
new file mode 100644
index 00000000..f93c4531
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-report-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-reverse-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-reverse-fill.svg
new file mode 100644
index 00000000..713bb978
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-reverse-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-reverse-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-reverse-outline.svg
new file mode 100644
index 00000000..ba71dd17
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-reverse-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rich-text-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-rich-text-fill.svg
new file mode 100644
index 00000000..61f7c5e3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rich-text-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rich-text-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-rich-text-outline.svg
new file mode 100644
index 00000000..a9994e67
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rich-text-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-right-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-right-fill.svg
new file mode 100644
index 00000000..0e9f2b18
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-right-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-right-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-right-outline.svg
new file mode 100644
index 00000000..ae126ddc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-right-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rising-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-rising-fill.svg
new file mode 100644
index 00000000..0d6fab40
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rising-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rising-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-rising-outline.svg
new file mode 100644
index 00000000..afeb048f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rising-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rotate-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-rotate-fill.svg
new file mode 100644
index 00000000..aca5fa54
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rotate-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rotate-image-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-rotate-image-fill.svg
new file mode 100644
index 00000000..ab5f6139
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rotate-image-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rotate-image-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-rotate-image-outline.svg
new file mode 100644
index 00000000..a93edc39
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rotate-image-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rotate-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-rotate-outline.svg
new file mode 100644
index 00000000..e2a51d26
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rotate-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rpan-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-rpan-fill.svg
new file mode 100644
index 00000000..3025d96c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rpan-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rpan-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-rpan-outline.svg
new file mode 100644
index 00000000..6aa88a84
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rpan-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rules-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-rules-fill.svg
new file mode 100644
index 00000000..03736796
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rules-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-rules-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-rules-outline.svg
new file mode 100644
index 00000000..c3d5a8f7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-rules-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-safari-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-safari-fill.svg
new file mode 100644
index 00000000..dd0c0ece
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-safari-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-safari-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-safari-outline.svg
new file mode 100644
index 00000000..48579946
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-safari-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-save-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-save-fill.svg
new file mode 100644
index 00000000..2baccb02
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-save-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-save-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-save-outline.svg
new file mode 100644
index 00000000..52649a6f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-save-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-save-view-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-save-view-fill.svg
new file mode 100644
index 00000000..d468e142
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-save-view-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-save-view-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-save-view-outline.svg
new file mode 100644
index 00000000..c8e183a0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-save-view-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-saved-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-saved-fill.svg
new file mode 100644
index 00000000..b2943480
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-saved-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-saved-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-saved-outline.svg
new file mode 100644
index 00000000..11249fd5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-saved-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-search-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-search-fill-24.svg
new file mode 100644
index 00000000..4a0be7ea
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-search-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-search-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-search-fill.svg
new file mode 100644
index 00000000..78b88b44
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-search-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-search-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-search-outline-24.svg
new file mode 100644
index 00000000..1a1e609f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-search-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-search-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-search-outline.svg
new file mode 100644
index 00000000..b7aa3d09
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-search-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-self-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-self-fill.svg
new file mode 100644
index 00000000..f068b2af
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-self-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-self-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-self-outline.svg
new file mode 100644
index 00000000..b97bc765
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-self-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-send-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-send-fill.svg
new file mode 100644
index 00000000..1e68239e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-send-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-send-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-send-outline.svg
new file mode 100644
index 00000000..0ecf0928
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-send-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-settings-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-settings-fill.svg
new file mode 100644
index 00000000..88958da9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-settings-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-settings-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-settings-outline.svg
new file mode 100644
index 00000000..6214933f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-settings-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-severity-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-severity-fill.svg
new file mode 100644
index 00000000..1511481d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-severity-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-severity-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-severity-outline.svg
new file mode 100644
index 00000000..f6b3d29a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-severity-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-share-android-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-share-android-fill.svg
new file mode 100644
index 00000000..0ec0c822
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-share-android-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-share-android-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-share-android-outline.svg
new file mode 100644
index 00000000..d1339270
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-share-android-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-share-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-share-fill.svg
new file mode 100644
index 00000000..03797d3b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-share-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-share-ios-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-share-ios-fill.svg
new file mode 100644
index 00000000..670c7700
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-share-ios-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-share-ios-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-share-ios-outline.svg
new file mode 100644
index 00000000..8691190d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-share-ios-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-share-new-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-share-new-fill.svg
new file mode 100644
index 00000000..8d106475
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-share-new-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-share-new-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-share-new-outline.svg
new file mode 100644
index 00000000..7afb960c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-share-new-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-share-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-share-outline.svg
new file mode 100644
index 00000000..fec2ce94
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-share-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-show-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-show-fill.svg
new file mode 100644
index 00000000..9a7b85e0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-show-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-show-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-show-outline.svg
new file mode 100644
index 00000000..d9a33518
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-show-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-side-menu-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-side-menu-fill.svg
new file mode 100644
index 00000000..85b29e7e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-side-menu-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-side-menu-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-side-menu-outline.svg
new file mode 100644
index 00000000..4b472ed8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-side-menu-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-skipback10-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-skipback10-fill.svg
new file mode 100644
index 00000000..57df13c1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-skipback10-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-skipback10-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-skipback10-outline.svg
new file mode 100644
index 00000000..f131d573
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-skipback10-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-skipforward10-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-skipforward10-fill.svg
new file mode 100644
index 00000000..d964433c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-skipforward10-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-skipforward10-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-skipforward10-outline.svg
new file mode 100644
index 00000000..f47d6d90
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-skipforward10-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sort-az-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-sort-az-fill.svg
new file mode 100644
index 00000000..5f5fd6e9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sort-az-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sort-az-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-sort-az-outline.svg
new file mode 100644
index 00000000..80227b5b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sort-az-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sort-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-sort-fill.svg
new file mode 100644
index 00000000..a79532e6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sort-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sort-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-sort-outline.svg
new file mode 100644
index 00000000..4ab41138
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sort-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sort-price-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-sort-price-fill.svg
new file mode 100644
index 00000000..63ad6e40
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sort-price-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sort-price-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-sort-price-outline.svg
new file mode 100644
index 00000000..f9d6ea3f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sort-price-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sort-za-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-sort-za-fill.svg
new file mode 100644
index 00000000..bd45e10d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sort-za-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sort-za-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-sort-za-outline.svg
new file mode 100644
index 00000000..1f42dcce
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sort-za-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-spam-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-spam-fill.svg
new file mode 100644
index 00000000..3bc472a5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-spam-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-spam-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-spam-outline.svg
new file mode 100644
index 00000000..8514736f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-spam-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-spoiler-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-spoiler-fill.svg
new file mode 100644
index 00000000..6c304dbd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-spoiler-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-spoiler-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-spoiler-outline.svg
new file mode 100644
index 00000000..495fa935
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-spoiler-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sponsored-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-sponsored-fill.svg
new file mode 100644
index 00000000..c78dae8a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sponsored-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sponsored-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-sponsored-outline.svg
new file mode 100644
index 00000000..6391547a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sponsored-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-spreadsheet-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-spreadsheet-fill.svg
new file mode 100644
index 00000000..a0629949
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-spreadsheet-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-spreadsheet-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-spreadsheet-outline.svg
new file mode 100644
index 00000000..8e2b4b75
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-spreadsheet-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-star-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-star-fill.svg
new file mode 100644
index 00000000..b931cd8d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-star-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-star-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-star-outline.svg
new file mode 100644
index 00000000..7bdede73
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-star-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-statistics-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-statistics-fill.svg
new file mode 100644
index 00000000..84d38f20
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-statistics-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-statistics-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-statistics-outline.svg
new file mode 100644
index 00000000..13461b3c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-statistics-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-status-live-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-status-live-fill.svg
new file mode 100644
index 00000000..56d9bbb3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-status-live-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-status-live-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-status-live-outline.svg
new file mode 100644
index 00000000..b8aff72d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-status-live-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sticker-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-sticker-fill.svg
new file mode 100644
index 00000000..41f9a5b0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sticker-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-sticker-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-sticker-outline.svg
new file mode 100644
index 00000000..9dd44eac
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-sticker-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-strikethrough-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-strikethrough-fill.svg
new file mode 100644
index 00000000..1286dc10
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-strikethrough-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-strikethrough-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-strikethrough-outline.svg
new file mode 100644
index 00000000..bc1c8d8d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-strikethrough-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-subtract-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-subtract-fill.svg
new file mode 100644
index 00000000..9e61d296
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-subtract-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-subtract-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-subtract-outline.svg
new file mode 100644
index 00000000..486bae28
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-subtract-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-superscript-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-superscript-fill.svg
new file mode 100644
index 00000000..066edd7e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-superscript-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-superscript-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-superscript-outline.svg
new file mode 100644
index 00000000..b89a494f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-superscript-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-swap-camera-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-swap-camera-fill.svg
new file mode 100644
index 00000000..a0280361
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-swap-camera-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-swap-camera-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-swap-camera-outline.svg
new file mode 100644
index 00000000..13fbd6bb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-swap-camera-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-swipe-back-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-swipe-back-fill.svg
new file mode 100644
index 00000000..a46bcfdf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-swipe-back-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-swipe-back-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-swipe-back-outline.svg
new file mode 100644
index 00000000..15ee5dbe
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-swipe-back-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-swipe-down-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-swipe-down-fill.svg
new file mode 100644
index 00000000..8f9ed518
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-swipe-down-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-swipe-down-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-swipe-down-outline.svg
new file mode 100644
index 00000000..cbf2938d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-swipe-down-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-swipe-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-swipe-fill.svg
new file mode 100644
index 00000000..b5a9e954
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-swipe-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-swipe-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-swipe-outline.svg
new file mode 100644
index 00000000..af90e56a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-swipe-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-swipe-up-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-swipe-up-fill.svg
new file mode 100644
index 00000000..eb0bd66c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-swipe-up-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-swipe-up-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-swipe-up-outline.svg
new file mode 100644
index 00000000..4452a13b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-swipe-up-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-table-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-table-fill.svg
new file mode 100644
index 00000000..51863d31
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-table-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-table-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-table-outline.svg
new file mode 100644
index 00000000..3954ec7c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-table-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-tag-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-tag-fill.svg
new file mode 100644
index 00000000..d0f560bf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-tag-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-tag-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-tag-outline.svg
new file mode 100644
index 00000000..5bd945c4
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-tag-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-tap-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-tap-fill.svg
new file mode 100644
index 00000000..4340b0ab
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-tap-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-tap-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-tap-outline.svg
new file mode 100644
index 00000000..3b127eb3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-tap-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-text-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-text-fill.svg
new file mode 100644
index 00000000..de25cee6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-text-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-text-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-text-outline.svg
new file mode 100644
index 00000000..4f84f7ae
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-text-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-text-post-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-text-post-fill.svg
new file mode 100644
index 00000000..e3b7f3ad
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-text-post-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-text-post-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-text-post-outline.svg
new file mode 100644
index 00000000..f10bd33e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-text-post-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-text-size-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-text-size-fill.svg
new file mode 100644
index 00000000..646b098f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-text-size-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-text-size-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-text-size-outline.svg
new file mode 100644
index 00000000..86fef49c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-text-size-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-toggle-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-toggle-fill.svg
new file mode 100644
index 00000000..d63fa127
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-toggle-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-toggle-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-toggle-outline.svg
new file mode 100644
index 00000000..1ca151d9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-toggle-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-tools-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-tools-fill.svg
new file mode 100644
index 00000000..eceee5ce
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-tools-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-tools-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-tools-outline.svg
new file mode 100644
index 00000000..56877724
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-tools-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-top-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-top-fill.svg
new file mode 100644
index 00000000..0cfae2ea
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-top-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-top-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-top-outline.svg
new file mode 100644
index 00000000..cb9f7e8b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-top-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-activism-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-activism-fill.svg
new file mode 100644
index 00000000..c3675ad3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-activism-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-activism-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-activism-outline.svg
new file mode 100644
index 00000000..c42d6c20
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-activism-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-addictionsupport-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-addictionsupport-fill.svg
new file mode 100644
index 00000000..b7a7b0f1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-addictionsupport-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-addictionsupport-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-addictionsupport-outline.svg
new file mode 100644
index 00000000..fc2fd080
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-addictionsupport-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-advice-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-advice-fill.svg
new file mode 100644
index 00000000..1ba8c71f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-advice-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-advice-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-advice-outline.svg
new file mode 100644
index 00000000..29e43dbf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-advice-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-animals-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-animals-fill.svg
new file mode 100644
index 00000000..71351a8b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-animals-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-animals-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-animals-outline.svg
new file mode 100644
index 00000000..4a82a54d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-animals-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-anime-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-anime-fill.svg
new file mode 100644
index 00000000..c7ff0ba7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-anime-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-anime-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-anime-outline.svg
new file mode 100644
index 00000000..a241a303
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-anime-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-art-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-art-fill.svg
new file mode 100644
index 00000000..fbba9107
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-art-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-art-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-art-outline.svg
new file mode 100644
index 00000000..ecc4b6d8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-art-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-beauty-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-beauty-fill.svg
new file mode 100644
index 00000000..004643f6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-beauty-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-beauty-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-beauty-outline.svg
new file mode 100644
index 00000000..b2417d94
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-beauty-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-business-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-business-fill.svg
new file mode 100644
index 00000000..0522d991
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-business-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-business-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-business-outline.svg
new file mode 100644
index 00000000..dae62414
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-business-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-careers-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-careers-fill.svg
new file mode 100644
index 00000000..3cad68a9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-careers-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-careers-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-careers-outline.svg
new file mode 100644
index 00000000..c7ee219b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-careers-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-cars-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-cars-fill.svg
new file mode 100644
index 00000000..93b0ab88
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-cars-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-cars-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-cars-outline.svg
new file mode 100644
index 00000000..4f6c148d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-cars-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-celebrity-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-celebrity-fill.svg
new file mode 100644
index 00000000..113e268c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-celebrity-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-celebrity-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-celebrity-outline.svg
new file mode 100644
index 00000000..75f14147
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-celebrity-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-craftsdiy-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-craftsdiy-fill.svg
new file mode 100644
index 00000000..a8d157ea
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-craftsdiy-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-craftsdiy-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-craftsdiy-outline.svg
new file mode 100644
index 00000000..f4374ccc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-craftsdiy-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-crypto-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-crypto-fill.svg
new file mode 100644
index 00000000..04c38e1d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-crypto-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-crypto-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-crypto-outline.svg
new file mode 100644
index 00000000..80bea825
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-crypto-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-culture-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-culture-fill.svg
new file mode 100644
index 00000000..04e61567
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-culture-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-culture-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-culture-outline.svg
new file mode 100644
index 00000000..d17024a6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-culture-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-diy-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-diy-fill.svg
new file mode 100644
index 00000000..a6cf0ac3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-diy-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-diy-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-diy-outline.svg
new file mode 100644
index 00000000..ea4df4ac
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-diy-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-entertainment-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-entertainment-fill.svg
new file mode 100644
index 00000000..871dd103
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-entertainment-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-entertainment-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-entertainment-outline.svg
new file mode 100644
index 00000000..0db261d1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-entertainment-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-ethics-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-ethics-fill.svg
new file mode 100644
index 00000000..0e02041b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-ethics-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-ethics-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-ethics-outline.svg
new file mode 100644
index 00000000..4a37fcbc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-ethics-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-family-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-family-fill.svg
new file mode 100644
index 00000000..73c79905
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-family-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-family-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-family-outline.svg
new file mode 100644
index 00000000..2d294481
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-family-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-fashion-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-fashion-fill.svg
new file mode 100644
index 00000000..408fb6fe
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-fashion-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-fashion-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-fashion-outline.svg
new file mode 100644
index 00000000..ee96a048
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-fashion-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-fill.svg
new file mode 100644
index 00000000..d634b1a3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-fitness-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-fitness-fill.svg
new file mode 100644
index 00000000..47024c3f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-fitness-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-fitness-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-fitness-outline.svg
new file mode 100644
index 00000000..e95e8595
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-fitness-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-food-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-food-fill.svg
new file mode 100644
index 00000000..1ff72304
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-food-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-food-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-food-outline.svg
new file mode 100644
index 00000000..5888d4bb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-food-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-funny-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-funny-fill.svg
new file mode 100644
index 00000000..c15cd164
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-funny-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-funny-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-funny-outline.svg
new file mode 100644
index 00000000..b5f6c7d0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-funny-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-gender-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-gender-fill.svg
new file mode 100644
index 00000000..0d9370fa
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-gender-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-gender-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-gender-outline.svg
new file mode 100644
index 00000000..44e545b7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-gender-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-health-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-health-fill.svg
new file mode 100644
index 00000000..05006ff0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-health-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-health-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-health-outline.svg
new file mode 100644
index 00000000..eb6e5608
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-health-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-help-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-help-fill.svg
new file mode 100644
index 00000000..f57f24af
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-help-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-help-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-help-outline.svg
new file mode 100644
index 00000000..5c411b85
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-help-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-history-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-history-fill.svg
new file mode 100644
index 00000000..401874ee
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-history-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-history-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-history-outline.svg
new file mode 100644
index 00000000..311512fa
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-history-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-hobbies-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-hobbies-fill.svg
new file mode 100644
index 00000000..a8d157ea
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-hobbies-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-hobbies-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-hobbies-outline.svg
new file mode 100644
index 00000000..f4374ccc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-hobbies-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-homegarden-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-homegarden-fill.svg
new file mode 100644
index 00000000..680d7089
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-homegarden-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-homegarden-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-homegarden-outline.svg
new file mode 100644
index 00000000..eac91b5a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-homegarden-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-internet-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-internet-fill.svg
new file mode 100644
index 00000000..4a81cbf1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-internet-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-internet-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-internet-outline.svg
new file mode 100644
index 00000000..ad5c324c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-internet-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-law-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-law-fill.svg
new file mode 100644
index 00000000..c4b75bab
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-law-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-law-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-law-outline.svg
new file mode 100644
index 00000000..bc6599f1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-law-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-learning-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-learning-fill.svg
new file mode 100644
index 00000000..e10e7522
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-learning-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-learning-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-learning-outline.svg
new file mode 100644
index 00000000..a7816add
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-learning-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-lifestyle-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-lifestyle-fill.svg
new file mode 100644
index 00000000..680d7089
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-lifestyle-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-lifestyle-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-lifestyle-outline.svg
new file mode 100644
index 00000000..eac91b5a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-lifestyle-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-marketplace-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-marketplace-fill.svg
new file mode 100644
index 00000000..7fe6a22b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-marketplace-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-marketplace-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-marketplace-outline.svg
new file mode 100644
index 00000000..37099243
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-marketplace-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-mature-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-mature-fill.svg
new file mode 100644
index 00000000..ef789954
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-mature-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-mature-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-mature-outline.svg
new file mode 100644
index 00000000..0e1129c8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-mature-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-mensfashion-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-mensfashion-fill.svg
new file mode 100644
index 00000000..51dfc67f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-mensfashion-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-mensfashion-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-mensfashion-outline.svg
new file mode 100644
index 00000000..be2bfa2a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-mensfashion-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-menshealth-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-menshealth-fill.svg
new file mode 100644
index 00000000..bd52fdea
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-menshealth-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-menshealth-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-menshealth-outline.svg
new file mode 100644
index 00000000..742b91f7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-menshealth-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-meta-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-meta-fill.svg
new file mode 100644
index 00000000..a27c630a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-meta-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-meta-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-meta-outline.svg
new file mode 100644
index 00000000..a484465f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-meta-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-military-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-military-fill.svg
new file mode 100644
index 00000000..14c6c871
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-military-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-military-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-military-outline.svg
new file mode 100644
index 00000000..102de829
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-military-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-movies-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-movies-fill.svg
new file mode 100644
index 00000000..0dc83cf2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-movies-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-movies-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-movies-outline.svg
new file mode 100644
index 00000000..dd5ae8eb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-movies-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-music-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-music-fill.svg
new file mode 100644
index 00000000..ff6cd386
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-music-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-music-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-music-outline.svg
new file mode 100644
index 00000000..e1e84136
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-music-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-news-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-news-fill.svg
new file mode 100644
index 00000000..c7bbee98
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-news-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-news-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-news-outline.svg
new file mode 100644
index 00000000..b31f0261
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-news-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-other-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-other-fill.svg
new file mode 100644
index 00000000..d8127231
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-other-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-other-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-other-outline.svg
new file mode 100644
index 00000000..5bb2b2e7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-other-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-outdoors-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-outdoors-fill.svg
new file mode 100644
index 00000000..bfad1ccd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-outdoors-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-outdoors-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-outdoors-outline.svg
new file mode 100644
index 00000000..1245dcef
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-outdoors-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-outline.svg
new file mode 100644
index 00000000..535eddce
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-pets-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-pets-fill.svg
new file mode 100644
index 00000000..3e49be62
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-pets-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-pets-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-pets-outline.svg
new file mode 100644
index 00000000..7c5469f5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-pets-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-photography-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-photography-fill.svg
new file mode 100644
index 00000000..79861fdb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-photography-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-photography-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-photography-outline.svg
new file mode 100644
index 00000000..3edd37ac
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-photography-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-places-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-places-fill.svg
new file mode 100644
index 00000000..d14a5db1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-places-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-places-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-places-outline.svg
new file mode 100644
index 00000000..cec875d5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-places-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-podcasts-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-podcasts-fill.svg
new file mode 100644
index 00000000..d518f7a5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-podcasts-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-podcasts-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-podcasts-outline.svg
new file mode 100644
index 00000000..16d82269
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-podcasts-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-politics-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-politics-fill.svg
new file mode 100644
index 00000000..a8740b3d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-politics-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-politics-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-politics-outline.svg
new file mode 100644
index 00000000..229b4ff5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-politics-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-programming-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-programming-fill.svg
new file mode 100644
index 00000000..fe0725ef
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-programming-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-programming-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-programming-outline.svg
new file mode 100644
index 00000000..2f27731a
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-programming-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-reading-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-reading-fill.svg
new file mode 100644
index 00000000..dde14f5d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-reading-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-reading-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-reading-outline.svg
new file mode 100644
index 00000000..5108620d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-reading-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-religion-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-religion-fill.svg
new file mode 100644
index 00000000..91ec5a64
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-religion-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-religion-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-religion-outline.svg
new file mode 100644
index 00000000..b0accebe
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-religion-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-science-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-science-fill.svg
new file mode 100644
index 00000000..df8f3714
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-science-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-science-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-science-outline.svg
new file mode 100644
index 00000000..97415741
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-science-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-sexorientation-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-sexorientation-fill.svg
new file mode 100644
index 00000000..162116cf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-sexorientation-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-sexorientation-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-sexorientation-outline.svg
new file mode 100644
index 00000000..8924df4c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-sexorientation-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-sports-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-sports-fill.svg
new file mode 100644
index 00000000..158480aa
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-sports-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-sports-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-sports-outline.svg
new file mode 100644
index 00000000..896064fe
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-sports-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-style-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-style-fill.svg
new file mode 100644
index 00000000..7fe6a22b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-style-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-style-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-style-outline.svg
new file mode 100644
index 00000000..37099243
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-style-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-tabletop-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-tabletop-fill.svg
new file mode 100644
index 00000000..e45fd3a4
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-tabletop-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-tabletop-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-tabletop-outline.svg
new file mode 100644
index 00000000..09f3772f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-tabletop-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-technology-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-technology-fill.svg
new file mode 100644
index 00000000..1b53ccd7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-technology-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-technology-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-technology-outline.svg
new file mode 100644
index 00000000..f2a7d1b0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-technology-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-television-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-television-fill.svg
new file mode 100644
index 00000000..4129dbfd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-television-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-television-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-television-outline.svg
new file mode 100644
index 00000000..f600f5f5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-television-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-traumasupport-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-traumasupport-fill.svg
new file mode 100644
index 00000000..f8d2c26e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-traumasupport-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-traumasupport-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-traumasupport-outline.svg
new file mode 100644
index 00000000..6640e5fb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-traumasupport-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-travel-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-travel-fill.svg
new file mode 100644
index 00000000..b82de9b7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-travel-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-travel-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-travel-outline.svg
new file mode 100644
index 00000000..52c5c102
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-travel-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-videogaming-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-videogaming-fill.svg
new file mode 100644
index 00000000..28f773fe
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-videogaming-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-videogaming-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-videogaming-outline.svg
new file mode 100644
index 00000000..e3fe9745
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-videogaming-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-womensfashion-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-womensfashion-fill.svg
new file mode 100644
index 00000000..408fb6fe
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-womensfashion-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-womensfashion-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-womensfashion-outline.svg
new file mode 100644
index 00000000..ee96a048
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-womensfashion-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-womenshealth-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-womenshealth-fill.svg
new file mode 100644
index 00000000..7f10515e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-womenshealth-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-topic-womenshealth-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-topic-womenshealth-outline.svg
new file mode 100644
index 00000000..dcff3a6b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-topic-womenshealth-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-translate-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-translate-fill.svg
new file mode 100644
index 00000000..7f62733d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-translate-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-translate-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-translate-outline.svg
new file mode 100644
index 00000000..4372abbe
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-translate-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-translation-off-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-translation-off-fill.svg
new file mode 100644
index 00000000..40f2fa0f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-translation-off-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-translation-off-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-translation-off-outline.svg
new file mode 100644
index 00000000..547198d7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-translation-off-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-trim-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-trim-fill.svg
new file mode 100644
index 00000000..fc1e10fc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-trim-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-trim-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-trim-outline.svg
new file mode 100644
index 00000000..5f8912c7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-trim-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-u-slash-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-u-slash-fill.svg
new file mode 100644
index 00000000..15097b6d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-u-slash-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-u-slash-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-u-slash-outline.svg
new file mode 100644
index 00000000..d1eed992
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-u-slash-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unban-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-unban-fill.svg
new file mode 100644
index 00000000..1a084b3f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unban-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unban-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-unban-outline.svg
new file mode 100644
index 00000000..0a3a4481
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unban-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-undo-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-undo-fill.svg
new file mode 100644
index 00000000..08657ccb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-undo-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-undo-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-undo-outline.svg
new file mode 100644
index 00000000..ccb96b1d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-undo-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unheart-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-unheart-fill.svg
new file mode 100644
index 00000000..4dded3cd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unheart-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unheart-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-unheart-outline.svg
new file mode 100644
index 00000000..6d500d40
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unheart-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unlock-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-unlock-fill.svg
new file mode 100644
index 00000000..bc0813e3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unlock-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unlock-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-unlock-outline.svg
new file mode 100644
index 00000000..01ab0584
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unlock-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unmod-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-unmod-fill.svg
new file mode 100644
index 00000000..0809038c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unmod-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unmod-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-unmod-outline.svg
new file mode 100644
index 00000000..b81e7fa8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unmod-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unpin-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-unpin-fill.svg
new file mode 100644
index 00000000..9fa6cf9f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unpin-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unpin-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-unpin-outline.svg
new file mode 100644
index 00000000..a68c68af
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unpin-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unstar-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-unstar-fill.svg
new file mode 100644
index 00000000..c677f6cf
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unstar-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unstar-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-unstar-outline.svg
new file mode 100644
index 00000000..622e02cb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unstar-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unverified-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-unverified-fill.svg
new file mode 100644
index 00000000..5c8df14c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unverified-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-unverified-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-unverified-outline.svg
new file mode 100644
index 00000000..324732e6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-unverified-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-up-arrow-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-up-arrow-fill.svg
new file mode 100644
index 00000000..384381fd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-up-arrow-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-up-arrow-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-up-arrow-outline.svg
new file mode 100644
index 00000000..b7ca0fdd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-up-arrow-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-up-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-up-fill.svg
new file mode 100644
index 00000000..ad4c5606
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-up-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-up-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-up-outline.svg
new file mode 100644
index 00000000..ae663b96
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-up-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-upload-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-upload-fill.svg
new file mode 100644
index 00000000..33d634d6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-upload-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-upload-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-upload-outline.svg
new file mode 100644
index 00000000..ad6c2a32
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-upload-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-upvote-fill-mask.svg b/versioned_docs/version-0.13/assets/icons/icon-upvote-fill-mask.svg
new file mode 100644
index 00000000..e1426e72
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-upvote-fill-mask.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-upvote-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-upvote-fill.svg
new file mode 100644
index 00000000..595a3d02
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-upvote-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-upvote-offsetmask.svg b/versioned_docs/version-0.13/assets/icons/icon-upvote-offsetmask.svg
new file mode 100644
index 00000000..e1426e72
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-upvote-offsetmask.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-upvote-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-upvote-outline.svg
new file mode 100644
index 00000000..a76c67a0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-upvote-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-upvotes-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-upvotes-fill.svg
new file mode 100644
index 00000000..3997bbeb
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-upvotes-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-upvotes-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-upvotes-outline.svg
new file mode 100644
index 00000000..d7546dc2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-upvotes-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-user-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-user-fill.svg
new file mode 100644
index 00000000..f985f7b6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-user-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-user-note-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-user-note-fill.svg
new file mode 100644
index 00000000..ff02bfa8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-user-note-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-user-note-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-user-note-outline.svg
new file mode 100644
index 00000000..342f7f4e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-user-note-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-user-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-user-outline.svg
new file mode 100644
index 00000000..a22cf50d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-user-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-users-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-users-fill.svg
new file mode 100644
index 00000000..d08ddd23
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-users-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-users-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-users-outline.svg
new file mode 100644
index 00000000..bab7c79b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-users-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-valentines-day-fill-24.svg b/versioned_docs/version-0.13/assets/icons/icon-valentines-day-fill-24.svg
new file mode 100644
index 00000000..63439411
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-valentines-day-fill-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-valentines-day-outline-24.svg b/versioned_docs/version-0.13/assets/icons/icon-valentines-day-outline-24.svg
new file mode 100644
index 00000000..a4d0bf13
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-valentines-day-outline-24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-vault-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-vault-fill.svg
new file mode 100644
index 00000000..4898c7ff
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-vault-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-vault-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-vault-outline.svg
new file mode 100644
index 00000000..fde80156
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-vault-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-verified-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-verified-fill.svg
new file mode 100644
index 00000000..ea8c68fd
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-verified-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-verified-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-verified-outline.svg
new file mode 100644
index 00000000..3bf0c796
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-verified-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-camera-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-video-camera-fill.svg
new file mode 100644
index 00000000..385aa065
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-camera-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-camera-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-video-camera-outline.svg
new file mode 100644
index 00000000..95249051
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-camera-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-feed-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-video-feed-fill.svg
new file mode 100644
index 00000000..c20356c8
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-feed-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-feed-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-video-feed-outline.svg
new file mode 100644
index 00000000..ed5575f5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-feed-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-live-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-video-live-fill.svg
new file mode 100644
index 00000000..c48003f0
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-live-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-live-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-video-live-outline.svg
new file mode 100644
index 00000000..8bcf5726
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-live-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-post-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-video-post-fill.svg
new file mode 100644
index 00000000..1197e193
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-post-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-post-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-video-post-outline.svg
new file mode 100644
index 00000000..5938a474
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-post-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-thread-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-video-thread-fill.svg
new file mode 100644
index 00000000..a1b48d3d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-thread-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-thread-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-video-thread-outline.svg
new file mode 100644
index 00000000..cb658fc6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-thread-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-transcription-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-video-transcription-fill.svg
new file mode 100644
index 00000000..326c9c9d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-transcription-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-video-transcription-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-video-transcription-outline.svg
new file mode 100644
index 00000000..47eb76dc
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-video-transcription-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-view-card-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-view-card-fill.svg
new file mode 100644
index 00000000..10902ea2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-view-card-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-view-card-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-view-card-outline.svg
new file mode 100644
index 00000000..f7e06246
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-view-card-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-view-classic-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-view-classic-fill.svg
new file mode 100644
index 00000000..ab40766f
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-view-classic-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-view-classic-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-view-classic-outline.svg
new file mode 100644
index 00000000..83c04650
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-view-classic-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-view-compact-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-view-compact-fill.svg
new file mode 100644
index 00000000..637a4f79
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-view-compact-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-view-compact-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-view-compact-outline.svg
new file mode 100644
index 00000000..70a117c5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-view-compact-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-view-grid-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-view-grid-fill.svg
new file mode 100644
index 00000000..dba59b28
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-view-grid-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-view-grid-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-view-grid-outline.svg
new file mode 100644
index 00000000..42b21e23
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-view-grid-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-views-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-views-fill.svg
new file mode 100644
index 00000000..ffba9b26
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-views-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-views-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-views-outline.svg
new file mode 100644
index 00000000..778e3a5b
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-views-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-volume-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-volume-fill.svg
new file mode 100644
index 00000000..31aa48d1
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-volume-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-volume-mute-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-volume-mute-fill.svg
new file mode 100644
index 00000000..832479a5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-volume-mute-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-volume-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-volume-outline.svg
new file mode 100644
index 00000000..931b01c7
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-volume-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-wallet-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-wallet-fill.svg
new file mode 100644
index 00000000..696468da
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-wallet-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-wallet-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-wallet-outline.svg
new file mode 100644
index 00000000..9711b60d
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-wallet-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-warning-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-warning-fill.svg
new file mode 100644
index 00000000..49715087
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-warning-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-warning-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-warning-outline.svg
new file mode 100644
index 00000000..54ab4ea3
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-warning-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-webhook-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-webhook-fill.svg
new file mode 100644
index 00000000..8b023d5c
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-webhook-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-webhook-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-webhook-outline.svg
new file mode 100644
index 00000000..c902ca46
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-webhook-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-whale-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-whale-fill.svg
new file mode 100644
index 00000000..0de436b2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-whale-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-whale-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-whale-outline.svg
new file mode 100644
index 00000000..fc9a33be
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-whale-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-wiki-ban-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-wiki-ban-fill.svg
new file mode 100644
index 00000000..a41801ce
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-wiki-ban-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-wiki-ban-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-wiki-ban-outline.svg
new file mode 100644
index 00000000..9d3108c9
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-wiki-ban-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-wiki-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-wiki-fill.svg
new file mode 100644
index 00000000..c6bd15d6
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-wiki-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-wiki-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-wiki-outline.svg
new file mode 100644
index 00000000..008710c2
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-wiki-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-wiki-unban-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-wiki-unban-fill.svg
new file mode 100644
index 00000000..ddcf8d78
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-wiki-unban-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-wiki-unban-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-wiki-unban-outline.svg
new file mode 100644
index 00000000..fdb42f64
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-wiki-unban-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-world-fill.svg b/versioned_docs/version-0.13/assets/icons/icon-world-fill.svg
new file mode 100644
index 00000000..5694453e
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-world-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/icons/icon-world-outline.svg b/versioned_docs/version-0.13/assets/icons/icon-world-outline.svg
new file mode 100644
index 00000000..099be4c5
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/icons/icon-world-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/assets/install-app-button.png b/versioned_docs/version-0.13/assets/install-app-button.png
new file mode 100644
index 00000000..aa21ad0a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/install-app-button.png differ
diff --git a/versioned_docs/version-0.13/assets/install.png b/versioned_docs/version-0.13/assets/install.png
new file mode 100644
index 00000000..8227c6d0
Binary files /dev/null and b/versioned_docs/version-0.13/assets/install.png differ
diff --git a/versioned_docs/version-0.13/assets/intro-to-devvit-mod-action.png b/versioned_docs/version-0.13/assets/intro-to-devvit-mod-action.png
new file mode 100644
index 00000000..03e9e063
Binary files /dev/null and b/versioned_docs/version-0.13/assets/intro-to-devvit-mod-action.png differ
diff --git a/versioned_docs/version-0.13/assets/intro-to-devvit-playtesting.png b/versioned_docs/version-0.13/assets/intro-to-devvit-playtesting.png
new file mode 100644
index 00000000..5344d9aa
Binary files /dev/null and b/versioned_docs/version-0.13/assets/intro-to-devvit-playtesting.png differ
diff --git a/versioned_docs/version-0.13/assets/intro-to-devvit-sub-action.png b/versioned_docs/version-0.13/assets/intro-to-devvit-sub-action.png
new file mode 100644
index 00000000..a24b6ed1
Binary files /dev/null and b/versioned_docs/version-0.13/assets/intro-to-devvit-sub-action.png differ
diff --git a/versioned_docs/version-0.13/assets/introduction/SnooToolboxClipboard.webp b/versioned_docs/version-0.13/assets/introduction/SnooToolboxClipboard.webp
new file mode 100644
index 00000000..e030f01c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/introduction/SnooToolboxClipboard.webp differ
diff --git a/versioned_docs/version-0.13/assets/introduction/SpotIllustration_Color_PartyHorn.webp b/versioned_docs/version-0.13/assets/introduction/SpotIllustration_Color_PartyHorn.webp
new file mode 100644
index 00000000..a8e10079
Binary files /dev/null and b/versioned_docs/version-0.13/assets/introduction/SpotIllustration_Color_PartyHorn.webp differ
diff --git a/versioned_docs/version-0.13/assets/introduction/SpotIllustration_Color_Toolbox.webp b/versioned_docs/version-0.13/assets/introduction/SpotIllustration_Color_Toolbox.webp
new file mode 100644
index 00000000..68f65bc5
Binary files /dev/null and b/versioned_docs/version-0.13/assets/introduction/SpotIllustration_Color_Toolbox.webp differ
diff --git a/versioned_docs/version-0.13/assets/introduction/SpotIllustration_RetroController_B.webp b/versioned_docs/version-0.13/assets/introduction/SpotIllustration_RetroController_B.webp
new file mode 100644
index 00000000..93c98b20
Binary files /dev/null and b/versioned_docs/version-0.13/assets/introduction/SpotIllustration_RetroController_B.webp differ
diff --git a/versioned_docs/version-0.13/assets/introduction/SpotIllustration_Rocket.webp b/versioned_docs/version-0.13/assets/introduction/SpotIllustration_Rocket.webp
new file mode 100644
index 00000000..5d093c0c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/introduction/SpotIllustration_Rocket.webp differ
diff --git a/versioned_docs/version-0.13/assets/lighthouse-score.gif b/versioned_docs/version-0.13/assets/lighthouse-score.gif
new file mode 100644
index 00000000..df8f1a4a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/lighthouse-score.gif differ
diff --git a/versioned_docs/version-0.13/assets/manage_uninstall.png b/versioned_docs/version-0.13/assets/manage_uninstall.png
new file mode 100644
index 00000000..94775a2f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/manage_uninstall.png differ
diff --git a/versioned_docs/version-0.13/assets/menu_app_comment.png b/versioned_docs/version-0.13/assets/menu_app_comment.png
new file mode 100644
index 00000000..3deda6c0
Binary files /dev/null and b/versioned_docs/version-0.13/assets/menu_app_comment.png differ
diff --git a/versioned_docs/version-0.13/assets/menu_app_error.png b/versioned_docs/version-0.13/assets/menu_app_error.png
new file mode 100644
index 00000000..34d0829c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/menu_app_error.png differ
diff --git a/versioned_docs/version-0.13/assets/menu_app_mod.png b/versioned_docs/version-0.13/assets/menu_app_mod.png
new file mode 100644
index 00000000..52e0e04a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/menu_app_mod.png differ
diff --git a/versioned_docs/version-0.13/assets/menu_app_post.png b/versioned_docs/version-0.13/assets/menu_app_post.png
new file mode 100644
index 00000000..9566c1c0
Binary files /dev/null and b/versioned_docs/version-0.13/assets/menu_app_post.png differ
diff --git a/versioned_docs/version-0.13/assets/menu_app_studio.png b/versioned_docs/version-0.13/assets/menu_app_studio.png
new file mode 100644
index 00000000..d456ed6c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/menu_app_studio.png differ
diff --git a/versioned_docs/version-0.13/assets/menu_app_subreddit.png b/versioned_docs/version-0.13/assets/menu_app_subreddit.png
new file mode 100644
index 00000000..c037bc70
Binary files /dev/null and b/versioned_docs/version-0.13/assets/menu_app_subreddit.png differ
diff --git a/versioned_docs/version-0.13/assets/menu_app_success.png b/versioned_docs/version-0.13/assets/menu_app_success.png
new file mode 100644
index 00000000..69c0afc2
Binary files /dev/null and b/versioned_docs/version-0.13/assets/menu_app_success.png differ
diff --git a/versioned_docs/version-0.13/assets/mod_community_settings.png b/versioned_docs/version-0.13/assets/mod_community_settings.png
new file mode 100644
index 00000000..c40b1af8
Binary files /dev/null and b/versioned_docs/version-0.13/assets/mod_community_settings.png differ
diff --git a/versioned_docs/version-0.13/assets/my-apps-5.png b/versioned_docs/version-0.13/assets/my-apps-5.png
new file mode 100644
index 00000000..d5584322
Binary files /dev/null and b/versioned_docs/version-0.13/assets/my-apps-5.png differ
diff --git a/versioned_docs/version-0.13/assets/my_apps.png b/versioned_docs/version-0.13/assets/my_apps.png
new file mode 100644
index 00000000..2c5d85e9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/my_apps.png differ
diff --git a/versioned_docs/version-0.13/assets/oauth-login.png b/versioned_docs/version-0.13/assets/oauth-login.png
new file mode 100644
index 00000000..7676537f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/oauth-login.png differ
diff --git a/versioned_docs/version-0.13/assets/oauth-perms.png b/versioned_docs/version-0.13/assets/oauth-perms.png
new file mode 100644
index 00000000..0607a4f4
Binary files /dev/null and b/versioned_docs/version-0.13/assets/oauth-perms.png differ
diff --git a/versioned_docs/version-0.13/assets/oauth-revoke.png b/versioned_docs/version-0.13/assets/oauth-revoke.png
new file mode 100644
index 00000000..55e68f4a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/oauth-revoke.png differ
diff --git a/versioned_docs/version-0.13/assets/oauth-success.png b/versioned_docs/version-0.13/assets/oauth-success.png
new file mode 100644
index 00000000..3bf41e4a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/oauth-success.png differ
diff --git a/versioned_docs/version-0.13/assets/payment_simulation.png b/versioned_docs/version-0.13/assets/payment_simulation.png
new file mode 100644
index 00000000..f7863a6a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/payment_simulation.png differ
diff --git a/versioned_docs/version-0.13/assets/payments_button_purchase.png b/versioned_docs/version-0.13/assets/payments_button_purchase.png
new file mode 100644
index 00000000..2b111ee0
Binary files /dev/null and b/versioned_docs/version-0.13/assets/payments_button_purchase.png differ
diff --git a/versioned_docs/version-0.13/assets/payments_component_button.png b/versioned_docs/version-0.13/assets/payments_component_button.png
new file mode 100644
index 00000000..9d491530
Binary files /dev/null and b/versioned_docs/version-0.13/assets/payments_component_button.png differ
diff --git a/versioned_docs/version-0.13/assets/payments_component_list.png b/versioned_docs/version-0.13/assets/payments_component_list.png
new file mode 100644
index 00000000..88b0d7f0
Binary files /dev/null and b/versioned_docs/version-0.13/assets/payments_component_list.png differ
diff --git a/versioned_docs/version-0.13/assets/payments_component_tile.png b/versioned_docs/version-0.13/assets/payments_component_tile.png
new file mode 100644
index 00000000..7fa79241
Binary files /dev/null and b/versioned_docs/version-0.13/assets/payments_component_tile.png differ
diff --git a/versioned_docs/version-0.13/assets/payments_example.png b/versioned_docs/version-0.13/assets/payments_example.png
new file mode 100644
index 00000000..d7b6eff5
Binary files /dev/null and b/versioned_docs/version-0.13/assets/payments_example.png differ
diff --git a/versioned_docs/version-0.13/assets/payments_order_flow.jpg b/versioned_docs/version-0.13/assets/payments_order_flow.jpg
new file mode 100644
index 00000000..2ba04a1a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/payments_order_flow.jpg differ
diff --git a/versioned_docs/version-0.13/assets/payments_order_flow_diagram.png b/versioned_docs/version-0.13/assets/payments_order_flow_diagram.png
new file mode 100644
index 00000000..e9cb9961
Binary files /dev/null and b/versioned_docs/version-0.13/assets/payments_order_flow_diagram.png differ
diff --git a/versioned_docs/version-0.13/assets/play/code_completion.png b/versioned_docs/version-0.13/assets/play/code_completion.png
new file mode 100644
index 00000000..c6e8c9cb
Binary files /dev/null and b/versioned_docs/version-0.13/assets/play/code_completion.png differ
diff --git a/versioned_docs/version-0.13/assets/play/collaborate.png b/versioned_docs/version-0.13/assets/play/collaborate.png
new file mode 100644
index 00000000..dc6cd83f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/play/collaborate.png differ
diff --git a/versioned_docs/version-0.13/assets/play/example_clock.png b/versioned_docs/version-0.13/assets/play/example_clock.png
new file mode 100644
index 00000000..2a86e638
Binary files /dev/null and b/versioned_docs/version-0.13/assets/play/example_clock.png differ
diff --git a/versioned_docs/version-0.13/assets/play/example_hello_blocks.png b/versioned_docs/version-0.13/assets/play/example_hello_blocks.png
new file mode 100644
index 00000000..fe22b6e5
Binary files /dev/null and b/versioned_docs/version-0.13/assets/play/example_hello_blocks.png differ
diff --git a/versioned_docs/version-0.13/assets/play/example_polls.png b/versioned_docs/version-0.13/assets/play/example_polls.png
new file mode 100644
index 00000000..1df7550f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/play/example_polls.png differ
diff --git a/versioned_docs/version-0.13/assets/play/example_progress_bar.png b/versioned_docs/version-0.13/assets/play/example_progress_bar.png
new file mode 100644
index 00000000..bca5da40
Binary files /dev/null and b/versioned_docs/version-0.13/assets/play/example_progress_bar.png differ
diff --git a/versioned_docs/version-0.13/assets/play/export.png b/versioned_docs/version-0.13/assets/play/export.png
new file mode 100644
index 00000000..82e8e111
Binary files /dev/null and b/versioned_docs/version-0.13/assets/play/export.png differ
diff --git a/versioned_docs/version-0.13/assets/play/preview.png b/versioned_docs/version-0.13/assets/play/preview.png
new file mode 100644
index 00000000..0c85b21b
Binary files /dev/null and b/versioned_docs/version-0.13/assets/play/preview.png differ
diff --git a/versioned_docs/version-0.13/assets/play/screenshot.png b/versioned_docs/version-0.13/assets/play/screenshot.png
new file mode 100644
index 00000000..053e7285
Binary files /dev/null and b/versioned_docs/version-0.13/assets/play/screenshot.png differ
diff --git a/versioned_docs/version-0.13/assets/play/type-check.png b/versioned_docs/version-0.13/assets/play/type-check.png
new file mode 100644
index 00000000..fe1c9a3b
Binary files /dev/null and b/versioned_docs/version-0.13/assets/play/type-check.png differ
diff --git a/versioned_docs/version-0.13/assets/poll.png b/versioned_docs/version-0.13/assets/poll.png
new file mode 100644
index 00000000..0d05111f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/poll.png differ
diff --git a/versioned_docs/version-0.13/assets/poll_add_option_form.png b/versioned_docs/version-0.13/assets/poll_add_option_form.png
new file mode 100644
index 00000000..70a66a1a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/poll_add_option_form.png differ
diff --git a/versioned_docs/version-0.13/assets/poll_custom_response_option.png b/versioned_docs/version-0.13/assets/poll_custom_response_option.png
new file mode 100644
index 00000000..2ccbbe1f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/poll_custom_response_option.png differ
diff --git a/versioned_docs/version-0.13/assets/poll_new_option_added.png b/versioned_docs/version-0.13/assets/poll_new_option_added.png
new file mode 100644
index 00000000..c5180f91
Binary files /dev/null and b/versioned_docs/version-0.13/assets/poll_new_option_added.png differ
diff --git a/versioned_docs/version-0.13/assets/poll_success_toast.png b/versioned_docs/version-0.13/assets/poll_success_toast.png
new file mode 100644
index 00000000..d5a53eff
Binary files /dev/null and b/versioned_docs/version-0.13/assets/poll_success_toast.png differ
diff --git a/versioned_docs/version-0.13/assets/poll_voted.png b/versioned_docs/version-0.13/assets/poll_voted.png
new file mode 100644
index 00000000..15c1c8e4
Binary files /dev/null and b/versioned_docs/version-0.13/assets/poll_voted.png differ
diff --git a/versioned_docs/version-0.13/assets/qs_complete.png b/versioned_docs/version-0.13/assets/qs_complete.png
new file mode 100644
index 00000000..043cbead
Binary files /dev/null and b/versioned_docs/version-0.13/assets/qs_complete.png differ
diff --git a/versioned_docs/version-0.13/assets/qs_remind-me.png b/versioned_docs/version-0.13/assets/qs_remind-me.png
new file mode 100644
index 00000000..f2b782ab
Binary files /dev/null and b/versioned_docs/version-0.13/assets/qs_remind-me.png differ
diff --git a/versioned_docs/version-0.13/assets/qs_toast.png b/versioned_docs/version-0.13/assets/qs_toast.png
new file mode 100644
index 00000000..fbb4bce4
Binary files /dev/null and b/versioned_docs/version-0.13/assets/qs_toast.png differ
diff --git a/versioned_docs/version-0.13/assets/quickstart/quickstart-mod-tool-1.png b/versioned_docs/version-0.13/assets/quickstart/quickstart-mod-tool-1.png
new file mode 100644
index 00000000..d3a47543
Binary files /dev/null and b/versioned_docs/version-0.13/assets/quickstart/quickstart-mod-tool-1.png differ
diff --git a/versioned_docs/version-0.13/assets/quickstart/quickstart-mod-tool-2.png b/versioned_docs/version-0.13/assets/quickstart/quickstart-mod-tool-2.png
new file mode 100644
index 00000000..59a5af16
Binary files /dev/null and b/versioned_docs/version-0.13/assets/quickstart/quickstart-mod-tool-2.png differ
diff --git a/versioned_docs/version-0.13/assets/quickstart_game_subreddit.png b/versioned_docs/version-0.13/assets/quickstart_game_subreddit.png
new file mode 100644
index 00000000..5f5d3230
Binary files /dev/null and b/versioned_docs/version-0.13/assets/quickstart_game_subreddit.png differ
diff --git a/versioned_docs/version-0.13/assets/quickstart_gamemaker.gif b/versioned_docs/version-0.13/assets/quickstart_gamemaker.gif
new file mode 100644
index 00000000..a78403b2
Binary files /dev/null and b/versioned_docs/version-0.13/assets/quickstart_gamemaker.gif differ
diff --git a/versioned_docs/version-0.13/assets/quickstart_unity.gif b/versioned_docs/version-0.13/assets/quickstart_unity.gif
new file mode 100644
index 00000000..278853f5
Binary files /dev/null and b/versioned_docs/version-0.13/assets/quickstart_unity.gif differ
diff --git a/versioned_docs/version-0.13/assets/quiz_planet_inline_screen.jpg b/versioned_docs/version-0.13/assets/quiz_planet_inline_screen.jpg
new file mode 100644
index 00000000..b71992af
Binary files /dev/null and b/versioned_docs/version-0.13/assets/quiz_planet_inline_screen.jpg differ
diff --git a/versioned_docs/version-0.13/assets/realtime/devvit_emoji_chat.gif b/versioned_docs/version-0.13/assets/realtime/devvit_emoji_chat.gif
new file mode 100644
index 00000000..14935e18
Binary files /dev/null and b/versioned_docs/version-0.13/assets/realtime/devvit_emoji_chat.gif differ
diff --git a/versioned_docs/version-0.13/assets/realtime/mini_place_high.gif b/versioned_docs/version-0.13/assets/realtime/mini_place_high.gif
new file mode 100644
index 00000000..123e7b03
Binary files /dev/null and b/versioned_docs/version-0.13/assets/realtime/mini_place_high.gif differ
diff --git a/versioned_docs/version-0.13/assets/realtime/server_push.gif b/versioned_docs/version-0.13/assets/realtime/server_push.gif
new file mode 100644
index 00000000..38a26035
Binary files /dev/null and b/versioned_docs/version-0.13/assets/realtime/server_push.gif differ
diff --git a/versioned_docs/version-0.13/assets/realtime/snoo_club.gif b/versioned_docs/version-0.13/assets/realtime/snoo_club.gif
new file mode 100644
index 00000000..17b48b21
Binary files /dev/null and b/versioned_docs/version-0.13/assets/realtime/snoo_club.gif differ
diff --git a/versioned_docs/version-0.13/assets/realtime/snoo_club_backup.gif b/versioned_docs/version-0.13/assets/realtime/snoo_club_backup.gif
new file mode 100644
index 00000000..14061d01
Binary files /dev/null and b/versioned_docs/version-0.13/assets/realtime/snoo_club_backup.gif differ
diff --git a/versioned_docs/version-0.13/assets/realtime/synced_progress_bar.gif b/versioned_docs/version-0.13/assets/realtime/synced_progress_bar.gif
new file mode 100644
index 00000000..911b1756
Binary files /dev/null and b/versioned_docs/version-0.13/assets/realtime/synced_progress_bar.gif differ
diff --git a/versioned_docs/version-0.13/assets/remind_me_bot_failed_toast_past.png b/versioned_docs/version-0.13/assets/remind_me_bot_failed_toast_past.png
new file mode 100644
index 00000000..33045737
Binary files /dev/null and b/versioned_docs/version-0.13/assets/remind_me_bot_failed_toast_past.png differ
diff --git a/versioned_docs/version-0.13/assets/remind_me_bot_failed_toast_unknown.png b/versioned_docs/version-0.13/assets/remind_me_bot_failed_toast_unknown.png
new file mode 100644
index 00000000..311ad14a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/remind_me_bot_failed_toast_unknown.png differ
diff --git a/versioned_docs/version-0.13/assets/remind_me_bot_input_form.png b/versioned_docs/version-0.13/assets/remind_me_bot_input_form.png
new file mode 100644
index 00000000..3c217bfc
Binary files /dev/null and b/versioned_docs/version-0.13/assets/remind_me_bot_input_form.png differ
diff --git a/versioned_docs/version-0.13/assets/remind_me_bot_menu_entry.png b/versioned_docs/version-0.13/assets/remind_me_bot_menu_entry.png
new file mode 100644
index 00000000..11d0a7eb
Binary files /dev/null and b/versioned_docs/version-0.13/assets/remind_me_bot_menu_entry.png differ
diff --git a/versioned_docs/version-0.13/assets/remind_me_bot_success_toast.png b/versioned_docs/version-0.13/assets/remind_me_bot_success_toast.png
new file mode 100644
index 00000000..15c9bed4
Binary files /dev/null and b/versioned_docs/version-0.13/assets/remind_me_bot_success_toast.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/1line1.gif b/versioned_docs/version-0.13/assets/showcase/1line1.gif
new file mode 100644
index 00000000..cf67a313
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/1line1.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/RedditForDevelopers_Logo_ShortBubble.png b/versioned_docs/version-0.13/assets/showcase/RedditForDevelopers_Logo_ShortBubble.png
new file mode 100644
index 00000000..90cd1b07
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/RedditForDevelopers_Logo_ShortBubble.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/app-gallery/bot-bouncer.png b/versioned_docs/version-0.13/assets/showcase/app-gallery/bot-bouncer.png
new file mode 100644
index 00000000..cd91c1a7
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/app-gallery/bot-bouncer.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/app-gallery/community-home.png b/versioned_docs/version-0.13/assets/showcase/app-gallery/community-home.png
new file mode 100644
index 00000000..bf9e6456
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/app-gallery/community-home.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/app-gallery/hightier.png b/versioned_docs/version-0.13/assets/showcase/app-gallery/hightier.png
new file mode 100644
index 00000000..d0f0bf54
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/app-gallery/hightier.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/app-gallery/honk.png b/versioned_docs/version-0.13/assets/showcase/app-gallery/honk.png
new file mode 100644
index 00000000..d35cf56f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/app-gallery/honk.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/app-gallery/pixelary.png b/versioned_docs/version-0.13/assets/showcase/app-gallery/pixelary.png
new file mode 100644
index 00000000..1d87594f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/app-gallery/pixelary.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/app-gallery/riddonkulous.png b/versioned_docs/version-0.13/assets/showcase/app-gallery/riddonkulous.png
new file mode 100644
index 00000000..4f88ca88
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/app-gallery/riddonkulous.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/app-gallery/sword-and-supper.png b/versioned_docs/version-0.13/assets/showcase/app-gallery/sword-and-supper.png
new file mode 100644
index 00000000..f9917942
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/app-gallery/sword-and-supper.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/app-gallery/what-the.png b/versioned_docs/version-0.13/assets/showcase/app-gallery/what-the.png
new file mode 100644
index 00000000..9ac52bb1
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/app-gallery/what-the.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/buildit_building.gif b/versioned_docs/version-0.13/assets/showcase/buildit_building.gif
new file mode 100644
index 00000000..4da505d0
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/buildit_building.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/buildit_gameplay.gif b/versioned_docs/version-0.13/assets/showcase/buildit_gameplay.gif
new file mode 100644
index 00000000..40560f2e
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/buildit_gameplay.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/buildit_purchasing.gif b/versioned_docs/version-0.13/assets/showcase/buildit_purchasing.gif
new file mode 100644
index 00000000..3f652d3b
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/buildit_purchasing.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/dailydm.gif b/versioned_docs/version-0.13/assets/showcase/dailydm.gif
new file mode 100644
index 00000000..98baf0ce
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/dailydm.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/dark_dungeon.gif b/versioned_docs/version-0.13/assets/showcase/dark_dungeon.gif
new file mode 100644
index 00000000..82a1b3a5
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/dark_dungeon.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/dark_dungeon_shop.gif b/versioned_docs/version-0.13/assets/showcase/dark_dungeon_shop.gif
new file mode 100644
index 00000000..b011dbf5
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/dark_dungeon_shop.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/flappy_goose.gif b/versioned_docs/version-0.13/assets/showcase/flappy_goose.gif
new file mode 100644
index 00000000..59d557e7
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/flappy_goose.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/hightier.gif b/versioned_docs/version-0.13/assets/showcase/hightier.gif
new file mode 100644
index 00000000..f1eda23b
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/hightier.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/honk1.gif b/versioned_docs/version-0.13/assets/showcase/honk1.gif
new file mode 100644
index 00000000..c9175e02
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/honk1.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/pixelary_mobile.png b/versioned_docs/version-0.13/assets/showcase/pixelary_mobile.png
new file mode 100644
index 00000000..08df9927
--- /dev/null
+++ b/versioned_docs/version-0.13/assets/showcase/pixelary_mobile.png
@@ -0,0 +1 @@
+
diff --git a/versioned_docs/version-0.13/assets/showcase/pixisle1.gif b/versioned_docs/version-0.13/assets/showcase/pixisle1.gif
new file mode 100644
index 00000000..fcb4f7db
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/pixisle1.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-card-game-layout.png b/versioned_docs/version-0.13/assets/showcase/playgrounds-card-game-layout.png
new file mode 100644
index 00000000..4fb8db6f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-card-game-layout.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-clock.gif b/versioned_docs/version-0.13/assets/showcase/playgrounds-clock.gif
new file mode 100644
index 00000000..8fa4dd6b
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-clock.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-clock.png b/versioned_docs/version-0.13/assets/showcase/playgrounds-clock.png
new file mode 100644
index 00000000..b01e63d9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-clock.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-drawable-canvas.gif b/versioned_docs/version-0.13/assets/showcase/playgrounds-drawable-canvas.gif
new file mode 100644
index 00000000..aec86c10
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-drawable-canvas.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-drawable-canvas.png b/versioned_docs/version-0.13/assets/showcase/playgrounds-drawable-canvas.png
new file mode 100644
index 00000000..e8afb27a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-drawable-canvas.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-football.png b/versioned_docs/version-0.13/assets/showcase/playgrounds-football.png
new file mode 100644
index 00000000..4aa7988c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-football.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-in-app-navigation.gif b/versioned_docs/version-0.13/assets/showcase/playgrounds-in-app-navigation.gif
new file mode 100644
index 00000000..d3efb4c0
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-in-app-navigation.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-in-app-navigation.png b/versioned_docs/version-0.13/assets/showcase/playgrounds-in-app-navigation.png
new file mode 100644
index 00000000..10c79d7f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-in-app-navigation.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-pixel-font.gif b/versioned_docs/version-0.13/assets/showcase/playgrounds-pixel-font.gif
new file mode 100644
index 00000000..4c50c3e5
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-pixel-font.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-pixel-font.png b/versioned_docs/version-0.13/assets/showcase/playgrounds-pixel-font.png
new file mode 100644
index 00000000..b61f322f
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-pixel-font.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-polls.gif b/versioned_docs/version-0.13/assets/showcase/playgrounds-polls.gif
new file mode 100644
index 00000000..dd331abd
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-polls.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-polls.png b/versioned_docs/version-0.13/assets/showcase/playgrounds-polls.png
new file mode 100644
index 00000000..af8ba7fe
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-polls.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-progress-bar.gif b/versioned_docs/version-0.13/assets/showcase/playgrounds-progress-bar.gif
new file mode 100644
index 00000000..b29c9a40
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-progress-bar.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/playgrounds-progress-bar.png b/versioned_docs/version-0.13/assets/showcase/playgrounds-progress-bar.png
new file mode 100644
index 00000000..f31b9693
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/playgrounds-progress-bar.png differ
diff --git a/versioned_docs/version-0.13/assets/showcase/riddonkulous_guess.gif b/versioned_docs/version-0.13/assets/showcase/riddonkulous_guess.gif
new file mode 100644
index 00000000..26037c61
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/riddonkulous_guess.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/riddonkulous_reddit_gold.gif b/versioned_docs/version-0.13/assets/showcase/riddonkulous_reddit_gold.gif
new file mode 100644
index 00000000..37fd7198
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/riddonkulous_reddit_gold.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/sword_and_supper.gif b/versioned_docs/version-0.13/assets/showcase/sword_and_supper.gif
new file mode 100644
index 00000000..00e513d4
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/sword_and_supper.gif differ
diff --git a/versioned_docs/version-0.13/assets/showcase/swordandsupper1.gif b/versioned_docs/version-0.13/assets/showcase/swordandsupper1.gif
new file mode 100644
index 00000000..0483b335
Binary files /dev/null and b/versioned_docs/version-0.13/assets/showcase/swordandsupper1.gif differ
diff --git a/versioned_docs/version-0.13/assets/splash_screen.png b/versioned_docs/version-0.13/assets/splash_screen.png
new file mode 100644
index 00000000..c1fcebc8
Binary files /dev/null and b/versioned_docs/version-0.13/assets/splash_screen.png differ
diff --git a/versioned_docs/version-0.13/assets/studio_breakpoints.png b/versioned_docs/version-0.13/assets/studio_breakpoints.png
new file mode 100644
index 00000000..2b15aaeb
Binary files /dev/null and b/versioned_docs/version-0.13/assets/studio_breakpoints.png differ
diff --git a/versioned_docs/version-0.13/assets/studio_docs_main.png b/versioned_docs/version-0.13/assets/studio_docs_main.png
new file mode 100644
index 00000000..dfa806f8
Binary files /dev/null and b/versioned_docs/version-0.13/assets/studio_docs_main.png differ
diff --git a/versioned_docs/version-0.13/assets/studio_sub_select.png b/versioned_docs/version-0.13/assets/studio_sub_select.png
new file mode 100644
index 00000000..83e3d1ff
Binary files /dev/null and b/versioned_docs/version-0.13/assets/studio_sub_select.png differ
diff --git a/versioned_docs/version-0.13/assets/support_birbclub.gif b/versioned_docs/version-0.13/assets/support_birbclub.gif
new file mode 100644
index 00000000..74006644
Binary files /dev/null and b/versioned_docs/version-0.13/assets/support_birbclub.gif differ
diff --git a/versioned_docs/version-0.13/assets/support_birbclub_flair.png b/versioned_docs/version-0.13/assets/support_birbclub_flair.png
new file mode 100644
index 00000000..adcdf590
Binary files /dev/null and b/versioned_docs/version-0.13/assets/support_birbclub_flair.png differ
diff --git a/versioned_docs/version-0.13/assets/support_this_app.png b/versioned_docs/version-0.13/assets/support_this_app.png
new file mode 100644
index 00000000..2f546a6a
Binary files /dev/null and b/versioned_docs/version-0.13/assets/support_this_app.png differ
diff --git a/versioned_docs/version-0.13/assets/test-init.png b/versioned_docs/version-0.13/assets/test-init.png
new file mode 100644
index 00000000..2707d29b
Binary files /dev/null and b/versioned_docs/version-0.13/assets/test-init.png differ
diff --git a/versioned_docs/version-0.13/assets/text_formats/constricting.png b/versioned_docs/version-0.13/assets/text_formats/constricting.png
new file mode 100644
index 00000000..0afae4c1
Binary files /dev/null and b/versioned_docs/version-0.13/assets/text_formats/constricting.png differ
diff --git a/versioned_docs/version-0.13/assets/text_formats/constricting_limited.png b/versioned_docs/version-0.13/assets/text_formats/constricting_limited.png
new file mode 100644
index 00000000..be77299d
Binary files /dev/null and b/versioned_docs/version-0.13/assets/text_formats/constricting_limited.png differ
diff --git a/versioned_docs/version-0.13/assets/text_formats/constricting_overflow.png b/versioned_docs/version-0.13/assets/text_formats/constricting_overflow.png
new file mode 100644
index 00000000..3c1e3909
Binary files /dev/null and b/versioned_docs/version-0.13/assets/text_formats/constricting_overflow.png differ
diff --git a/versioned_docs/version-0.13/assets/text_formats/default_text.png b/versioned_docs/version-0.13/assets/text_formats/default_text.png
new file mode 100644
index 00000000..bbd4195c
Binary files /dev/null and b/versioned_docs/version-0.13/assets/text_formats/default_text.png differ
diff --git a/versioned_docs/version-0.13/assets/text_formats/overflow.png b/versioned_docs/version-0.13/assets/text_formats/overflow.png
new file mode 100644
index 00000000..a7d150d9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/text_formats/overflow.png differ
diff --git a/versioned_docs/version-0.13/assets/text_formats/text_wrapping.png b/versioned_docs/version-0.13/assets/text_formats/text_wrapping.png
new file mode 100644
index 00000000..cf3586b9
Binary files /dev/null and b/versioned_docs/version-0.13/assets/text_formats/text_wrapping.png differ
diff --git a/versioned_docs/version-0.13/assets/three_strikes_app_author_strike_count.png b/versioned_docs/version-0.13/assets/three_strikes_app_author_strike_count.png
new file mode 100644
index 00000000..e8f9d223
Binary files /dev/null and b/versioned_docs/version-0.13/assets/three_strikes_app_author_strike_count.png differ
diff --git a/versioned_docs/version-0.13/assets/three_strikes_app_comment_menu.png b/versioned_docs/version-0.13/assets/three_strikes_app_comment_menu.png
new file mode 100644
index 00000000..cc76eb2e
Binary files /dev/null and b/versioned_docs/version-0.13/assets/three_strikes_app_comment_menu.png differ
diff --git a/versioned_docs/version-0.13/assets/three_strikes_app_metadata_missing.png b/versioned_docs/version-0.13/assets/three_strikes_app_metadata_missing.png
new file mode 100644
index 00000000..242b2731
Binary files /dev/null and b/versioned_docs/version-0.13/assets/three_strikes_app_metadata_missing.png differ
diff --git a/versioned_docs/version-0.13/assets/three_strikes_app_no_strikes.png b/versioned_docs/version-0.13/assets/three_strikes_app_no_strikes.png
new file mode 100644
index 00000000..d95cd1b5
Binary files /dev/null and b/versioned_docs/version-0.13/assets/three_strikes_app_no_strikes.png differ
diff --git a/versioned_docs/version-0.13/assets/three_strikes_app_post_menu.png b/versioned_docs/version-0.13/assets/three_strikes_app_post_menu.png
new file mode 100644
index 00000000..e7fc40de
Binary files /dev/null and b/versioned_docs/version-0.13/assets/three_strikes_app_post_menu.png differ
diff --git a/versioned_docs/version-0.13/assets/ui_simulator_header.png b/versioned_docs/version-0.13/assets/ui_simulator_header.png
new file mode 100644
index 00000000..ed6e4d01
Binary files /dev/null and b/versioned_docs/version-0.13/assets/ui_simulator_header.png differ
diff --git a/versioned_docs/version-0.13/assets/ui_simulator_theme.png b/versioned_docs/version-0.13/assets/ui_simulator_theme.png
new file mode 100644
index 00000000..9b0e9682
Binary files /dev/null and b/versioned_docs/version-0.13/assets/ui_simulator_theme.png differ
diff --git a/versioned_docs/version-0.13/assets/ui_simulator_viewport.png b/versioned_docs/version-0.13/assets/ui_simulator_viewport.png
new file mode 100644
index 00000000..8ab0e55b
Binary files /dev/null and b/versioned_docs/version-0.13/assets/ui_simulator_viewport.png differ
diff --git a/versioned_docs/version-0.13/assets/webviews-devvit-architecture.png b/versioned_docs/version-0.13/assets/webviews-devvit-architecture.png
new file mode 100644
index 00000000..bc0c0cde
Binary files /dev/null and b/versioned_docs/version-0.13/assets/webviews-devvit-architecture.png differ
diff --git a/versioned_docs/version-0.13/assets/webviews_example.png b/versioned_docs/version-0.13/assets/webviews_example.png
new file mode 100644
index 00000000..6d01559b
Binary files /dev/null and b/versioned_docs/version-0.13/assets/webviews_example.png differ
diff --git a/versioned_docs/version-0.13/assets/webviews_snakepit_example.png b/versioned_docs/version-0.13/assets/webviews_snakepit_example.png
new file mode 100644
index 00000000..5d950293
Binary files /dev/null and b/versioned_docs/version-0.13/assets/webviews_snakepit_example.png differ
diff --git a/versioned_docs/version-0.13/assets/webviews_snakepit_mobile_example.png b/versioned_docs/version-0.13/assets/webviews_snakepit_mobile_example.png
new file mode 100644
index 00000000..8fc54c46
Binary files /dev/null and b/versioned_docs/version-0.13/assets/webviews_snakepit_mobile_example.png differ
diff --git a/versioned_docs/version-0.13/capabilities/client/forms.mdx b/versioned_docs/version-0.13/capabilities/client/forms.mdx
new file mode 100644
index 00000000..b6fdd9fd
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/client/forms.mdx
@@ -0,0 +1,1190 @@
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Forms
+
+A form lets your app ask users to input and submit data. Forms can be defined with a simple [form object](#form-object) that takes a [list of fields](#supported-fields-types), and return user responses directly as promises.
+
+
+
+## Using forms
+
+**Promise-based forms:**
+ ```ts title="client/index.ts"
+ import { showForm } from '@devvit/web/client';
+
+ // Show form and get user response directly
+ const result = await showForm({
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'name',
+ label: 'Name',
+ },
+ ],
+ },
+ data: { name: 'Default value' } // Optional initial data
+ });
+
+ // Handle form submission result immediately
+ if (result) {
+ const { name } = result;
+
+ // Process the data directly
+ console.log(`User entered: ${name}`);
+
+ // Chain additional actions
+ await fetch('/api/save-name', {
+ method: 'POST',
+ body: JSON.stringify({ name })
+ });
+
+ // Or show another form in sequence
+ const step2 = await showForm({
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'food',
+ label: 'Favorite food?',
+ },
+ ],
+ }
+ });
+
+ if (step2) {
+ console.log(`Multi-step complete: ${name}, ${step2.food}`);
+ }
+ } else {
+ console.log('User cancelled the form');
+ }
+ ```
+
+### Parameters
+
+**`showForm(options)` → Returns Promise**
+- `form` (Form): The form specification object
+- `data` (FormValues, optional): Initial form field values
+- **Returns**: `Promise` - Resolves with form data or null if cancelled
+
+## Menu response forms
+
+For forms that open from a menu item, you can use menu responses. This is useful since you do not have access to the `@devvit/web/client` library from a menu item endpoint.
+
+**Configure forms in devvit.json:**
+ ```json title="devvit.json"
+ {
+ "forms": {
+ "nameForm": "/internal/form/name-submit",
+ "reviewForm": "/internal/form/review-submit"
+ }
+ }
+ ```
+
+ **Server endpoint that shows form via menu response:**
+
+
+
+
+ ```ts title="server/index.ts"
+ import type { MenuItemRequest, UiResponse } from '@devvit/web/shared';
+
+ type NameFormRequest = { name: string };
+ type ReviewFormRequest = { review: string };
+
+ // Menu action that triggers menu response form
+ app.post('/internal/menu/start-workflow', async (c) => {
+ const _input = await c.req.json();
+ // Server processing before showing form
+ const userData = await fetchUserData();
+
+ return c.json({
+ showForm: {
+ name: 'nameForm',
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'name',
+ label: 'Name',
+ },
+ ],
+ },
+ data: { name: userData.name } // Pre-populate from server
+ }
+ });
+ });
+
+ // Form submission handler that can chain to another form
+ app.post('/internal/form/name-submit', async (c) => {
+ const { name } = await c.req.json();
+
+ // Server processing
+ await saveUserName(name);
+
+ // Show next form in workflow
+ return c.json({
+ showForm: {
+ name: 'reviewForm',
+ form: {
+ fields: [
+ {
+ type: 'paragraph',
+ name: 'review',
+ label: 'How was your experience?',
+ },
+ ],
+ }
+ }
+ });
+ });
+
+ app.post('/internal/form/review-submit', async (c) => {
+ const { review } = await c.req.json();
+
+ await saveReview(review);
+
+ return c.json({
+ showToast: 'Thank you for your feedback!'
+ });
+ });
+ ```
+
+
+
+
+ ```ts title="server/index.ts"
+ import type { MenuItemRequest, UiResponse } from '@devvit/web/shared';
+
+ type NameFormRequest = { name: string };
+ type ReviewFormRequest = { review: string };
+
+ // Menu action that triggers menu response form
+ router.post("/internal/menu/start-workflow", async (_req, res) => {
+ // Server processing before showing form
+ const userData = await fetchUserData();
+
+ res.json({
+ showForm: {
+ name: 'nameForm',
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'name',
+ label: 'Name',
+ },
+ ],
+ },
+ data: { name: userData.name } // Pre-populate from server
+ }
+ });
+ });
+
+ // Form submission handler that can chain to another form
+ router.post("/internal/form/name-submit", async (req, res) => {
+ const { name } = req.body;
+
+ // Server processing
+ await saveUserName(name);
+
+ // Show next form in workflow
+ res.json({
+ showForm: {
+ name: 'reviewForm',
+ form: {
+ fields: [
+ {
+ type: 'paragraph',
+ name: 'review',
+ label: 'How was your experience?',
+ },
+ ],
+ }
+ }
+ });
+ });
+
+ router.post("/internal/form/review-submit", async (req, res) => {
+ const { review } = req.body;
+
+ await saveReview(review);
+
+ res.json({
+ showToast: 'Thank you for your feedback!'
+ });
+ });
+ ```
+
+
+
+
+
+## Form object
+
+The form object enables you to customize the form container and the [list of form fields](#supported-fields-types) included.
+
+#### Usage
+
+```tsx
+const myForm = {
+ title: 'My form',
+ description: 'This is my form. There are many like it, but this one is mine.',
+ fields: [
+ {
+ type: 'string',
+ name: 'food',
+ label: 'What is your favorite food?',
+ },
+ {
+ type: 'string',
+ name: 'drink',
+ label: 'What is your favorite drink?',
+ },
+ ],
+ acceptLabel: 'Submit',
+ cancelLabel: 'Cancel',
+};
+```
+
+#### Supported properties
+
+| Property | Supported types | Description |
+| :------------ | :------------------- | :-------------------------------------------- |
+| `title` | `string` `undefined` | An optional title for the form |
+| `description` | `string` `undefined` | An optional description for the form |
+| `fields` | `FormField[]` | The fields that will be displayed in the form |
+| `acceptLabel` | `string` `undefined` | An optional label for the submit button |
+| `cancelLabel` | `string` `undefined` | An optional label for the cancel button |
+
+## Supported fields types
+
+The following field types are supported: [String](#string), [Select](#select), [Paragraph](#paragraph), [Number](#number), [Boolean](#boolean), [Image](#image), and [Group](#group).
+
+### String
+
+A single-line text input.
+
+
+
+#### Usage
+
+```ts
+const stringField = {
+ type: 'string',
+ name: 'title',
+ label: 'Tournament title',
+};
+```
+
+#### Properties
+
+| Property | Supported types | Description |
+| :------------- | :-------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `type` | `string` | The desired field type. |
+| `name` | `string` | The name of the field. This will be used as the key in the `values` object when the form is submitted. |
+| `label` | `string` | The label of the field. This will be displayed to the user. |
+| `helpText` | `string` `undefined` | An optional help text that will be displayed below the field. |
+| `required` | `boolean` `undefined` | If true the field will be required and the user will not be able to submit the form without filling it in. Defaults to `false`. |
+| `disabled` | `boolean` `undefined` | If true the field will be disabled. Defaults to `false`. |
+| `defaultValue` | ` ValueType` `undefined` | The default value of the field. |
+| `scope` | [`SettingScopeType`](/api/public-api/type-aliases/SettingScopeType) `undefined` | This indicates whether the field (setting) is an app level or install level setting. App setting values can be used by any installation. `undefined` by default. |
+| `placeholder` | `string` `undefined` | Placeholder text for display before a value is present. |
+| `isSecret` | `boolean` `undefined` | Makes the form field secret. |
+
+### Select
+
+A dropdown menu with predefined options.
+
+
+
+#### Usage
+
+```ts
+const selectField = {
+ type: 'select',
+ name: 'interval',
+ label: 'Update the leaderboard',
+ options: [
+ { label: 'Hourly', value: 'hourly' },
+ { label: 'Daily', value: 'daily' },
+ { label: 'Weekly', value: 'weekly' },
+ { label: 'Monthly', value: 'monthly' },
+ { label: 'Yearly', value: 'yearly' },
+ ],
+};
+```
+
+#### Properties
+
+| Property | Supported types | Description |
+| :------------- | :-------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `type` | `string` | The desired field type. |
+| `name` | `string` | The name of the field. This will be used as the key in the `values` object when the form is submitted. |
+| `label` | `string` | The label of the field. This will be displayed to the user. |
+| `options` | `FieldConfig_Selection_Item[]` | The list of options available. |
+| `helpText` | `string` `undefined` | An optional help text that will be displayed below the field. |
+| `required` | `boolean` `undefined` | If true the field will be required and the user will not be able to submit the form without filling it in. Defaults to `false`. |
+| `disabled` | `boolean` `undefined` | If true the field will be disabled. Defaults to `false`. |
+| `defaultValue` | ` string[]` `undefined` | The default value of the field. Note that the default value is wrapped in an array to support multiple selected values. |
+| `scope` | [`SettingScopeType`](/api/public-api/type-aliases/SettingScopeType) `undefined` | This indicates whether the field (setting) is an app level or install level setting. App setting values can be used by any installation. `undefined` by default. |
+| `multiSelect` | `boolean` `undefined` | Enables users to select more than 1 item from the set. |
+
+### Paragraph
+
+A multi-line text input for longer responses.
+
+
+
+#### Usage
+
+```ts
+const paragraphField = {
+ type: 'paragraph',
+ name: 'description',
+ label: 'Description',
+};
+```
+
+#### Properties
+
+| Property | Supported types | Description |
+| :------------- | :-------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `type` | `string` | The desired field type. |
+| `name` | `string` | The name of the field. This will be used as the key in the `values` object when the form is submitted. |
+| `label` | `string` | The label of the field. This will be displayed to the user. |
+| `helpText` | `string` `undefined` | An optional help text that will be displayed below the field. |
+| `required` | `boolean` `undefined` | If true the field will be required and the user will not be able to submit the form without filling it in. Defaults to `false`. |
+| `disabled` | `boolean` `undefined` | If true the field will be disabled. Defaults to `false`. |
+| `defaultValue` | ` ValueType` `undefined` | The default value of the field. |
+| `scope` | [`SettingScopeType`](/api/public-api/type-aliases/SettingScopeType) `undefined` | This indicates whether the field (setting) is an app level or install level setting. App setting values can be used by any installation. `undefined` by default. |
+| `placeholder` | `string` `undefined` | Placeholder text for display before a value is present. |
+| `lineHeight` | `number` `undefined` | Sets the field height by number of lines. |
+
+### Number
+
+An input for numerical values.
+
+
+
+#### Usage
+
+```ts
+const numberField = {
+ type: 'number',
+ name: 'tokens',
+ label: 'Token balance',
+};
+```
+
+#### Properties
+
+| Property | Supported types | Description |
+| :------------- | :-------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `type` | `string` | The desired field type. |
+| `name` | `string` | The name of the field. This will be used as the key in the `values` object when the form is submitted. |
+| `label` | `string` | The label of the field. This will be displayed to the user. |
+| `helpText` | `string` `undefined` | An optional help text that will be displayed below the field. |
+| `required` | `boolean` `undefined` | If true the field will be required and the user will not be able to submit the form without filling it in. Defaults to `false`. |
+| `disabled` | `boolean` `undefined` | If true the field will be disabled. Defaults to `false`. |
+| `defaultValue` | ` ValueType` `undefined` | The default value of the field. |
+| `scope` | [`SettingScopeType`](/api/public-api/type-aliases/SettingScopeType) `undefined` | This indicates whether the field (setting) is an app level or install level setting. App setting values can be used by any installation. `undefined` by default. |
+
+### Boolean
+
+A yes/no or true/false type input.
+
+
+
+#### Usage
+
+```ts
+const booleanField = {
+ type: 'boolean',
+ name: 'enable',
+ label: 'Enable the event',
+};
+```
+
+#### Properties
+
+| Property | Supported types | Description |
+| :------------- | :-------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `type` | `string` | The desired field type. |
+| `name` | `string` | The name of the field. This will be used as the key in the `values` object when the form is submitted. |
+| `label` | `string` | The label of the field. This will be displayed to the user. |
+| `helpText` | `string` `undefined` | An optional help text that will be displayed below the field. |
+| `disabled` | `boolean` `undefined` | If true the field will be disabled. Defaults to `false`. |
+| `defaultValue` | ` ValueType` `undefined` | The default value of the field. |
+| `scope` | [`SettingScopeType`](/api/public-api/type-aliases/SettingScopeType) `undefined` | This indicates whether the field (setting) is an app level or install level setting. App setting values can be used by any installation. `undefined` by default. |
+
+### Image
+
+An image upload field.
+
+
+
+#### Usage
+
+```ts
+const imageField = {
+ type: 'image', // This tells the form to expect an image
+ name: 'myImage',
+ label: 'Image goes here',
+ required: true,
+};
+```
+
+#### Properties
+
+| Property | Supported types | Description |
+| :------------ | :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `type` | `string` | The desired field type. |
+| `name` | `string` | The name of the field. This will be used as the key in the `values` object when the form is submitted. |
+| `label` | `string` | The label of the field. This will be displayed to the user. |
+| `helpText` | `string` `undefined` | An optional help text that will be displayed below the field. |
+| `required` | `boolean` `undefined` | If true the field will be required and the user will not be able to submit the form without filling it in. Defaults to `false`. |
+| `disabled` | `boolean` `undefined` | If true the field will be disabled. Defaults to `false`. |
+| `scope` | [`SettingScopeType`](/api/public-api/type-aliases/SettingScopeType) `undefined` | This indicates whether the field (setting) is an app level or install level setting. App setting values can be used by any installation. `undefined` by default. |
+| `placeholder` | `string` `undefined` | Placeholder text for display before a value is present. |
+| `isSecret` | `boolean` `undefined` | Makes the form field secret. |
+
+#### Notes
+
+- The formats supported are PNG, JPEG, WEBP, and GIF.
+- The maximum file size allowed is 20 MB.
+- When uploading a WEBP image, it will be converted to JPEG. As such, the Reddit URL returned points to a JPEG image.
+
+### Group
+
+A collection of related fields that allows for better readability.
+
+#### Usage
+
+```ts
+const groupField = {
+ type: 'group',
+ label: 'This is a group of input fields',
+ fields: [
+ {
+ type: 'paragraph',
+ name: 'description',
+ label: 'How would you describe what happened?',
+ },
+ {
+ type: 'number',
+ name: 'score',
+ label: 'How would you rate your meal on a scale from 1 to 10?',
+ },
+ ],
+};
+```
+
+#### Properties
+
+| Property | Supported types | Description |
+| :--------- | :------------------- | :------------------------------------------------------------ |
+| `type` | `string` | The desired field type. |
+| `label` | `string` | The label of the group that will be displayed to the user. |
+| `fields` | `FormField[]` | The fields that will be displayed in the group. |
+| `helpText` | `string` `undefined` | An optional help text that will be displayed below the group. |
+
+## Examples
+
+Below is a collection of common use cases and patterns.
+
+### Dynamic forms
+
+**Client-side approach:**
+ ```ts title="client/index.ts"
+ import { showForm } from '@devvit/web/client';
+
+ // Get user data and show form with dynamic default values
+ const user = await reddit.getCurrentUser();
+
+ const result = await showForm({
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'username',
+ label: 'Username',
+ },
+ ],
+ },
+ data: {
+ username: user?.username || ''
+ }
+ });
+
+ if (result) {
+ // Handle the form result
+ console.log(`Hello ${result.username}`);
+ }
+ ```
+
+ **Server-side approach:**
+ ```json title="devvit.json"
+ {
+ "forms": {
+ "dynamicForm": "/internal/form/dynamic-submit"
+ }
+ }
+ ```
+
+
+
+
+ ```ts title="server/index.ts"
+ import type { MenuItemRequest, UiResponse } from '@devvit/web/shared';
+
+ type DynamicFormRequest = { username: string };
+
+ // Endpoint that shows form with dynamic data
+ app.post('/internal/menu/show-dynamic-form', async (c) => {
+ const _input = await c.req.json();
+ const user = await reddit.getCurrentUser();
+
+ return c.json({
+ showForm: {
+ name: 'dynamicForm',
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'username',
+ label: 'Username',
+ },
+ ],
+ },
+ data: {
+ username: user?.username || ''
+ }
+ }
+ });
+ });
+
+ // Form submission handler
+ app.post('/internal/form/dynamic-submit', async (c) => {
+ const { username } = await c.req.json();
+
+ return c.json({
+ showToast: `Hello ${username}`
+ });
+ });
+ ```
+
+
+
+
+ ```ts title="server/index.ts"
+ import type { MenuItemRequest, UiResponse } from '@devvit/web/shared';
+
+ type DynamicFormRequest = { username: string };
+
+ // Endpoint that shows form with dynamic data
+ router.post("/internal/menu/show-dynamic-form", async (_req, res) => {
+ const user = await reddit.getCurrentUser();
+
+ res.json({
+ showForm: {
+ name: 'dynamicForm',
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'username',
+ label: 'Username',
+ },
+ ],
+ },
+ data: {
+ username: user?.username || ''
+ }
+ }
+ });
+ });
+
+ // Form submission handler
+ router.post("/internal/form/dynamic-submit", async (req, res) => {
+ const { username } = req.body;
+
+ res.json({
+ showToast: `Hello ${username}`
+ });
+ });
+ ```
+
+
+
+
+### Multi-step forms
+
+**Client-side approach (Promise chaining):**
+ ```ts title="client/index.ts"
+ import { showForm } from '@devvit/web/client';
+
+ async function multiStepForm() {
+ // Step 1: Get name
+ const step1Result = await showForm({
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'name',
+ label: "What's your name?",
+ required: true,
+ },
+ ],
+ }
+ });
+
+ if (!step1Result) return; // User cancelled
+
+ // Step 2: Get food preference
+ const step2Result = await showForm({
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'food',
+ label: "What's your favorite food?",
+ required: true,
+ },
+ ],
+ },
+ data: { name: step1Result.name } // Pass data from previous step
+ });
+
+ if (!step2Result) return; // User cancelled
+
+ // Step 3: Get drink preference
+ const step3Result = await showForm({
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'drink',
+ label: "What's your favorite drink?",
+ required: true,
+ },
+ ],
+ },
+ data: {
+ name: step1Result.name,
+ food: step2Result.food
+ }
+ });
+
+ if (step3Result) {
+ // All steps completed - save or process data
+ const finalData = {
+ ...step1Result,
+ ...step2Result,
+ ...step3Result
+ };
+
+ console.log(`Thanks ${finalData.name}! You like ${finalData.food} and ${finalData.drink}.`);
+ }
+ }
+ ```
+
+ **Server-side approach (Separate endpoints):**
+ ```json title="devvit.json"
+ {
+ "forms": {
+ "step1Form": "/internal/form/step1-submit",
+ "step2Form": "/internal/form/step2-submit",
+ "step3Form": "/internal/form/step3-submit"
+ }
+ }
+ ```
+
+
+
+
+ ```ts title="server/index.ts"
+ import type { UiResponse } from '@devvit/web/shared';
+
+ type Step1FormRequest = { name: string };
+ type Step2FormRequest = { name: string; food: string };
+ type Step3FormRequest = { name: string; food: string; drink: string };
+
+ // Step 1: Name form
+ app.post('/internal/form/step1-submit', async (c) => {
+ const { name } = await c.req.json();
+
+ return c.json({
+ showForm: {
+ name: 'step2Form',
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'food',
+ label: "What's your favorite food?",
+ required: true,
+ },
+ ],
+ },
+ data: { name } // Pass data to next step
+ }
+ });
+ });
+
+ // Step 2: Food form
+ app.post('/internal/form/step2-submit', async (c) => {
+ const { name, food } = await c.req.json();
+
+ return c.json({
+ showForm: {
+ name: 'step3Form',
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'drink',
+ label: "What's your favorite drink?",
+ required: true,
+ },
+ ],
+ },
+ data: { name, food } // Pass accumulated data
+ }
+ });
+ });
+
+ // Step 3: Final form
+ app.post('/internal/form/step3-submit', async (c) => {
+ const { name, food, drink } = await c.req.json();
+
+ return c.json({
+ showToast: `Thanks ${name}! You like ${food} and ${drink}.`
+ });
+ });
+ ```
+
+
+
+
+ ```ts title="server/index.ts"
+ import type { UiResponse } from '@devvit/web/shared';
+
+ type Step1FormRequest = { name: string };
+ type Step2FormRequest = { name: string; food: string };
+ type Step3FormRequest = { name: string; food: string; drink: string };
+
+ // Step 1: Name form
+ router.post("/internal/form/step1-submit", async (req, res) => {
+ const { name } = req.body;
+
+ res.json({
+ showForm: {
+ name: 'step2Form',
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'food',
+ label: "What's your favorite food?",
+ required: true,
+ },
+ ],
+ },
+ data: { name } // Pass data to next step
+ }
+ });
+ });
+
+ // Step 2: Food form
+ router.post("/internal/form/step2-submit", async (req, res) => {
+ const { name, food } = req.body;
+
+ res.json({
+ showForm: {
+ name: 'step3Form',
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'drink',
+ label: "What's your favorite drink?",
+ required: true,
+ },
+ ],
+ },
+ data: { name, food } // Pass accumulated data
+ }
+ });
+ });
+
+ // Step 3: Final form
+ router.post("/internal/form/step3-submit", async (req, res) => {
+ const { name, food, drink } = req.body;
+
+ res.json({
+ showToast: `Thanks ${name}! You like ${food} and ${drink}.`
+ });
+ });
+ ```
+
+
+
+
+### One of everything
+
+This example includes one of each of the [supported field types](#supported-fields-types).
+
+**Client-side approach:**
+ ```ts title="client/index.ts"
+ import { showForm } from '@devvit/web/client';
+
+ const result = await showForm({
+ form: {
+ title: 'My favorites',
+ description: 'Tell us about your favorite food!',
+ fields: [
+ {
+ type: 'string',
+ name: 'food',
+ label: 'What is your favorite food?',
+ helpText: 'Must be edible',
+ required: true,
+ },
+ {
+ label: 'About that food',
+ type: 'group',
+ fields: [
+ {
+ type: 'number',
+ name: 'times',
+ label: 'How many times a week do you eat it?',
+ defaultValue: 1,
+ },
+ {
+ type: 'paragraph',
+ name: 'what',
+ label: 'What makes it your favorite?',
+ },
+ {
+ type: 'select',
+ name: 'healthy',
+ label: 'Is it healthy?',
+ options: [
+ { label: 'Yes', value: 'yes' },
+ { label: 'No', value: 'no' },
+ { label: 'Maybe', value: 'maybe' },
+ ],
+ defaultValue: ['maybe'],
+ },
+ ],
+ },
+ {
+ type: 'boolean',
+ name: 'again',
+ label: 'Can we ask again?',
+ },
+ ],
+ acceptLabel: 'Submit',
+ cancelLabel: 'Cancel',
+ }
+ });
+
+ if (result) {
+ console.log('Form values:', result);
+ // Handle form submission
+ }
+ ```
+
+ **Server-side approach:**
+ ```json title="devvit.json"
+ {
+ "forms": {
+ "everythingForm": "/internal/form/everything-submit"
+ }
+ }
+ ```
+
+
+
+
+ ```ts title="server/index.ts"
+ import type { MenuItemRequest, UiResponse } from '@devvit/web/shared';
+
+ type EverythingFormRequest = {
+ food: string;
+ times?: number;
+ what?: string;
+ healthy?: string[];
+ again?: boolean;
+ };
+
+ app.post('/internal/form/everything-submit', async (c) => {
+ const formValues = await c.req.json();
+ console.log('Form values:', formValues);
+
+ return c.json({
+ showToast: 'Thanks!'
+ });
+ });
+
+ // Example showing the form
+ app.post('/internal/menu/show-everything-form', async (c) => {
+ const _input = await c.req.json();
+ return c.json({
+ showForm: {
+ name: 'everythingForm',
+ form: {
+ title: 'My favorites',
+ description: 'Tell us about your favorite food!',
+ fields: [
+ {
+ type: 'string',
+ name: 'food',
+ label: 'What is your favorite food?',
+ helpText: 'Must be edible',
+ required: true,
+ },
+ {
+ label: 'About that food',
+ type: 'group',
+ fields: [
+ {
+ type: 'number',
+ name: 'times',
+ label: 'How many times a week do you eat it?',
+ defaultValue: 1,
+ },
+ {
+ type: 'paragraph',
+ name: 'what',
+ label: 'What makes it your favorite?',
+ },
+ {
+ type: 'select',
+ name: 'healthy',
+ label: 'Is it healthy?',
+ options: [
+ { label: 'Yes', value: 'yes' },
+ { label: 'No', value: 'no' },
+ { label: 'Maybe', value: 'maybe' },
+ ],
+ defaultValue: ['maybe'],
+ },
+ ],
+ },
+ {
+ type: 'boolean',
+ name: 'again',
+ label: 'Can we ask again?',
+ },
+ ],
+ acceptLabel: 'Submit',
+ cancelLabel: 'Cancel',
+ }
+ }
+ });
+ });
+ ```
+
+
+
+
+ ```ts title="server/index.ts"
+ import type { MenuItemRequest, UiResponse } from '@devvit/web/shared';
+
+ type EverythingFormRequest = {
+ food: string;
+ times?: number;
+ what?: string;
+ healthy?: string[];
+ again?: boolean;
+ };
+
+ router.post("/internal/form/everything-submit", async (req, res) => {
+ console.log('Form values:', req.body);
+
+ res.json({
+ showToast: 'Thanks!'
+ });
+ });
+
+ // Example showing the form
+ router.post("/internal/menu/show-everything-form", async (_req, res) => {
+ res.json({
+ showForm: {
+ name: 'everythingForm',
+ form: {
+ title: 'My favorites',
+ description: 'Tell us about your favorite food!',
+ fields: [
+ {
+ type: 'string',
+ name: 'food',
+ label: 'What is your favorite food?',
+ helpText: 'Must be edible',
+ required: true,
+ },
+ {
+ label: 'About that food',
+ type: 'group',
+ fields: [
+ {
+ type: 'number',
+ name: 'times',
+ label: 'How many times a week do you eat it?',
+ defaultValue: 1,
+ },
+ {
+ type: 'paragraph',
+ name: 'what',
+ label: 'What makes it your favorite?',
+ },
+ {
+ type: 'select',
+ name: 'healthy',
+ label: 'Is it healthy?',
+ options: [
+ { label: 'Yes', value: 'yes' },
+ { label: 'No', value: 'no' },
+ { label: 'Maybe', value: 'maybe' },
+ ],
+ defaultValue: ['maybe'],
+ },
+ ],
+ },
+ {
+ type: 'boolean',
+ name: 'again',
+ label: 'Can we ask again?',
+ },
+ ],
+ acceptLabel: 'Submit',
+ cancelLabel: 'Cancel',
+ }
+ }
+ });
+ });
+ ```
+
+
+
+
+### Image uploads
+
+**Client-side approach:**
+ ```ts title="client/index.ts"
+ import { showForm } from '@devvit/web/client';
+
+ const result = await showForm({
+ form: {
+ title: 'Upload an image!',
+ fields: [
+ {
+ name: 'myImage',
+ type: 'image', // This tells the form to expect an image
+ label: 'Image goes here',
+ required: true,
+ },
+ ],
+ }
+ });
+
+ if (result) {
+ const { myImage } = result;
+ // returns an i.redd.it URL
+ console.log('Image uploaded:', myImage);
+
+ // Process the image further
+ await fetch('/api/process-image', {
+ method: 'POST',
+ body: JSON.stringify({ imageUrl: myImage })
+ });
+ }
+ ```
+
+ **Server-side approach:**
+ ```json title="devvit.json"
+ {
+ "forms": {
+ "imageForm": "/internal/form/image-submit"
+ }
+ }
+ ```
+
+
+
+
+ ```ts title="server/index.ts"
+ import type { UiResponse } from '@devvit/web/shared';
+
+ type ImageFormRequest = { myImage: string };
+
+ app.post('/internal/form/image-submit', async (c) => {
+ const { myImage } = await c.req.json();
+ // Store the mediaUrl in Redis and render it via an tag on the client, or send to external service to modify
+ console.log('Image uploaded:', myImage);
+
+ return c.json({
+ showToast: 'Image uploaded successfully!'
+ });
+ });
+ ```
+
+
+
+
+ ```ts title="server/index.ts"
+ import type { UiResponse } from '@devvit/web/shared';
+
+ type ImageFormRequest = { myImage: string };
+
+ router.post("/internal/form/image-submit", async (req, res) => {
+ const { myImage } = req.body;
+ // Store the mediaUrl in Redis and render it via an tag on the client, or send to external service to modify
+ console.log('Image uploaded:', myImage);
+
+ res.json({
+ showToast: 'Image uploaded successfully!'
+ });
+ });
+ ```
+
+
+
diff --git a/versioned_docs/version-0.13/capabilities/client/menu-actions.mdx b/versioned_docs/version-0.13/capabilities/client/menu-actions.mdx
new file mode 100644
index 00000000..348944e8
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/client/menu-actions.mdx
@@ -0,0 +1,308 @@
+import Tabs from "@theme/Tabs";
+import TabItem from "@theme/TabItem";
+
+# Menu actions
+
+Add an item to the three dot menu for posts, comments, or subreddits. Menu actions can perform immediate client effects or trigger server processing followed by client effects.
+
+
+
+## Basic menu actions
+
+**For most menu actions, use direct client effects.** These provide immediate responses and are perfect for simple actions that don't require server processing.
+
+**Menu items defined in devvit.json:**
+
+```json title="devvit.json"
+{
+ "menu": {
+ "items": [
+ {
+ "description": "Show user information",
+ "endpoint": "/internal/menu/show-info",
+ "location": "post"
+ }
+ ]
+ }
+}
+```
+
+**Simple endpoint with direct client effects:**
+
+
+
+
+```ts title="server/index.ts"
+import type { MenuItemRequest, UiResponse } from "@devvit/web/shared";
+
+app.post("/internal/menu/show-info", async (c) => {
+ const _input = await c.req.json();
+ // Simple actions don't need server processing
+ return c.json({
+ showToast: "Menu action clicked!",
+ });
+});
+```
+
+
+
+
+```ts title="server/index.ts"
+import type { MenuItemRequest, UiResponse } from "@devvit/web/shared";
+
+app.post(
+ "/internal/menu/show-info",
+ async (_req, res) => {
+ // Simple actions don't need server processing
+ res.json({
+ showToast: "Menu action clicked!",
+ });
+ },
+);
+```
+
+
+
+
+## Supported contexts
+
+You can decide where the menu action shows up by specifying the location property.
+
+| Property | Values | Description |
+| ---------------------- | ------------------------------ | ------------------------------------------------------------------------------- |
+| location (required) | `comment`, `post`, `subreddit` | Determines where the menu action appears. |
+| postFilter (optional) | `currentApp` | Shows the action created by your app. The default is no filtering. |
+| forUserType (optional) | `moderator` | Specifies the user types that can see the menu action. The default is everyone. |
+
+:::note
+For moderator permission security, when opening a form from a menu action with `forUserType: moderator`, the user initiating the action must complete all actions within 10 minutes.
+:::
+
+## Menu responses
+
+In Devvit Web, your menu item should respond with a client side effect to give feedback to users. This is available as a UIResponse as you do not have access to the `@devvit/web/client` library from your server endpoints.
+
+**Menu items with server processing:**
+
+```json title="devvit.json"
+{
+ "menu": {
+ "items": [
+ {
+ "label": "Process and validate data",
+ "endpoint": "/internal/menu/complex-action",
+ "forUserType": "moderator",
+ "location": "subreddit"
+ }
+ ]
+ }
+}
+````
+
+
+
+
+```ts title="server/index.ts"
+import type { MenuItemRequest, UiResponse } from "@devvit/web/shared";
+
+app.post("/internal/menu/complex-action", async (c) => {
+ const _input = await c.req.json();
+ try {
+ // Perform server-side processing
+ const userData = await validateAndProcessData();
+
+ // Show form with server-fetched data
+ return c.json({
+ showForm: {
+ name: "processForm",
+ form: {
+ fields: [
+ {
+ type: "string",
+ name: "processedData",
+ label: "Processed Data",
+ },
+ ],
+ },
+ data: { processedData: userData.processed },
+ },
+ });
+ } catch (error) {
+ return c.json({
+ showToast: "Processing failed. Please try again.",
+ });
+ }
+});
+```
+
+
+
+
+```ts title="server/index.ts"
+import type { MenuItemRequest, UiResponse } from "@devvit/web/shared";
+
+app.post(
+ "/internal/menu/complex-action",
+ async (_req, res) => {
+ try {
+ // Perform server-side processing
+ const userData = await validateAndProcessData();
+
+ // Show form with server-fetched data
+ res.json({
+ showForm: {
+ name: "processForm",
+ form: {
+ fields: [
+ {
+ type: "string",
+ name: "processedData",
+ label: "Processed Data",
+ },
+ ],
+ },
+ data: { processedData: userData.processed },
+ },
+ });
+ } catch (error) {
+ res.json({
+ showToast: "Processing failed. Please try again.",
+ });
+ }
+ },
+);
+```
+
+
+
+
+### Menu response examples
+
+Menu responses can trigger any client effect after server processing:
+
+**Show toast after processing:**
+
+
+
+
+```ts
+return c.json({
+ showToast: {
+ text: "Processing completed!",
+ appearance: "success",
+ },
+});
+```
+
+
+
+
+```ts
+res.json({
+ showToast: {
+ text: "Processing completed!",
+ appearance: "success",
+ },
+});
+```
+
+
+
+
+**Navigate after data fetching:**
+
+
+
+
+```ts
+const post = await reddit.getPostById(postId);
+return c.json({
+ navigateTo: post,
+});
+```
+
+
+
+
+```ts
+const post = await reddit.getPostById(postId);
+res.json({
+ navigateTo: post,
+});
+```
+
+
+
+
+**Chain multiple forms:**
+
+
+
+
+```ts
+// First form response leads to second form
+return c.json({
+ showForm: {
+ name: 'secondForm',
+ form: { fields: [...] },
+ data: { fromStep1: processedData }
+ }
+});
+```
+
+
+
+
+```ts
+// First form response leads to second form
+res.json({
+ showForm: {
+ name: 'secondForm',
+ form: { fields: [...] },
+ data: { fromStep1: processedData }
+ }
+});
+```
+
+
+
+
+## Limitations
+
+- A sort order of actions in the context menu can't be specified.
+- The context, name, and description fields do not support dynamic logic.
diff --git a/versioned_docs/version-0.13/capabilities/client/navigation.mdx b/versioned_docs/version-0.13/capabilities/client/navigation.mdx
new file mode 100644
index 00000000..0a2cf3cb
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/client/navigation.mdx
@@ -0,0 +1,53 @@
+# Navigation
+
+Use navigation functions to redirect users to Reddit content or external websites in response to user actions, such as button clicks. You can redirect to a `url` string or to objects such as [`Subreddit`](/api/redditapi/models/classes/Subreddit.md), [`Post`](/api/redditapi/models/classes/Post.md), or [`Comment`](/api/redditapi/models/classes/Comment.md).
+
+**For most navigation interactions, use the direct client library functions.** These provide immediate navigation and are perfect for user interactions within your app components.
+
+:::warning
+When linking to Reddit content, the navigation function requires the app account to have access to the content. If the app account does not have access, the redirect will fail.
+:::
+
+## Basic navigation
+
+```ts title="client/index.ts"
+import { navigateTo } from '@devvit/web/client';
+
+// Navigate to external URLs
+navigateTo('https://www.youtube.com/watch?v=dQw4w9WgXcQ');
+
+// Navigate to Reddit URLs
+navigateTo('https://www.reddit.com/r/movies/comments/tzxev3/');
+
+// Navigate to Reddit objects
+async function goToPost() {
+ const post = await fetch('/api/getPost').then(r => r.json());
+ navigateTo(post);
+}
+
+// Use in button handlers or user interactions
+function handleNavigateClick() {
+ navigateTo('https://www.reddit.com/r/webdev');
+}
+```
+
+### Parameters
+
+**`navigateTo(target)`**
+
+- `target`: Either a URL string or a Reddit object (Subreddit, Post, Comment)
+
+:::tip Menu response navigation
+For navigation in menu response workflows (when you need server processing before navigation), see the [Menu Actions](./menu-actions.mdx) documentation.
+:::
+
+## External URLs
+
+Users see a confirmation dialog before going to external URLs.
+
+
+
+## Limitations
+
+- `url` must be http/https
+- `url` must have a domain
diff --git a/versioned_docs/version-0.13/capabilities/client/overview.mdx b/versioned_docs/version-0.13/capabilities/client/overview.mdx
new file mode 100644
index 00000000..c81dc705
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/client/overview.mdx
@@ -0,0 +1,65 @@
+# Client Overview
+
+Client-side effects enable your Devvit app to provide interactive feedback and navigation to users. These effects include showing toasts, displaying forms, navigating to different pages, and more.
+
+Import client functions from `@devvit/web/client`:
+
+```ts title="client/index.ts"
+import { showToast, showForm, navigateTo } from '@devvit/web/client';
+
+// Show a toast notification
+showToast('Hello from Devvit Web!');
+
+// Navigate to a URL
+navigateTo('https://www.reddit.com/r/webdev');
+
+// Show a form and handle response
+const result = await showForm({
+ form: {
+ fields: [
+ {
+ type: 'string',
+ name: 'username',
+ label: 'Username'
+ }
+ ]
+ }
+});
+
+if (result) {
+ console.log('Form submitted:', result.username);
+}
+```
+
+## Available client effects
+
+| Effect | Description | API |
+|--------|-------------|-----|
+| **Toast** | Show temporary notification messages | `showToast()` |
+| **Form** | Display interactive forms with promise-based responses | `showForm()` |
+| **Navigation** | Redirect to Reddit content or external URLs | `navigateTo()` |
+
+:::note When to use client library functions
+You should only use client library functions in response to a user-initiated action.
+:::
+
+## Menu responses
+
+Menu items can respond with client effects after server processing.
+
+Menu responses allow you to:
+- Process data on the server before showing client effects
+- Chain multiple forms together in complex workflows
+- Validate user permissions before allowing actions
+- Fetch external data to populate forms or display results
+
+For complete details and examples, see the [Menu Actions](./menu-actions.mdx) documentation.
+
+## Next steps
+
+Explore the specific documentation for each client effect:
+
+- [Toasts](./toasts.mdx) - Temporary notification messages
+- [Forms](./forms.mdx) - Interactive user input
+- [Navigation](./navigation.mdx) - Redirecting users
+- [Realtime](../realtime/overview.md) - Live updates and communication
diff --git a/versioned_docs/version-0.13/capabilities/client/toasts.mdx b/versioned_docs/version-0.13/capabilities/client/toasts.mdx
new file mode 100644
index 00000000..a0ed6194
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/client/toasts.mdx
@@ -0,0 +1,71 @@
+# Toasts
+
+Display temporary notification messages to users at the bottom of the screen.
+
+## Overview
+
+Toasts are brief, non-intrusive messages that appear temporarily at the bottom of the screen to provide feedback to users about their actions. They automatically disappear after a few seconds and are ideal for confirming successful operations or displaying status updates.
+
+**For most toast interactions, use the direct client library functions.** These provide immediate feedback and are perfect for user interactions within your app components.
+
+:::note
+Toasts will not work from scheduled jobs or triggers.
+:::
+
+## Toast appearance types
+
+| Appearance | Description |
+| ---------- | --------------------------------------------------------- |
+| `neutral` | Default gray appearance for general notifications |
+| `success` | Green appearance for successful operations |
+
+## Basic toast usage
+
+```ts
+import { showToast } from '@devvit/web/client';
+
+// Simple text toast
+showToast('Operation completed successfully!');
+
+// Toast with custom appearance
+showToast({
+ text: 'Data saved successfully!',
+ appearance: 'success', // 'neutral' | 'success'
+});
+
+// Use in button handlers or user interactions
+function handleButtonClick() {
+ try {
+ // Perform some operation
+ processUserData();
+
+ showToast({
+ text: 'Your data has been processed!',
+ appearance: 'success'
+ });
+ } catch (error) {
+ showToast('Something went wrong. Please try again.');
+ }
+}
+```
+
+### Parameters
+
+**`showToast(textOrToast)`**
+
+- `textOrToast`: Either a string message or a `Toast` object
+
+**Toast Object Properties:**
+
+- `text` (string): The message to display
+- `appearance` (string, optional): The visual style (`'neutral'` | `'success'`). Defaults to `'neutral'`
+
+:::tip Menu response toasts
+For toasts in menu response workflows (when you need server processing before showing toasts), see the [Menu Actions](./menu-actions.mdx) documentation.
+:::
+
+## Best practices
+
+- Keep toast messages concise and clear
+- Avoid showing multiple toasts in quick succession
+- Don't rely on toasts for critical information that users must see
diff --git a/versioned_docs/version-0.13/capabilities/creating_custom_post.md b/versioned_docs/version-0.13/capabilities/creating_custom_post.md
new file mode 100644
index 00000000..66ef675b
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/creating_custom_post.md
@@ -0,0 +1,124 @@
+# Creating a Custom Post
+
+Redditors interact with your app through custom posts. To create a custom post, you’ll define the entry points in `devvit.json,` then use `submitCustomPost` to create a post that references one of those entry points.
+
+## **How it Works**
+
+Each key in the `entrypoints` object (e.g. "default", "game") maps to an HTML file in your build output. When you call `submitCustomPost`, the entry parameter references one of these keys.
+
+```
+// devvit.json default template
+...
+"name": "test-custom-post",
+ "post": {
+ "dir": "dist/client",
+ "entrypoints": {
+ "default": {
+ "entry": "splash.html"
+ },
+ "game": {
+ "entry": "game.html"
+ }
+ }
+ }
+...
+```
+
+```ts
+import { reddit } from '@devvit/web/server';
+
+export const createPost = async () => {
+ return await reddit.submitCustomPost({
+ title: 'Example title for post',
+ entry: 'default' // default
+ });
+};
+
+```
+
+`submitCustomPost` accepts the following optional parameters:
+
+| Parameter | Description |
+| :---- | :---- |
+| `entry` | Key of the entrypoint defined in `devvit.json` |
+| `postData` | [Updates post data after creation](../capabilities/server/post-data) |
+| `textFallback` | [Specifies alternative text content](../capabilities/server/text_fallback) |
+| `userGeneratedContent` | [Enables user-generated content](../capabilities/server/userActions) |
+| `styles` | Controls post appearance in the Reddit UI. See [Custom Post Styles](#custom-post-styles) |
+
+## **Custom Post Styles**
+
+Custom post styles let you control how a custom post looks in the Reddit UI, separate from the content inside your webview. You can:
+
+* Set the **light mode or dark mode background color** shown while the iframe loads
+* Choose the **post height** (for example, `“REGULAR”` or `“TALL”`) to control how much vertical space the post takes in the feed.
+* Provide a **share image URL** that’s used for link previews when the post is shared outside Reddit.
+
+All style fields are optional. If you don’t set them, Reddit’s default settings apply.
+
+### Properties
+
+| Field | Type | Description |
+| :---- | :---- | :---- |
+| `backgroundColor` | `string` (optional) | The **default background color** shown before the iframe content loads. Must be in **`#RRGGBBAA`** format (red, green, blue, alpha transparency). The value is **case-insensitive**. Defaults to **transparent** (`#00000000`). |
+| `backgroundColorDark` | `string` (optional) | The **dark mode background color** shown before the iframe content loads. Must be in **`#RRGGBBAA`** format with a leading `#`. Defaults to **transparent** (`#00000000`). |
+| `height` | `EntrypointHeight` enum (optional) | Post height. `TALL` \= 512px, `REGULAR` \= 320px. Width varies from \~288–880px depending on device and viewport. Defaults to `”TALL”`. |
+| `shareImageUrl` | `string` (optional) | The **preview image URL** used when the post is shared externally (for example, OpenGraph `og:image`). Note: The image **must** be hosted on [i.redd.it](http://i.redd.it) domain. Use the [media upload plugin](https://developers.reddit.com/docs/capabilities/server/media-uploads) to upload a custom image. This only works if your app is on a public subreddit. Defaults to Reddit’s generic share image: `https://i.redd.it/o0h58lzmax6a1.png`. |
+
+### Creating a custom post with styles
+
+Set your custom post styles when you create a custom post:
+
+```javascript
+await reddit.submitCustomPost({
+ "title": "Post with styles title",
+ "styles": {
+ "backgroundColor": "#FFFFFFFF", // white, fully opaque
+ "backgroundColorDark": "#000000FF", // black, fully opaque
+ "height": "TALL",
+ "shareImageUrl": "https://reddi.it/12345.png"
+ }
+})
+```
+
+Note: All style fields are optional.
+
+### Updating styles
+
+Use `post.setCustomPostStyles()` to update styles on an existing post. Only include the fields you want to change. Omitted fields remain unchanged.
+
+```javascript
+const post = await reddit.getPostById(context.postId);
+await post.setCustomPostStyles({
+ "styles": {
+ "shareImageUrl": "https://example.com/new-preview.png"
+ }
+});
+```
+
+Existing `background_color`, `background_color_dark`, and `height` values remain unchanged.
+
+### Reading styles
+
+Use `post.getCustomPostStyles()` or `reddit.getPostStyles(id)` to read the styles on an existing post. Settings that haven’t been set yet will give you their default values.
+
+```javascript
+const post = await reddit.getPostById(context.postId);
+const styles = await post.getCustomPostStyles();
+// Or, if you don't need the post object and want just the styles:
+const styles = await reddit.getPostStyles(context.postId);
+```
+
+# Best Practices
+
+* **Color format:** Always provide 8-digit hex with alpha: `#RRGGBBAA`.
+ * `RR`, `GG`, `BB`: 00–FF (0–255) color channels.
+ * `AA`: 00–FF alpha channel (`00` \= fully transparent, `FF` \= fully opaque).
+
+* **Transparency:** Use alpha (`AA`) to blend your app experience smoothly with Reddit backgrounds (for example, `#00000080` for semi-transparent black).
+
+* **Dark mode:** Always set `background_color_dark` when your iframe content has a dark theme so the pre-load state matches the final experience.
+
+* **Height:** Choose the `height` that best matches your UI. The platform will handle mapping that logical value to the correct pixel height for the client.
+
+* **Share image:** Must be hosted on [i.redd.it](http://i.redd.it) (use the [media upload plugin](https://developers.reddit.com/docs/capabilities/server/media-uploads)) and ensure the asset meets typical OpenGraph sizing and aspect-ratio expectations so it renders cleanly across platforms. This only works if your app is on a public subreddit.
diff --git a/versioned_docs/version-0.13/capabilities/devvit-web/devvit_web_configuration.md b/versioned_docs/version-0.13/capabilities/devvit-web/devvit_web_configuration.md
new file mode 100644
index 00000000..57d71804
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/devvit-web/devvit_web_configuration.md
@@ -0,0 +1,400 @@
+# Configure your app
+
+The devvit.json file serves as your app's configuration file. Use it to specify entry points, configure features like [event triggers](../server/triggers) and [scheduled actions](../server/scheduler.mdx), and enable app functionality such as [image uploads](../server/media-uploads.mdx). This page covers all available devvit.json configuration options. A complete devvit.json example file is provided [here](#complete-example).
+
+## devvit.json
+
+The `devvit.json` [schema](https://developers.reddit.com/schema/config-file.v1.json) is available and is self-documented.
+
+All configuration files should include a `$schema` property which many IDEs will use to make suggestions and present documentation:
+
+```json
+{
+ "$schema": "https://developers.reddit.com/schema/config-file.v1.json"
+}
+```
+
+## Required properties
+
+Your `devvit.json` must include:
+
+- **`name`** (required): App account name and Community URL slug. Must be 3-16 characters, start with a letter, and contain only lowercase letters, numbers, and hyphens.
+
+Additionally, you must include at least one of:
+
+- **`post`**: For web view apps
+- **`server`**: For Node.js server apps
+
+## Configuration sections
+
+### Core properties
+
+| Property | Type | Description | Required |
+| --------- | ------ | ------------------------------------------------------------------------- | ---------------- |
+| `name` | string | App account name and Community URL slug (3-16 chars, `^[a-z][a-z0-9-]*$`) | Yes |
+| `$schema` | string | Schema version for IDE support | No (recommended) |
+
+### App components
+
+| Property | Type | Description | Required |
+| -------- | ------ | ---------------------------------- | ------------------ |
+| `post` | object | Custom post/web view configuration | One of post/server |
+| `server` | object | Node.js server configuration | One of post/server |
+
+### Permissions & capabilities
+
+| Property | Type | Description | Required |
+| ----------------- | ------ | ------------------------------ | -------- |
+| `permissions` | object | What your app is allowed to do | No |
+| `media` | object | Static asset configuration | No |
+| `marketingAssets` | object | Assets for featuring your app | No |
+
+### Event handling
+
+| Property | Type | Description | Required |
+| ----------- | ------ | ---------------------------- | -------------------- |
+| `triggers` | object | Event trigger endpoints | No (requires server) |
+| `scheduler` | object | Scheduled task configuration | No |
+
+### UI & interaction
+
+| Property | Type | Description | Required |
+| -------- | ------ | ----------------------------------------- | -------- |
+| `menu` | object | Menu items in posts, comments, subreddits | No |
+| `forms` | object | Form submission endpoints | No |
+
+### Development
+
+| Property | Type | Description | Required |
+| --------- | ------ | --------------------------------------------------- | -------- |
+| `dev` | object | Development configuration | No |
+| `scripts` | object | Build commands run by the Devvit CLI (optional) | No |
+
+## Detailed configuration
+
+### Post configuration
+
+Configure web views for custom post types:
+
+```json
+{
+ "post": {
+ "dir": "public",
+ "entrypoints": {
+ "default": {
+ "entry": "index.html",
+ "height": "tall"
+ }
+ }
+ }
+}
+```
+
+**Properties:**
+
+- `dir` (string): Client directory for web view assets (default: `"public"`)
+- `entrypoints` (object): Map of named entrypoints for post rendering
+ - Must include a `"default"` entrypoint
+ - `entry` (string): HTML file path or `/api/` endpoint
+ - `height` (enum): `"regular"` or `"tall"` (default: `"regular"`)
+
+### Server configuration
+
+Configure Node.js server functionality:
+
+```json
+{
+ "server": {
+ "entry": "src/server/index.js"
+ }
+}
+```
+
+**Properties:**
+
+- `entry` (string): Server bundle filename (default: `"src/server/index.js"`)
+
+Server bundles must be compiled to CommonJS (`cjs`). ES module output is not supported by the Devvit Web runtime.
+
+### Permissions configuration
+
+Control what your app can access:
+
+```json
+{
+ "permissions": {
+ "http": {
+ "enable": true,
+ "domains": ["example.com", "api.github.com"]
+ },
+ "media": true,
+ "payments": false,
+ "realtime": false,
+ "redis": true,
+ "reddit": {
+ "enable": true,
+ "asUser": ["SUBMIT_POST", "SUBMIT_COMMENT"]
+ }
+ }
+}
+```
+
+**HTTP plugin:**
+
+- `enable` (boolean): Enable HTTP plugin (default: `true`)
+- `domains` (array): Allowed domains for `fetch()` calls
+
+**Reddit API plugin:**
+
+- `enable` (boolean): Enable Reddit API (default: `true`)
+- `scope` (enum): `"user"` or `"moderator"` (default: `"user"`)
+- `asUser` (array): APIs to execute as user account
+
+**Other permissions:**
+
+- `media` (boolean): Enable media uploads (default: `false`)
+- `payments` (boolean): Enable payments plugin (default: `false`)
+- `realtime` (boolean): Enable realtime messaging (default: `false`)
+- `redis` (boolean): Enable Redis storage (default: `false`)
+
+### Triggers configuration
+
+Handle Reddit events:
+
+```json
+{
+ "triggers": {
+ "onPostCreate": "/internal/triggers/post-create",
+ "onCommentSubmit": "/internal/triggers/comment-submit",
+ "onModAction": "/internal/triggers/mod-action"
+ }
+}
+```
+
+**Available triggers:**
+
+- `onAppInstall`, `onAppUpgrade`
+- `onPostCreate`, `onPostDelete`, `onPostSubmit`, `onPostUpdate`, `onPostReport`, `onPostFlairUpdate`, `onPostNsfwUpdate`, `onPostSpoilerUpdate`
+- `onCommentCreate`, `onCommentDelete`, `onCommentSubmit`, `onCommentUpdate`, `onCommentReport`
+- `onModAction`, `onModMail`
+- `onAutomoderatorFilterPost`, `onAutomoderatorFilterComment`
+
+**Note:** All trigger endpoints must start with `/internal/` and will receive POST requests with JSON data.
+
+### Menu configuration
+
+Add menu items to subreddit interfaces:
+
+```json
+{
+ "menu": {
+ "items": [
+ {
+ "label": "Approve Post",
+ "description": "Quickly approve this post",
+ "forUserType": "moderator",
+ "location": ["post"],
+ "endpoint": "/internal/menu/approve-post",
+ "postFilter": "none"
+ },
+ {
+ "label": "Report Issue",
+ "description": "Report a problem with this post",
+ "forUserType": "user",
+ "location": ["post", "comment"],
+ "endpoint": "/internal/menu/report-issue"
+ }
+ ]
+ }
+}
+```
+
+**Menu item properties:**
+
+- `label` (string): Display text (required)
+- `description` (string): Short description
+- `forUserType` (enum): `"moderator"` or `"user"` (default: `"moderator"`)
+- `location` (string|array): Where menu appears (`"post"`, `"comment"`, `"subreddit"`)
+- `endpoint` (string): Internal endpoint to call (required)
+- `postFilter` (enum): `"none"` or `"currentApp"` (default: `"none"`)
+
+### Scheduler configuration
+
+Configure scheduled tasks:
+
+```json
+{
+ "scheduler": {
+ "tasks": {
+ "daily-cleanup": {
+ "endpoint": "/internal/cron/daily-cleanup",
+ "cron": "0 2 * * *"
+ },
+ "hourly-check": {
+ "endpoint": "/internal/cron/hourly-check",
+ "cron": "0 * * * *",
+ "data": {
+ "checkType": "health"
+ }
+ },
+ "manual-task": "/internal/cron/manual-task"
+ }
+ }
+}
+```
+
+**Task configuration:**
+
+- `endpoint` (string): Internal endpoint to call (required)
+- `cron` (string): Cron schedule (optional, for automatic scheduling)
+- `data` (object): Additional data passed to cron tasks (optional)
+
+**Cron format:** Standard five-part (`0 2 * * *`) or six-part (`*/30 * * * * *`) format.
+
+### Forms configuration
+
+Map form identifiers to submission endpoints:
+
+```json
+{
+ "forms": {
+ "contact_form": "/internal/forms/contact",
+ "feedback_form": "/internal/forms/feedback"
+ }
+}
+```
+
+### Marketing assets
+
+Configure app presentation:
+
+```json
+{
+ "marketingAssets": {
+ "icon": "assets/icon.png"
+ }
+}
+```
+
+**Properties:**
+
+- `icon` (string): Path to 1024x1024 PNG icon (required)
+
+### Scripts configuration
+
+Configure build commands run by the Devvit CLI. These commands run relative to the `devvit.json` directory.
+
+```json
+{
+ "scripts": {
+ "dev": "vite build --watch",
+ "build": "vite build"
+ }
+}
+```
+
+**Properties:**
+
+- `dev` (string): Command run by `devvit playtest` to build or watch your client/server artifacts
+- `build` (string): Command run by `devvit upload` to build your client/server artifacts
+
+### Development configuration
+
+Configure development settings:
+
+```json
+{
+ "dev": {
+ "subreddit": "my-test-subreddit"
+ }
+}
+```
+
+**Properties:**
+
+- `subreddit` (string): Default development subreddit (can be overridden by `DEVVIT_SUBREDDIT` env var)
+
+## Validation rules
+
+The `devvit.json` configuration is validated against the JSON Schema at build time. Many IDEs will also underline errors as you write. Common validation errors include:
+
+- **JSON Syntax:** Adding comments or trailing commas (unsupported by JSON)
+- **Required Properties:** Missing the required `name` property
+- **App Components:** Missing at least one of `post` or `server`
+- **Dependencies:** Missing `server` when `triggers` is specified
+- **File References:** Missing files referenced in `devvit.json`
+- **Permissions:** Missing required permissions for used features
+- **Pattern Validation:** Invalid patterns for names, paths, or endpoints
+
+## Best practices
+
+1. **Always include the `$schema` property** for IDE autocompletion and validation.
+2. **Use specific permission scopes.** Only request permissions your app actually uses.
+3. **Set appropriate menu scopes.** Consider whether features should be available to all users or just moderators.
+4. **Validate endpoints.** Ensure all internal endpoints start with `/internal/`.
+5. **Use meaningful names.** Choose descriptive names for entrypoints, tasks, and forms.
+6. **Test configurations.** Validate your config with `devvit build` before deployment.
+
+## Environment variables
+
+- `DEVVIT_SUBREDDIT`: Override the `dev.subreddit` value used during `devvit playtest`.
+- `DEVVIT_APP_NAME`: Override the `name` value used during `devvit playtest` (and other similar commands).
+
+## Complete example
+
+```json title="devvit.json"
+{
+ "$schema": "https://developers.reddit.com/schema/config-file.v1.json",
+ "name": "my-awesome-app",
+ "post": {
+ "dir": "public",
+ "entrypoints": {
+ "default": {
+ "entry": "index.html",
+ "height": "tall"
+ }
+ }
+ },
+ "server": {
+ "entry": "src/server/index.js"
+ },
+ "permissions": {
+ "http": {
+ "enable": true,
+ "domains": ["api.example.com"]
+ },
+ "redis": true
+ },
+ "triggers": {
+ "onPostCreate": "/internal/triggers/post-create"
+ },
+ "menu": {
+ "items": [
+ {
+ "label": "Approve",
+ "forUserType": "moderator",
+ "location": "post",
+ "endpoint": "/internal/menu/approve"
+ }
+ ]
+ },
+ "scheduler": {
+ "tasks": {
+ "daily-cleanup": {
+ "endpoint": "/internal/cron/cleanup",
+ "cron": "0 2 * * *"
+ }
+ }
+ },
+ "marketingAssets": {
+ "icon": "assets/icon.png"
+ },
+ "dev": {
+ "subreddit": "my-test-sub"
+ },
+ "scripts": {
+ "dev": "vite build --watch",
+ "build": "vite build"
+ }
+}
+```
diff --git a/versioned_docs/version-0.13/capabilities/devvit-web/devvit_web_overview.mdx b/versioned_docs/version-0.13/capabilities/devvit-web/devvit_web_overview.mdx
new file mode 100644
index 00000000..b208d4e6
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/devvit-web/devvit_web_overview.mdx
@@ -0,0 +1,97 @@
+import DevvitWebArch from "../../assets/devvit_web/devvit_web_arch.png";
+
+# Devvit Web
+
+Devvit Web includes an easy way to build Devvit apps using a standard web stack.
+
+## What it is
+
+Devvit Web allows developers to build Devvit apps just like you would for the web. At the core, Devvit Web provides:
+
+- **A standard web app** that allows you to build with industry-standard frameworks and technologies (like React, Three.js, or Phaser).
+- **Server endpoints** that you define to communicate between the webview client and the Devvit server, using industry-standard frameworks and technologies (like Express.js, Hono, Koa, etc.).
+- **Devvit configuration** with a traditional client/server split. Devvit capabilities are now in one of three places:
+ - A configuration file in devvit.json for defining app metadata, permissions, and capabilities
+ - Client capabilities in the @devvit/client SDK
+ - Server capabilities, like Redis and Reddit API with the @devvit/server SDK
+
+With Devvit Web, you have continued access to our hosting services, key capabilities like Redis and Reddit API, standard web technologies, and a typical client/server pattern to build your apps.
+
+In addition, since you’re working with standard web technologies your apps should work with AI tools more effectively.
+
+## Examples
+
+Visit [https://developers.reddit.com/new](https://developers.reddit.com/new) and choose one of our templates or take a look at the github repositories:
+
+- [React](https://github.com/reddit/devvit-template-react)
+- [Phaser](https://github.com/reddit/devvit-template-phaser)
+- [Three.js](https://github.com/reddit/devvit-template-threejs)
+- [Hello World](https://github.com/reddit/devvit-template-hello-world)
+
+## Limitations
+
+As with most experimental features, there are some caveats.
+
+| Limitation | What it means |
+| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Serverless endpoints | The node server will run just long enough to execute your endpoint function and return a response, which means you can't use packages that require long-running connections like streaming. |
+| Package limitations | Developers cannot use `fs` or external native packages. For now, we recommend using external services over the native dependencies, such as [StreamPot](https://streampot.io/) (instead of ffmpeg) and [OpenAI](https://platform.openai.com/docs/guides/embeddings) (instead of @xenova/transformers) . |
+| Single request and single response handling only | Streaming or chunked responses and websockets are not supported. Long-polling is supported if it's under the max request time. |
+| No external requests from your client | You can't have any external requests other than the app's webview domain. All backend responses are locked down to the webview domain via CSP. (Your backend can make external fetch requests though.) |
+| localStorage clears on app updates | The iframe URL changes with each app version, so `localStorage` data is lost when you publish an update. Use [Redis](../server/redis.mdx) for data that needs to persist across app versions. |
+
+Devvit Web still has the same technical requirements:
+
+- Server endpoint calls
+- Max request time: 30s
+- Max payload size: 4MB
+- Max response size: 10MB
+- HTML/CSS/JS only
+
+## Devvit Web components
+
+Devvit Web uses endpoints between the client and server to make communication similar to standard web apps. A Devvit Web app has three components:
+
+- Client
+- Server
+- Configuration
+
+Devvit Web templates all have the same file structure:
+
+```text
+.
+├── src/
+│ ├── client/ # contains the webview code
+│ └── server/ # endpoints for the client
+└── devvit.json # the devvit config file
+```
+
+Your client talks to the server by calling `/api/` endpoints you define with `fetch()`.
+
+### Client folder
+
+This folder includes client-side code. This includes any html/css/javascript and relevant web libraries, and it will appear in a webview inside of a post for Reddit users.
+
+When you want to make server-side calls, or use server-side capabilities, you’ll use fetch and define what happens in your server folder.
+
+### Server folder
+
+This folder includes server-side code. We provide a node server, and you can use typical node server frameworks like Hono, Koa, or Express. This is where you can access key capabilities like [Redis](../server/redis.mdx), Reddit API client, and [fetch](../server/http-fetch.mdx).
+
+We also provide an authentication middleware so you don’t have to worry about authentication.
+
+:::note
+All server endpoints must start with `/api/` (e.g. `/api/get-something` or `/api/widgets/42`).
+:::
+
+
+
+### Configuration in `devvit.json`
+
+`devvit.json` is the configuration file for Devvit apps. It defines an app's post configuration, Node.js server configuration, permissions, scheduled jobs, event triggers, menu entries, payments configuration, and project settings. `devvit.json` replaces the legacy `devvit.yaml` configuration. A project should have one or the other but not both.
+
+Learn more about [devvit.json](./devvit_web_configuration.md)
diff --git a/versioned_docs/version-0.13/capabilities/interactive-posts/interactive_posts_overview.mdx b/versioned_docs/version-0.13/capabilities/interactive-posts/interactive_posts_overview.mdx
new file mode 100644
index 00000000..0ce3cc7f
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/interactive-posts/interactive_posts_overview.mdx
@@ -0,0 +1,118 @@
+import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';
+
+# Overview
+Interactive posts are the core of Reddit Dev Platform apps, enabling rich, engaging experiences that go beyond static content. There are three essential features for creating an interactive post using the Reddit API :
+
+1. First Screen Customization
+2. Post Data
+3. User Actions
+
+## Create an interactive post
+Use reddit.submitCustomPost() from the Reddit library. You’ll want to call this function in response to an action like a user submission, trigger, or menu item.
+
+## Devvit Web
+
+```tsx
+// in server code
+
+import { reddit, context } from '@devvit/web/server'
+
+export const createPost = async () => {
+ const { subredditName } = context;
+ if (!subredditName) {
+ throw new Error('subredditName is required');
+ }
+
+ return await reddit.submitCustomPost({
+ subredditName: subredditName,
+ title: 'test-post-flair',
+ entry: 'default'
+ });
+};
+
+// example action in our templates
+// Then, in your devvit.json:
+/*
+ "menu": {
+ "items": [
+ {
+ "label": "Create a new post",
+ "description": "test-post-creator",
+ "location": "subreddit",
+ "forUserType": "moderator",
+ "endpoint": "/internal/menu/post-create"
+ }
+ ]
+ },
+ "triggers": {
+ "onAppInstall": "/internal/on-app-install"
+ },
+*/
+ ```
+
+ ### 🎨 First Screen Customization
+
+Control what users see when they first encounter your post. Choose between:
+- **Splash screens**. A configurable splash screen with a clear call-to-action button, ideal for MVP-stage apps or those benefiting from immersive experiences with longer load times.
+- **Inline web views (Experimental)**. Interactive experiences that load directly in posts for instant-interaction apps or dynamic first screens. This is especially beneficial for developers comfortable optimizing web performance across all devices but is subject to more guidelines and longer approval cycles.
+
+:::tip
+Start simple with a splash screen, then move towards inline web views as your app grows and you want to optimize engagement.
+:::
+
+Learn more about [First Screen Customization](../server/launch_screen_and_entry_points/launch_overview).
+
+### 💾 Post Data
+ Attach up to 2KB of JSON data directly to your post for instant client-side access. Perfect for:
+
+- Game states and scores
+- Configuration settings
+- Small shared data that all users need to see
+
+For larger amounts of data, you should use [Redis](../server/redis). Learn more about Post Data
+
+
+### 👤 User Actions
+
+Enable your app to perform actions on behalf of users (with their permission):
+
+- Create posts or comments as the user
+- Subscribe users to subreddits (coming soon)
+
+Learn more about [User Actions](../server/userActions)
+
+## Example
+
+Here's a complete example using all three features together:
+
+```ts title="server/index.ts"
+import { reddit, context } from '@devvit/web/server';
+// Create an interactive post with all features
+
+const post = await reddit.submitCustomPost({
+ subredditName: context.subredditName!,
+ title: 'Interactive Game Post',
+
+ // First Screen Customization (splash screen)
+ splash: {
+ appDisplayName: 'Number Guessing Game',
+ backgroundUri: 'game-bg.png',
+ buttonLabel: 'Start Playing',
+ description: 'Can you guess the secret number?',
+ heading: 'Welcome to the Challenge!'
+ },
+
+ // Post Data for game state
+ postData: {
+ secretNumber: Math.floor(Math.random() * 100) + 1,
+ totalGuesses: 0,
+ gameState: 'active',
+ winner: null
+ }
+});
+
+// Later, update post data when someone wins
+const updatedPost = await reddit.getPostById(post.id); await updatedPost.setPostData({ ...context.postData, gameState: 'completed', winner: currentUsername, totalGuesses: context.postData.totalGuesses + 1 });
+
+// Create a comment as the user announcing their win await reddit.submitComment({ runAs: 'USER', id: post.id, text: 🎉 ${currentUsername} won the game! });
+```
diff --git a/versioned_docs/version-0.13/capabilities/realtime/overview.md b/versioned_docs/version-0.13/capabilities/realtime/overview.md
new file mode 100644
index 00000000..9539fcec
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/realtime/overview.md
@@ -0,0 +1,173 @@
+# Overview
+
+Create live and event-driven interactive posts. Realtime provides a set of primitives that lets you build interactive posts that are:
+
+- **Live**. Users engaging with the same interactive post see each others’ changes without any observable lag.
+- **Event-driven**. Posts render automatically in response to server events.
+- **Synced**. Using realtime with [Redis](../server/redis.mdx) lets you build persistent community experiences that are backed by high performance data synchronization.
+
+Realtime is supported in [Devvit Web](../devvit-web/devvit_web_overview.mdx) applications.
+
+# Realtime in Devvit Web
+
+This guide walks through step-by-step instructions on how to set up [Realtime](./overview.md) in a [Devvit Web](../devvit-web/devvit_web_overview.mdx) application
+
+## Overview
+
+The realtime client allows you to:
+
+- **Connect** to realtime channels for receiving messages
+- **Handle** connection lifecycle events (connect/disconnect)
+- **Process** incoming messages with custom logic
+- **Manage** multiple channel subscriptions
+- **Disconnect** from channels when no longer needed
+
+## Architecture
+
+Realtime functionality in Devvit follows a client/server architecture:
+
+- **Client-side** (connectRealtime): Subscribe to channels and receive messages
+- **Server-side** (realtime.send): Send messages to channels
+
+This separation ensures that message sending is controlled by server-side logic while clients can freely subscribe to channels they're interested in.
+
+## Client-side API reference
+
+### connectRealtime
+
+Connects to a realtime channel for receiving messages.
+
+```tsx title="client/index.ts"
+import { connectRealtime } from '@devvit/web/client';
+
+const connection = await connectRealtime({
+ channel: 'my-channel',
+ onConnect: (channel) => {
+ console.log(`Connected to ${channel}`);
+ },
+ onDisconnect: (channel) => {
+ console.log(`Disconnected from ${channel}`);
+ },
+ onMessage: (data) => {
+ console.log('Received message:', data);
+ },
+});
+```
+
+#### Parameters
+
+- `opts` - Connection options object
+ - `channel` (string) - The name of the channel to connect to. Note, you cannot use the `:` character in the channel name
+ - `onConnect?` (function) - Optional callback called when connection is established
+ - `onDisconnect?` (function) - Optional callback called when connection is lost
+ - `onMessage` (function) - Required callback called when a message is received
+
+#### Returns
+
+A `Connection` object with a `disconnect()` method.
+
+### Connection
+
+A connection object returned by `connectRealtime()`.
+
+#### Methods
+
+##### disconnect()
+
+Disconnects from the realtime channel.
+
+```tsx
+await connection.disconnect();
+```
+
+This method:
+
+- Removes the channel from active subscriptions
+- Cleans up event listeners
+- Calls the `onDisconnect` callback if provided
+
+## Server-side API reference
+
+### Realtime plugin
+
+The server-side plugin for sending messages to realtime channels.
+
+```tsx title="server/index.ts"
+import { realtime } from '@devvit/web/server';
+
+// Send a message to a channel
+await realtime.send('my-channel', {
+ type: 'user-joined',
+ userId: '123',
+});
+```
+
+#### Methods
+
+##### send(channel: string, msg: JSONValue): Promise
+
+Sends a message to a specific channel.
+
+- `channel` (string) - The name of the channel to send the message to
+- `msg` (JSONValue) - The message data to send
+
+## Usage examples
+
+### Client-side: basic channel connection
+
+```tsx title="client/index.ts"
+import { connectRealtime } from '@devvit/web/client';
+
+// Connect to a channel
+const connection = await connectRealtime({
+ channel: 'user-updates',
+ onMessage: (data) => {
+ // Handle incoming messages
+ console.log('User update:', data);
+ },
+});
+
+// Later, disconnect when done
+await connection.disconnect();
+```
+
+### Client-side: connection lifecycle management
+
+```tsx title="client/index.ts"
+import { connectRealtime } from '@devvit/web/client';
+
+const connection = await connectRealtime({
+ channel: 'live-chat',
+ onConnect: (channel) => {
+ console.log(`Connected to ${channel}`);
+ // Update UI to show connected state
+ setIsConnected(true);
+ },
+ onDisconnect: (channel) => {
+ console.log(`Disconnected from ${channel}`);
+ // Update UI to show disconnected state
+ setIsConnected(false);
+ },
+ onMessage: (data) => {
+ // Process chat messages
+ addMessageToChat(data);
+ },
+});
+```
+
+### Server-side: sending messages
+
+```tsx title="server/index.ts"
+import { realtime } from '@devvit/web/server';
+
+// Send a simple message
+await realtime.send('notifications', 'New user joined!');
+
+// Send a structured message
+await realtime.send('game-updates', {
+ type: 'score-update',
+ playerId: 'user123',
+ score: 1500,
+ timestamp: Date.now(),
+});
+```
diff --git a/versioned_docs/version-0.13/capabilities/server/cache-helper.mdx b/versioned_docs/version-0.13/capabilities/server/cache-helper.mdx
new file mode 100644
index 00000000..a6e4e5ce
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/cache-helper.mdx
@@ -0,0 +1,198 @@
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Cache helper
+
+Cache helper lets you build a more performant app by reducing the number of server side calls for the same data. You can create a short-term cache that stores JSON objects in your Devvit app for a limited amount of time. This is valuable when you have many clients trying to get the same data, for example a stock ticker value or a sports score.
+
+Under the covers, it's Redis plus a local in-memory write-through cache. This provides a pattern for fetching data without involving a scheduler and allows small time-to-live (TTL, ~1 second). Cache helper lets the app make one request for the data, save the response, and provide this response to all users requesting the same data.
+
+:::warning
+**Do not cache sensitive information**. Cache helper randomly selects one user to make the real request and saves the response to the cache for others to use. You should only use cache helper for non-personalized fetches, since the same response is available to all users.
+:::
+
+
+## Usage
+
+You can import cache helper from `@devvit/web/server` in your server source files. The cache helper is not available client-side, so you will see an error if you try to import it in client source files.
+
+```tsx
+import { cache } from '@devvit/web/server';
+```
+
+## Parameters
+
+The cache takes a key and a TTL:
+
+| **Parameters** | **Description** |
+| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `key` | This is a string that identifies a cached response. Instead of making a real request, the app gets the cached response with the key you provide. Make sure to use different keys for different data. For example, if you’re saving post-specific data, add the postId to the cache key, like this: `post_data_${postId})`. |
+| `ttl` | Time to live is the number of **seconds** the cached response is expected to be relevant. Once the cached response expires, it will be voided and a real request is made to populate the cache again. You can treat it as a threshold, where ttl of 30 would mean that a request is done no more than once per 30 seconds. |
+
+## Example
+
+Here’s a way to set up in-app caching instead of using scheduler or interval to fetch.
+
+
+
+
+ ```tsx title="server/index.ts"
+ import { Hono } from 'hono';
+ import { cache, context, createServer, getServerPort, reddit } from '@devvit/web/server';
+
+ type SubredditResponse = {
+ type: 'subreddit';
+ subreddit: string;
+ };
+
+ type SubredditErrorResponse = {
+ status: 'error';
+ message: string;
+ };
+
+ const app = new Hono();
+
+ app.get('/api/subreddit', async (c) => {
+ const { postId } = context;
+
+ if (!postId) {
+ console.error('API Subreddit Error: postId not found in devvit context');
+ return c.json(
+ {
+ status: 'error',
+ message: 'postId is required but missing from context',
+ },
+ 400
+ );
+ }
+
+ try {
+ const subredditName = await cache(
+ async () => {
+ const subreddit = await reddit.getCurrentSubreddit();
+ if (!subreddit) {
+ throw new Error('Subreddit is required but missing from context');
+ }
+ return subreddit.name;
+ },
+ {
+ key: 'current_subreddit',
+ ttl: 24 * 60 * 60, // expire after one day.
+ }
+ );
+ console.log(`Current subreddit: ${subredditName}`);
+
+ return c.json({
+ type: 'subreddit',
+ subreddit: subredditName,
+ });
+ } catch (error) {
+ console.error(`API Subreddit Error for post ${postId}:`, error);
+ let errorMessage = 'Unknown error during subreddit retrieval';
+ if (error instanceof Error) {
+ errorMessage = `Subreddit retrieval failed: ${error.message}`;
+ }
+ return c.json({ status: 'error', message: errorMessage }, 400);
+ }
+ });
+
+ const server = createServer(app);
+ server.on('error', (err) => console.error(`server error; ${err.stack}`));
+ server.listen(getServerPort());
+ ```
+
+
+
+
+ ```tsx title="server/index.ts"
+ import express from "express";
+ import {
+ cache,
+ createServer,
+ context,
+ getServerPort,
+ reddit,
+ } from "@devvit/web/server";
+
+ type SubredditResponse = {
+ type: "subreddit";
+ subreddit: string;
+ };
+
+ type SubredditErrorResponse = {
+ status: "error";
+ message: string;
+ };
+
+ const app = express();
+
+ // Middleware for JSON body parsing
+ app.use(express.json());
+ // Middleware for URL-encoded body parsing
+ app.use(express.urlencoded({ extended: true }));
+ // Middleware for plain text body parsing
+ app.use(express.text());
+
+ const router = express.Router();
+
+ router.get(
+ "/api/subreddit",
+ async (_req, res): Promise => {
+ const { postId } = context;
+
+ if (!postId) {
+ console.error("API Subreddit Error: postId not found in devvit context");
+ res.status(400).json({
+ status: "error",
+ message: "postId is required but missing from context",
+ });
+ return;
+ }
+
+ try {
+ const subredditName = await cache(
+ async () => {
+ const subreddit = await reddit.getCurrentSubreddit();
+ if (!subreddit) {
+ throw new Error("Subreddit is required but missing from context");
+ }
+ return subreddit.name;
+ },
+ {
+ key: `current_subreddit`,
+ ttl: 24 * 60 * 60 // expire after one day.
+ }
+ );
+ console.log(`Current subreddit: ${subredditName}`);
+
+ res.json({
+ type: "subreddit",
+ subreddit: subredditName,
+ });
+ } catch (error) {
+ console.error(`API Subreddit Error for post ${postId}:`, error);
+ let errorMessage = "Unknown error during subreddit retrieval";
+ if (error instanceof Error) {
+ errorMessage = `Subreddit retrieval failed: ${error.message}`;
+ }
+ res.status(400).json({ status: "error", message: errorMessage });
+ }
+ }
+ );
+
+ app.use(router);
+
+ const server = createServer(app);
+ server.on("error", (err) => console.error(`server error; ${err.stack}`));
+ server.listen(getServerPort());
+ ```
+
+
+
diff --git a/versioned_docs/version-0.13/capabilities/server/http-fetch-policy.md b/versioned_docs/version-0.13/capabilities/server/http-fetch-policy.md
new file mode 100644
index 00000000..bfb00368
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/http-fetch-policy.md
@@ -0,0 +1,101 @@
+# HTTP Fetch Policy
+
+When requesting domains to be allow-listed, they fall into three categories:
+
+1. **APIs that provide data or specific services** (e.g., `api.openai.com`, `api.wikipedia.org`) \- These will be approved if they have a **publicly documented and publicly accessible API** for valid use cases, and if they adhere to the Devvit rules. Please reference our AI providers and account linking policies for common invalid use cases.
+
+2. **Limited scope cloud providers** (e.g., `username.supabase.com`, `my-app.firebase.com`) \- May be granted with exceptions. You must:
+
+ - Follow user privacy guidelines and data governance requirements
+ - Use an approved provider from the list below (please include your subdomain, and request for the most granular domain possible, e.g. `my-app.s3.amazonaws.com`)
+ - `supabase.com`
+ - `firebase.com`
+ - `spacetimedb.com`
+ - `s3.amazonaws.com`
+ - `storage.googleapis.com`
+ - Demonstrate a capability that `@devvit/server` doesn't support
+ - Valid use cases include:
+ - Asset hosting (videos, images, music)
+ - Relational databases
+ - Note: Approval can be revoked at any time
+
+3. **Personal domains** (e.g., `personaldomain.com`) \- Will not be approved. If you have a use case that our Devvit server does not support, please submit your request with detailed justification.
+
+### Documentation requirements
+
+If your app uses fetch domains, you must add context to your app's README for the approval process:
+
+1. Create a "Fetch Domains" section in your README
+2. List each domain you're requesting and explain why you need it
+3. Ensure your usage complies with our fetch guidelines
+
+Example README section:
+
+```
+## Fetch Domains
+
+The following domains are requested for this app:
+
+- `api.wikipedia.org` - Used to fetch article summaries for the knowledge base feature
+- `username.supabase.com` - Required for relational database storage of user preferences (Devvit KV store doesn't support complex queries needed for this feature)
+```
+
+….
+
+### Domain Requirements
+
+Domain entries must be exact hostnames only, such as nytimes.com or wikipedia.org. These fetch requests are not allowed:
+
+- Be specific. No using `*.example.com` when you need `api.example.com`
+- No wildcards: `*.example.com`
+- No protocols: `https://api.example.com`
+- No paths: `api.example.com/webhooks`
+
+Domains that are approved for your app will be displayed in the Developer Settings section for your app at `https://developers.reddit.com/apps/{your-app-slug}/developer-settings`.
+These domains are allow-listed for **your app only** and not globally.
+
+Apps must request each individual domain that it intends to fetch, even if the domain is already globally allowed. See the [global fetch allowlist](#global-fetch-allowlist) to view the list of globally allowed domains.
+
+### Terms and conditions
+
+Any app that uses `fetch` must upload Terms and Conditions and a Privacy Policy. Links to each of these documents must be saved in the app details form.
+
+
+
+## Global fetch allowlist {#global-fetch-allowlist}
+
+The following domains are globally allowed and can be fetched by any app:
+
+- example.com
+- site.api.espn.com
+- cdn.espn.com
+- discord.com
+- api.polygon.io
+- api.massive.com
+- polygon.io
+- slack.com
+- lichess.org
+- api.telegram.org
+- commentanalyzer.googleapis.com
+- language.googleapis.com
+- statsapi.mlb.com
+- api.openai.com
+- api.scryfall.com
+- api.nasa.gov
+- api.sportradar.us
+- api.sportradar.com
+- random.org
+- generativelanguage.googleapis.com
+- youtube.googleapis.com
+- api.weather.gov
+- wikipedia.org
+- finance.yahoo.com
+- api.twitter.com
+- api.petfinder.com
+- fonts.googleapis.com
+- nytimes.com
+- npr.org
+- propublica.org
+- pbs.org
+- i.giphy.com
+- chessboardjs.com
diff --git a/versioned_docs/version-0.13/capabilities/server/http-fetch.mdx b/versioned_docs/version-0.13/capabilities/server/http-fetch.mdx
new file mode 100644
index 00000000..16284f81
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/http-fetch.mdx
@@ -0,0 +1,151 @@
+# HTTP Fetch
+
+Make requests to allow-listed external domains.
+
+Your Devvit app can make network requests to access allow-listed external domains using HTTP Fetch. This enables your app to leverage webhooks, personal servers, and other third-party integrations asynchronously across the network.
+
+## Enabling HTTP fetch calls
+
+```json title="devvit.json"
+{
+ ...
+ "permissions": {
+ "http": {
+ "enable": true,
+ "domains": ["my-site.com", "another-domain.net"]
+ }
+ }
+}
+```
+
+### Requesting a domain to be allow-listed
+
+Apps may request a domain to be added to the allow-list by specifying `domains` in the `http` configuration.
+This configuration is optional, and apps can still configure `http: true` as before.
+
+Requested domains will be submitted for review when you playtest or upload your app. Admins may approve or deny domain requests.
+
+Domain entries must be exact hostnames only, such as nytimes.com or wikipedia.org. These fetch requests are not allowed:
+
+- Be specific. No using `*.example.com` when you need `api.example.com`
+- No wildcards: `*.example.com`
+- No protocols: `https://api.example.com`
+- No paths: `api.example.com/webhooks`
+
+Domains that are approved for your app will be displayed in the Developer Settings section for your app at `https://developers.reddit.com/apps/{your-app-slug}/developer-settings`.
+These domains are allow-listed for **your app only** and not globally.
+
+Apps must request each individual domain that it intends to fetch, even if the domain is already globally allowed. See the [global fetch allowlist](#global-fetch-allowlist) to view the list of globally allowed domains.
+
+## Limitations
+
+- Access is only allowed to https URIs.
+- Supported HTTP methods: `GET`, `POST`, `PUT`, `DELETE`, `OPTIONS` and `PATCH`.
+- HTTP timeout limit is 30 seconds.
+
+## Example usage
+
+Devvit Web applications have two different contexts for using fetch:
+
+### Server-side fetch
+
+Server-side fetch allows your app to make HTTP requests to allowlisted external domains from your server-side code (e.g., API routes, server actions):
+
+```tsx title="server/index.ts"
+const response = await fetch('https://example.com/api/data', {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+});
+
+const data = await response.json();
+console.log('External API response:', data);
+````
+
+### Client-side fetch
+
+Client-side fetch has different restrictions and can only make requests to your own webview domain:
+
+**Client-side restrictions:**
+
+- **Domain limitation**: Can only make requests to your own webview domain
+- **Endpoint requirement**: All requests must target endpoints that end with `/api`
+- **Authentication**: Handled automatically - no need to manage auth tokens
+- **No external domains**: Cannot make requests to external domains from client-side code
+
+```tsx title="client/index.ts"
+const handleFetchData = async () => {
+ // Correct: fetching your own webview's API endpoint
+ const response = await fetch("/api/user-data", {
+ method: "GET",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ });
+
+ const data = await response.json();
+ console.log("API response:", data);
+};
+
+// Incorrect: cannot fetch external domains from client-side
+// const response = await fetch('https://external-api.com/data');
+
+// Incorrect: endpoint must end with /api
+// const response = await fetch('/user-data');
+```
+
+## Troubleshooting
+
+If you see the following error, it means HTTP Fetch requests are hitting the internal timeout limits. To resolve this:
+
+- Use a queue or kick off an async request in your back end. You can use [Scheduler](./scheduler.mdx) to monitor the result.
+- Optimize the overall HTTP request latency if you have a self-hosted server.
+
+```ts
+HTTP request to domain: timed out with error: context deadline exceeded.
+```
+
+### Terms and conditions
+
+Any app that uses `fetch` must upload Terms and Conditions and a Privacy Policy. Links to each of these documents must be saved in the app details form.
+
+
+
+## Global fetch allowlist
+
+The following domains are globally allowed and can be fetched by any app:
+
+- example.com
+- site.api.espn.com
+- cdn.espn.com
+- discord.com
+- api.polygon.io
+- api.massive.com
+- polygon.io
+- slack.com
+- lichess.org
+- api.telegram.org
+- commentanalyzer.googleapis.com
+- language.googleapis.com
+- statsapi.mlb.com
+- api.openai.com
+- api.scryfall.com
+- api.nasa.gov
+- api.sportradar.us
+- api.sportradar.com
+- random.org
+- generativelanguage.googleapis.com
+- youtube.googleapis.com
+- api.weather.gov
+- wikipedia.org
+- finance.yahoo.com
+- api.twitter.com
+- api.petfinder.com
+- fonts.googleapis.com
+- nytimes.com
+- npr.org
+- propublica.org
+- pbs.org
+- i.giphy.com
+- chessboardjs.com
diff --git a/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/launch_overview.mdx b/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/launch_overview.mdx
new file mode 100644
index 00000000..81578519
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/launch_overview.mdx
@@ -0,0 +1,17 @@
+# View Modes, Launch Screens, and Entry Points
+
+Devvit’s interactive framework gives you powerful ways to shape how users experience apps, from launch screen to expanded screen viewing. With view modes, HTML-based launch screens, and multiple entry points, you can design apps that feel native and respond to how users interact across the Reddit platform.
+
+View modes define how your app appears:
+
+- **Inline mode** loads your app’s web view directly inside the post unit, either in the feed or on the post details page. Users can interact immediately without additional taps or page loads.
+
+- **Expanded mode** opens your app or game in a larger, full-screen view, ideal for immersive experiences such as games, creative tools, or detailed interactions on mobile.
+
+**Launch screens** are the first thing users see before your main app loads. These HTML-based screens give you complete control over their design, animation, and loading behavior using the same tools and styles as your app itself.
+
+This is an example of an inline launch screen:
+
+
+
+**Entry points** act as a router that organizes your app across different view modes. Each entry point specifies the initial HTML file for the specific context. A user might experience your app inline, when it’s embedded in a post, or launch it in expanded mode for a larger, full-screen mobile experience.
diff --git a/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/launch_screen_customization.md b/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/launch_screen_customization.md
new file mode 100644
index 00000000..eaaa1616
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/launch_screen_customization.md
@@ -0,0 +1,168 @@
+# Launch Screen Customization
+
+## Creating Your Launch (Preview) Screen
+
+Create an HTML file that serves as your app's launch screen in inline mode. This is what users see immediately when they encounter your post. Templates include a performant and compliant preview screen.
+
+```html title="preview.html"
+
+
+
+
+ My Game
+
+
+
+
+
Adventure Game
+
Tap to play in fullscreen
+
+
+
+
+```
+
+```tsx title="preview.js"
+import { requestExpandedMode } from '@devvit/web/client';
+
+document.addEventListener('DOMContentLoaded', () => {
+ const playButton = document.getElementById('play-button');
+
+ playButton.addEventListener('click', async (event) => {
+ try {
+ await requestExpandedMode(event, 'game');
+ } catch (error) {
+ console.error('Failed to enter expanded mode:', error);
+ }
+ });
+});
+```
+
+## API Reference
+
+### requestExpandedMode()
+
+Requests expanded mode for the web view. This displays the web view in a larger modal presentation on web and full screen on mobile.
+
+```tsx
+import { requestExpandedMode } from '@devvit/web/client';
+
+// Must be called from a trusted event (click, touch, etc.)
+await requestExpandedMode(event, 'game');
+```
+
+**Parameters**
+
+- `event` (PointerEvent): The gesture that triggered the request, must be a trusted event
+- `entry` (string): The destination URI name (e.g., `splash` or `game`). Entry names are the `devvit.json post.entrypoints` keys
+
+### getWebViewMode()
+
+Get the current web view mode state.
+
+```tsx
+import { getWebViewMode } from '@devvit/web/client';
+
+const currentMode = getWebViewMode(); // Returns 'inline' | 'expanded'
+
+if (currentMode === 'expanded') {
+ // Show expanded UI
+} else {
+ // Show inline UI
+}
+```
+
+### Mode Change Events
+
+Listen for mode changes to update your UI.
+
+```tsx
+import { addWebViewModeListener, removeWebViewModeListener } from '@devvit/web/client';
+
+function useWebViewMode() {
+ const [mode, setMode] = useState(getWebViewMode());
+
+ useEffect(() => {
+ const handleModeChange = (newMode: 'inline' | 'expanded') => {
+ setMode(newMode);
+ };
+
+ addWebViewModeListener(handleModeChange);
+ return () => removeWebViewModeListener(handleModeChange);
+ }, []);
+
+ return mode;
+}
+```
+
+## Complete Example
+
+```tsx title="game.tsx"
+import React, { useState, useEffect } from 'react';
+import {
+ getWebViewMode,
+ requestExpandedMode,
+ exitExpandedMode,
+ addWebViewModeListener,
+ removeWebViewModeListener,
+} from '@devvit/web/client';
+
+export function GameApp() {
+ const [mode, setMode] = useState(getWebViewMode());
+ const [gameStarted, setGameStarted] = useState(false);
+
+ useEffect(() => {
+ const handleModeChange = (newMode: 'inline' | 'expanded') => {
+ setMode(newMode);
+
+ // Pause game when exiting expanded mode
+ if (newMode === 'inline' && gameStarted) {
+ pauseGame();
+ }
+ };
+
+ addWebViewModeListener(handleModeChange);
+ return () => removeWebViewModeListener(handleModeChange);
+ }, [gameStarted]);
+
+ const handlePlayClick = async (event: React.MouseEvent) => {
+ try {
+ await requestExpandedMode(event.nativeEvent, 'game');
+ setGameStarted(true);
+ } catch (error) {
+ console.error('Could not enter expanded mode:', error);
+ // Fallback: start game inline
+ setGameStarted(true);
+ }
+ };
+
+ const handleExitClick = async (event: React.MouseEvent) => {
+ try {
+ await exitExpandedMode(event.nativeEvent);
+ } catch (error) {
+ console.error('Could not exit expanded mode:', error);
+ }
+ };
+
+ if (mode === 'inline') {
+ return (
+
+
Adventure Game
+
Tap to play in fullscreen
+
+
+ );
+ }
+
+ return (
+
+
+
+
+ );
+}
+```
diff --git a/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/splash_migration.mdx b/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/splash_migration.mdx
new file mode 100644
index 00000000..79091a16
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/splash_migration.mdx
@@ -0,0 +1,119 @@
+# Migrating from Splash Screens
+
+If you're updating an existing app that used the deprecated splash parameter in `submitCustomPost()`, you'll need to migrate to HTML-based launch screens with multiple entry points.
+
+
+
+**The old splash parameter (deprecated)**
+
+```tsx
+await reddit.submitCustomPost({
+ subredditName: context.subredditName,
+ title: 'My Game',
+ splash: {
+ appDisplayName: 'My Game',
+ backgroundUri: 'background.png',
+ buttonLabel: 'Play Now',
+ description: 'An exciting game',
+ heading: 'Welcome!',
+ },
+});
+```
+
+**The new launch screen (current)**
+
+```tsx
+await reddit.submitCustomPost({ title: 'Tennis Match #37' }); // implicitly default entry
+await reddit.submitCustomPost({ title: 'Tennis Leaderboard', entry: 'leaderboard' }); // not a URI, an entry name.
+```
+
+**Migration instructions**
+
+1. Update your `devvit.json` to define both preview and game entry points.
+
+```tsx title="devvit.json"
+{
+ "post": {
+ "dir": "dist/client",
+ "entrypoints": {
+ "default": {
+ "entry": "splash.html",
+ "height": "regular",
+ "inline": true
+ },
+ "game": {
+ "entry": "index.html",
+ "height": "tall"
+ }
+ }
+ }
+}
+```
+
+Esbuild would probably be simpler and add fewer dependencies, but you can also use Vite.
+
+```tsx
+{
+ ...all your normal vite nonsense...
+ build: {
+ input: ['splash.html', 'game.html'], <-- add your entrypoints
+ ...
+ }
+}
+```
+
+2. Create a `splash.html` file with a button to launch into the game.
+
+```html title="splash.html"
+
+
+
+
+ My Game
+
+
+
+
+
My Game
+
An exciting game
+
+
+
+
+```
+
+```tsx title="preview.js"
+import { requestExpandedMode } from '@devvit/web/client';
+
+document.addEventListener('DOMContentLoaded', () => {
+ const playButton = document.getElementById('play-button');
+
+ playButton.addEventListener('click', async (event) => {
+ try {
+ await requestExpandedMode(event, 'game');
+ } catch (error) {
+ console.error('Failed to enter expanded mode:', error);
+ }
+ });
+});
+```
+
+3. Update your post creation to use the default (preview) entry point.
+
+```tsx
+await reddit.submitCustomPost({
+ subredditName: context.subredditName,
+ title: 'My Game',
+ entry: 'default',
+});
+```
+
+Now your app will load the launch screen in inline mode. When users click "Play Now", the game will transition to expanded mode (`index.html`).
diff --git a/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/view_modes_entry_points.md b/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/view_modes_entry_points.md
new file mode 100644
index 00000000..d43dc440
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/launch_screen_and_entry_points/view_modes_entry_points.md
@@ -0,0 +1,180 @@
+# Setting up view modes and entry points
+
+## View modes
+
+Devvit apps support two view modes:
+
+**Inline Mode**
+
+- **What it is**: Your app loads directly within the post unit
+- **User experience**: Users see your app content immediately without clicking
+- **Use case**: Preview screens, game menus, leaderboards, or any content that works well in a post-sized container
+- **Requirements**: Only respond to taps and clicks, load quickly, and respect post boundaries
+
+**Expanded Mode**
+
+- **What it is**: Your app displays in a larger modal (web) or full screen (mobile)
+- **User experience**: Users click to enter a dedicated experience
+- **Use case**: Full games, longer load times, detailed interfaces, or any content that needs more space or full gesture support
+- **Trigger**: User-initiated only (button click, gesture, etc.)
+
+## Multiple entry points
+
+Multiple entry points let the user start the game from different contexts or states. For example, you can have a button that launches into a leaderboard view and another for a specific game mode, each of these would be configured as an entry point for your app. Define multiple entry points in your `devvit.json`. If you use the [Devvit Vite plugin](../../../guides/tools/vite), it automatically infers the client build inputs from these entrypoints, so you don't need to maintain a custom Rollup `input` list.
+
+```js title="devvit.json"
+{
+ "post": {
+ "dir": "dist/client",
+ "entrypoints": {
+ "default": {
+ "entry": "src/client/preview.html",
+ "height": "regular",
+ "inline": true
+ },
+ "game": {
+ "entry": "src/client/game.html"
+ },
+ "leaderboard": {
+ "entry": "src/client/leaderboard.html"
+ }
+ }
+ }
+}
+```
+
+```ts title="vite.config.ts"
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+import tailwind from "@tailwindcss/vite";
+import { devvit } from "@devvit/start/vite";
+
+export default defineConfig({
+ plugins: [react(), tailwind(), devvit()],
+});
+```
+
+**File Structure Example**
+
+```tsx
+your-app/
+├── devvit.json
+├── vite.config.ts
+├── src/
+│ ├── server/
+│ │ └── index.ts
+│ └── client/
+│ ├── preview.html
+│ ├── game.html
+│ ├── leaderboard.html
+│ └── styles.css
+└── dist/ // Built files after compilation
+ └── client/ // This is what "dir" points to
+ ├── preview.html
+ ├── game.html
+ ├── leaderboard.html
+ └── styles.css
+```
+
+The `dir` property specifies where your built client files are located. With the Devvit Vite plugin, the `entry` values point at your source HTML files (for example `src/client/preview.html`), and the plugin outputs the matching files into `dist/client` during `vite build`.
+
+### Creating posts with specific entry points
+
+Use the `entry` parameter when creating posts to specify which entry point from your `devvit.json` configuration to use. The entry value must match one of the keys defined in `post.entrypoints`.
+
+```tsx title="server/index.ts"
+import { reddit } from '@devvit/web/server';
+
+// Create a post using the default entrypoint
+async function createDefaultPost(context: any) {
+ return await reddit.submitCustomPost({
+ subredditName: context.subredditName!,
+ title: 'Adventure Game',
+ entry: 'default',
+ postData: {
+ gameState: 'menu',
+ },
+ });
+}
+
+// Create a post using a specific entrypoint
+async function createGamePost(context: any) {
+ return await reddit.submitCustomPost({
+ subredditName: context.subredditName!,
+ title: 'Adventure Game',
+ entry: 'game', // Must match a key in devvit.json entrypoints
+ postData: {
+ gameState: 'active',
+ initialized: true,
+ },
+ });
+}
+```
+
+**How it works**
+
+- If `entry` is not specified, the `default` entry point is used automatically.
+- The `entry` value must match a key defined in your `devvit.json post.entrypoints` object.
+- Each entry point can have its own HTML file and height setting.
+- Invalid entry point names will cause an error.
+
+### Switching between view modes
+
+You can transition from inline mode to expanded mode with a different entry point, like this:
+
+```tsx
+import { requestExpandedMode } from '@devvit/web/client';
+
+// Switch to the 'game' entrypoint in expanded mode
+const handleStartGame = async (event: React.MouseEvent) => {
+ try {
+ await requestExpandedMode(event.nativeEvent, 'game');
+ } catch (error) {
+ console.error('Failed to enter expanded mode:', error);
+ }
+};
+```
+
+## Inline mode requirements
+
+All Devvit web view apps load in inline mode by default. Your app loads directly in the post unit without requiring users to click to expand.
+
+Apps must meet these requirements for approval and featuring:
+
+1. **Performance**
+
+- Optimize for mobile devices and slower connections
+- Load initial content in under 1 second
+- Achieve a [Lighthouse](https://developer.chrome.com/docs/lighthouse/overview) score >80.
+ - To find your Lighthouse score you can follow these steps:
+ 1. Open your inline post
+ 2. Open Developer Tools in Chrome and navigate to the elements tab
+ 3. Find the Devvit web view element in the DOM and open it in a new tab
+ 4. Open Developer Tools in the new tab and navigate to Lighthouse
+ 5. Ensure you have mobile selected and select Analyze Page Load
+
+
+
+2. **Gesture compliance**
+
+- **Only tap or click input is allowed**
+- No scroll traps or scroll hijacking
+- No zoom or pan interference
+- Users must be able to scroll past your post naturally
+
+3. **Responsive design**
+
+- Content must work across all viewport sizes (use chrome devtools to test your app's responsiveness)
+- Keep in mind that the majority of users are on mobile devices
+
+4. **User-initiated expanded mode**
+
+- Apps cannot auto-launch into expanded mode or auto-close without a user action
+- Must have explicit user interaction (clearly labeled button or action)
+- Default view should respect standard post boundaries
+
+5. **Safe use of sound**
+
+- Audio should not play unless there is a user interaction
+- Include a button to mute in your game
+- Use the visibilityChange handler to mute any sounds if a user scrolls away
diff --git a/versioned_docs/version-0.13/capabilities/server/media-uploads.mdx b/versioned_docs/version-0.13/capabilities/server/media-uploads.mdx
new file mode 100644
index 00000000..72841273
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/media-uploads.mdx
@@ -0,0 +1,206 @@
+# Media Uploads
+
+:::warning
+Apps can only display media hosted on Reddit
+:::
+
+You can upload media to Reddit at runtime using the `media` capability. This is different than static images, which you bundle with your app's client assets.
+
+Runtime media is useful for embedding media in RTJSON (Posts and Comments) as well as displaying it within an interactive post app.
+
+## Enabling media uploads
+Enable the `media` permission in your `devvit.json` file.
+```json title="devvit.json"
+{
+ "permissions": {
+ "media": true
+ }
+}
+```
+
+## Media uploads
+On the server, pass a remote URL or data URL to `media.upload()` to upload an image, GIF, or video and get a Reddit-hosted asset you can safely render in posts, comments, and rich text.
+
+### Response type
+`media.upload()` returns:
+
+```ts
+type MediaAsset = {
+ mediaId: string;
+ mediaUrl: string;
+};
+```
+
+- `mediaId`: Reddit media asset ID.
+- `mediaUrl`: Reddit CDN URL (use this in rich text or UI).
+
+### `media.upload()` input
+`media.upload()` expects an object with:
+
+- `url`: The media URL (remote URL or data URL).
+- `type`: The media kind (`'image'`, `'gif'`, or `'video'`).
+
+```ts
+type UploadMediaOptions = {
+ url: string; // remote URL or data URL
+ type: 'image' | 'gif' | 'video';
+};
+```
+
+Use `type: 'image'` for PNG, JPEG, and WEBP uploads.
+
+### Basic server usage
+```ts title="server/index.ts"
+import { media } from '@devvit/web/server';
+
+const uploaded = await media.upload({
+ url: 'https://example.com/my-image.png',
+ type: 'image',
+});
+
+// uploaded.mediaId
+// uploaded.mediaUrl
+```
+
+### Example: API endpoint returning upload response
+```ts title="server/index.ts"
+import { media } from '@devvit/web/server';
+
+app.post('/api/upload', async (c) => {
+ const { url, type } = await c.req.json<{
+ url: string;
+ type: 'image' | 'gif' | 'video';
+ }>();
+
+ const uploaded = await media.upload({ url, type });
+
+ return c.json({
+ mediaId: uploaded.mediaId,
+ mediaUrl: uploaded.mediaUrl,
+ });
+});
+```
+
+### Example: submit a post with uploaded media using RichTextBuilder
+```ts title="server/index.ts"
+import { media } from '@devvit/web/server';
+import { reddit, RichTextBuilder } from '@devvit/reddit';
+
+const uploaded = await media.upload({
+ url: 'https://example.com/cover.png',
+ type: 'image',
+});
+
+const richtext = new RichTextBuilder()
+ .paragraph((p) => {
+ p.text({ text: 'Uploaded image:' });
+ })
+ .paragraph((p) => {
+ p.image({
+ mediaUrl: uploaded.mediaUrl,
+ caption: 'Rendered from media.upload()',
+ });
+ });
+
+await reddit.submitPost({
+ subredditName: 'my_subreddit',
+ title: 'Post with uploaded media',
+ richtext,
+});
+```
+
+### Example: submit a comment with uploaded media using RichTextBuilder
+```ts title="server/index.ts"
+import { media } from '@devvit/web/server';
+import { reddit, RichTextBuilder } from '@devvit/reddit';
+
+// Parent can be a post id (t3_...) or comment id (t1_...)
+const parentId = 't3_abc123';
+
+const uploaded = await media.upload({
+ url: 'https://example.com/reply-image.png',
+ type: 'image',
+});
+
+const commentRichtext = new RichTextBuilder()
+ .paragraph((p) => {
+ p.text({ text: 'Here is the image:' });
+ })
+ .paragraph((p) => {
+ p.image({ mediaUrl: uploaded.mediaUrl });
+ });
+
+await reddit.submitComment({
+ id: parentId,
+ richtext: commentRichtext,
+});
+```
+
+### Example: raw RTJSON (without RichTextBuilder)
+If you prefer raw RTJSON, pass an object directly to `richtext`:
+
+```ts title="server/index.ts"
+import { media } from '@devvit/web/server';
+import { reddit } from '@devvit/reddit';
+
+const uploaded = await media.upload({
+ url: 'https://example.com/raw-rtjson.png',
+ type: 'image',
+});
+
+await reddit.submitComment({
+ id: 't3_abc123',
+ richtext: {
+ document: [
+ {
+ e: 'par',
+ c: [{ e: 'text', t: 'Raw RTJSON image:' }],
+ },
+ {
+ e: 'par',
+ c: [{ e: 'img', mediaUrl: uploaded.mediaUrl, c: 'RTJSON image node' }],
+ },
+ ],
+ },
+});
+```
+
+
+## Canvas screenshots
+
+The Canvas API is fully supported by Devvit. You can use it to capture screenshots of your app's current state and upload them using the media API.
+
+This is useful for letting users share their progress, achievements, or creations as image posts. Sharing screenshots is an effective way to build community engagement and increase visibility for your app.
+
+```ts title="client/screenshot.ts"
+// Capture the canvas as a data URL
+const canvas = document.querySelector('canvas');
+const dataUrl = canvas.toDataURL('image/png');
+
+// Send to server endpoint for upload
+const response = await fetch('/api/upload-screenshot', {
+ method: 'POST',
+ body: JSON.stringify({ image: dataUrl }),
+});
+```
+
+```ts title="server/index.ts"
+import { media } from '@devvit/web/server';
+
+app.post('/api/upload-screenshot', async (c) => {
+ const { image } = await c.req.json();
+
+ const response = await media.upload({
+ url: image, // data URL from canvas
+ type: 'image',
+ });
+
+ return c.json({ url: response.mediaUrl });
+});
+```
+
+## Notes and limits
+
+- Supported image upload formats: PNG, JPEG, WEBP, and GIF.
+- Maximum upload size: 20 MB.
+- WEBP uploads may be converted to JPEG in the returned Reddit URL.
diff --git a/versioned_docs/version-0.13/capabilities/server/overview.md b/versioned_docs/version-0.13/capabilities/server/overview.md
new file mode 100644
index 00000000..fdd17182
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/overview.md
@@ -0,0 +1,45 @@
+# Server Overview
+
+Devvit offers a wide variety of features that help you integrate your app with Reddit's APIs, scale your app free of charge using Reddit's backend, and more. The features in this section are executed on the server side. They can be imported in [Devvit Web](../devvit-web/devvit_web_overview.mdx) applications, as well as Mod Tools.
+
+Below is a brief explanation of all features in this section:
+
+## [HTTP fetch](./http-fetch.mdx)
+
+Allows you to make HTTP requests to external servers, subject to a review of the specific domains you are requesting from.
+
+## [Media uploads](./media-uploads.mdx)
+
+Allows you to build apps where the end user can upload custom images to Reddit's CDN. Uploaded media is subject to the same safety checks as every other media content uploaded to Reddit, ensuring community safety.
+
+## [Reddit API](./reddit-api.mdx)
+
+Allows you to query information from Reddit such as comments, posts and upvotes. Limited to installation scope of the application.
+
+## [Data storage (Redis)](./redis.mdx)
+
+Allows you to store app data in a key-value database, free of charge. Limited to the installation scope of the application.
+
+## [Scheduler](./scheduler.mdx)
+
+Allows you to run automated server-side tasks on a schedule, for example, checking for updates every hour.
+
+## [Secrets storage](./settings-and-secrets.mdx)
+
+Allows you to build an app where the moderator can store secret keys in a safe and scalable way. For example, if your app needs the installing moderator to provide their own keys to an external API.
+
+## [Triggers](./triggers.mdx)
+
+Allows you to run automated server-side tasks when certain events happen on Reddit, for example: when a new post is created, or when a new comment is created.
+
+## [User actions](./userActions.mdx)
+
+Allows you to execute some actions, like posting or commenting, on behalf of the user. This means that these new posts or comments will not show up as created by the app, but by the user that is currently using the app. Access to this feature is subject to review by Admins.
+
+## [Text fallback](./text_fallback.mdx)
+
+Allows you to specify how your interactive post is displayed on platforms that don't support Devvit, for example old.reddit.com
+
+## [Cache helper](./cache-helper.mdx)
+
+Allows you to cache fetch requests on the server side, reducing the number of requests made to external APIs and improving performance.
diff --git a/versioned_docs/version-0.13/capabilities/server/post-data.mdx b/versioned_docs/version-0.13/capabilities/server/post-data.mdx
new file mode 100644
index 00000000..dfcc117c
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/post-data.mdx
@@ -0,0 +1,298 @@
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Post data
+
+You can attach small amounts of data (2KB) to a post when creating it and update this data using the `postData` capability. This enables dynamic, stateful experiences available on posts without a server call. Post data is scoped to the post, not users.
+
+Post data is useful for storing game state, scores, or any other information that needs to persist with the post and be shared across all users.
+
+Post data is set when you submitPost and apps can access from the context object or do a server side call to update the post data on a Post object. For larger data, use [redis](./redis.mdx).
+
+:::note
+Post data is sent to the client. Never store secrets or sensitive information.
+:::
+
+## Creating posts with data
+When creating a post, include the `postData` parameter with your custom data object.
+
+
+
+
+```ts title="server/index.ts"
+import { context, reddit } from '@devvit/web/server';
+import type { JsonObject } from '@devvit/web/shared';
+
+type CreatePostResponse = {
+ postId: string;
+ message: string;
+};
+
+type ErrorResponse = {
+ error: string;
+};
+
+app.post('/api/create-post', async (c) => {
+ const { subredditName } = context;
+
+ if (!subredditName) {
+ return c.json({ error: 'Subreddit name is required' }, 400);
+ }
+
+ const postData: JsonObject = {
+ challengeNumber: 42,
+ totalGuesses: 0,
+ gameState: 'active',
+ pixels: [
+ [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 2, 2, 1, 0, 0, 0, 0],
+ [0, 0, 0, 2, 2, 1, 1, 1, 0, 0, 0],
+ [0, 0, 2, 2, 1, 1, 1, 1, 1, 0, 0],
+ [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
+ [1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1],
+ [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
+ [0, 0, 2, 2, 1, 1, 1, 1, 1, 0, 0],
+ [0, 0, 0, 2, 2, 1, 1, 1, 0, 0, 0],
+ [0, 0, 0, 0, 2, 2, 1, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0]
+ ],
+ };
+
+ const post = await reddit.submitCustomPost({
+ subredditName,
+ title: 'Post with custom data',
+ entry: 'default',
+ postData,
+ });
+
+ return c.json({
+ postId: post.id,
+ message: 'Post created successfully',
+ });
+});
+```
+
+
+
+
+```ts title="server/index.ts"
+import { context, reddit } from '@devvit/web/server';
+import type { JsonObject } from '@devvit/web/shared';
+
+type CreatePostResponse = {
+ postId: string;
+ message: string;
+};
+
+type ErrorResponse = {
+ error: string;
+};
+
+router.post(
+ '/api/create-post',
+ async (_req, res) => {
+ const { subredditName } = context;
+
+ if (!subredditName) {
+ return res.status(400).json({
+ error: 'Subreddit name is required'
+ });
+ }
+
+ const postData: JsonObject = {
+ challengeNumber: 42,
+ totalGuesses: 0,
+ gameState: 'active',
+ pixels: [
+ [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 2, 2, 1, 0, 0, 0, 0],
+ [0, 0, 0, 2, 2, 1, 1, 1, 0, 0, 0],
+ [0, 0, 2, 2, 1, 1, 1, 1, 1, 0, 0],
+ [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
+ [1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1],
+ [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
+ [0, 0, 2, 2, 1, 1, 1, 1, 1, 0, 0],
+ [0, 0, 0, 2, 2, 1, 1, 1, 0, 0, 0],
+ [0, 0, 0, 0, 2, 2, 1, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0]
+ ],
+ };
+
+ const post = await reddit.submitCustomPost({
+ subredditName,
+ title: 'Post with custom data',
+ entry: 'default',
+ postData,
+ });
+
+ res.json({
+ postId: post.id,
+ message: 'Post created successfully'
+ });
+ },
+);
+```
+
+
+
+
+## Updating post data
+To update post data after creation, fetch the post and use the `setPostData()` method.
+
+
+
+
+```ts title="server/index.ts"
+import { context, reddit } from '@devvit/web/server';
+import type { JsonObject } from '@devvit/web/shared';
+
+type UpdatePostDataRequest = {
+ favoriteColor?: string;
+ username?: string;
+};
+
+type UpdatePostDataResponse = {
+ success: true;
+ message: string;
+};
+
+type ErrorResponse = {
+ error: string;
+};
+
+app.post('/api/update-post-data', async (c) => {
+ const { postId } = context;
+ const { favoriteColor, username } = await c.req.json();
+
+ if (!postId) {
+ return c.json({ error: 'Post ID is required' }, 400);
+ }
+
+ try {
+ const post = await reddit.getPostById(postId);
+
+ // Get existing post data to merge with updates
+ const currentData = (context.postData || {}) as JsonObject;
+
+ await post.setPostData({
+ ...currentData,
+ favoriteColor: favoriteColor || 'unknown',
+ lastUpdatedBy: username || 'anonymous',
+ lastUpdatedAt: new Date().toISOString(),
+ });
+
+ return c.json({
+ success: true,
+ message: 'Post data updated successfully',
+ });
+ } catch (error) {
+ console.error('Error updating post data:', error);
+ return c.json({ error: 'Failed to update post data' }, 500);
+ }
+});
+```
+
+
+
+
+```ts title="server/index.ts"
+import { context, reddit } from '@devvit/web/server';
+import type { JsonObject } from '@devvit/web/shared';
+
+type UpdatePostDataRequest = {
+ favoriteColor?: string;
+ username?: string;
+};
+
+type UpdatePostDataResponse = {
+ success: true;
+ message: string;
+};
+
+type ErrorResponse = {
+ error: string;
+};
+
+router.post(
+ '/api/update-post-data',
+ async (req, res) => {
+ const { postId } = context;
+ const { favoriteColor, username } = req.body;
+
+ if (!postId) {
+ return res.status(400).json({
+ error: 'Post ID is required'
+ });
+ }
+
+ try {
+ const post = await reddit.getPostById(postId);
+
+ // Get existing post data to merge with updates
+ const currentData = (context.postData || {}) as JsonObject;
+
+ await post.setPostData({
+ ...currentData,
+ favoriteColor: favoriteColor || 'unknown',
+ lastUpdatedBy: username || 'anonymous',
+ lastUpdatedAt: new Date().toISOString(),
+ });
+
+ res.json({
+ success: true,
+ message: 'Post data updated successfully'
+ });
+ } catch (error) {
+ console.error('Error updating post data:', error);
+ res.status(500).json({
+ error: 'Failed to update post data'
+ });
+ }
+ },
+);
+```
+
+
+
+
+:::warning
+`setPostData()` replaces the entire post data object. To update specific fields while preserving others, merge the existing data with your updates.
+:::
+
+## Accessing post data
+Post data is available through `context.postData` in both client and server contexts.
+
+```tsx title="client/index.tsx"
+import { context } from '@devvit/web/client';
+
+export const App = () => {
+ return (
+
+ );
+}
+```
+
+## Limitations
+Post data supports:
+- JSON-serializable objects only
+- Maximum size of 2KB
+- Data persists with the post lifecycle (deleted when post is deleted)
+- Updates to post data don't trigger automatic re-renders. Implement polling or refresh mechanisms as needed
diff --git a/versioned_docs/version-0.13/capabilities/server/reddit-api.mdx b/versioned_docs/version-0.13/capabilities/server/reddit-api.mdx
new file mode 100644
index 00000000..a2b32781
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/reddit-api.mdx
@@ -0,0 +1,107 @@
+# Reddit API Overview
+
+The Reddit API allows you to read and write Reddit content such as posts / comments / upvotes, in order to integrate your app's behavior with the content of the community it's installed in.
+
+:::note
+Unlike traditional Reddit API usage, you don't need to create an app at [reddit.com/prefs/apps](https://www.reddit.com/prefs/apps) or manage API keys. Devvit handles authentication automatically when you enable the `reddit` permission in your app.
+:::
+
+## Private user data
+
+Devvit apps cannot access certain private user data. This data is private to the logged-in user and is not exposed through the Devvit platform:
+
+- **Subscribed subreddits** - The list of subreddits a user is subscribed to
+- **Upvoted and downvoted content** - Posts and comments the user has voted on
+- **Saved content** - Posts and comments the user has saved
+- **Recently viewed posts** - The user's browsing history
+- **Private profile information** - Any profile data that is not publicly visible
+- **Follows and friends** - The list of users someone follows (on reddit.com) or has friended (on Old Reddit)
+
+## The Reddit client
+
+Here's how to obtain a reference to the Reddit client
+
+```json title="devvit.json"
+{
+ "permissions": {
+ "reddit": true
+ }
+}
+```
+
+```ts title="server/index.ts"
+import { reddit } from '@devvit/reddit';
+```
+
+## Reddit Thing IDs
+
+Reddit uses prefixed IDs (called "things") to identify different types of content:
+
+| Prefix | Type | Example | Description |
+| ------ | ---- | ------- | ----------- |
+| `t1_` | Comment | `t1_abc123` | A comment on a post or reply to another comment |
+| `t2_` | User | `t2_xyz789` | A Reddit user account |
+| `t3_` | Post | `t3_def456` | A post |
+| `t4_` | Message | `t4_ghi012` | A private message |
+| `t5_` | Subreddit | `t5_jkl345` | A subreddit community |
+
+These IDs are returned by API methods and used when referencing specific content:
+
+```ts
+// Get a post by its full ID
+const post = await reddit.getPostById('t3_abc123');
+
+// Get a comment by its full ID
+const comment = await reddit.getCommentById('t1_xyz789');
+
+// A comment's parentId can be either a post (t3_) or another comment (t1_)
+const parentId = comment.parentId; // 't3_abc123' or 't1_def456'
+```
+
+## Example usage
+
+### Submitting a post
+```ts
+import { Devvit } from '@devvit/public-api';
+import { context, reddit } from '@devvit/web/server';
+
+export const createPost = async () => {
+ const { subredditName } = context;
+ if (!subredditName) {
+ throw new Error('subredditName is required');
+ }
+
+ return await reddit.submitCustomPost({
+ userGeneratedContent: {
+ text: 'Hello there! This is a post from a Devvit app',
+ },
+ subredditName: subredditName,
+ title: 'New Post',
+ entry: 'default',
+ });
+};
+```
+
+### Submitting a comment
+
+:::note
+Auto-comments should be used to spark conversation in the post comments, but you should avoid lower-signal updates (e.g., level/progress pings).
+:::
+
+
+```ts
+import { context, reddit } from '@devvit/web/server';
+
+export const createComment = async () => {
+ const { subredditName } = context;
+ if (!subredditName) {
+ throw new Error('subredditName is required');
+ }
+
+ reddit.submitComment({
+ postId: 't3_123456', // Replace with the actual post ID
+ text: 'This is a comment from a Devvit app',
+ runAs: 'USER' // Optional: specify the user to run as
+ });
+};
+```
diff --git a/versioned_docs/version-0.13/capabilities/server/redis.mdx b/versioned_docs/version-0.13/capabilities/server/redis.mdx
new file mode 100644
index 00000000..61a62107
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/redis.mdx
@@ -0,0 +1,1289 @@
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Redis
+
+You can add a database to your app to store and retrieve data. The Redis plugin is designed to be fast, scalable, and secure. It supports a subset of the full Redis API, including:
+
+- [Transactions](#transactions) for things like counting votes atomically in polls
+- [String operations](#strings) for persisting information
+- [Number operations](#numbers) for incrementing numbers
+- [Sorted sets](#sorted-set) for creating leaderboards
+- [Hashes](#hash) for managing a collection of key-value pairs
+- [Bitfields](#bitfield) for efficient operation on sequences of bits
+
+Each installation of an app is uniquely name-spaced, which means Redis data is siloed by subreddit. Keep in mind that there won’t be a single source of truth for all installations of your app, since each app installation can only access the data that it has stored in the Redis database.
+
+## Limits and quotas
+
+- Max commands per second: 40000
+- Max request size: 5 MB
+- Max storage: 500 MB
+- [Pipelining](https://redis.io/docs/latest/develop/using-commands/pipelining/) is not supported
+- [Sets](https://redis.io/docs/latest/commands/set/) - only sorted sets are supported
+- No support for listing keys
+- No support for lua scripts to execute custom logic on redis server
+
+All limits are applied at a per-installation granularity.
+
+## Examples
+
+### Menu actions
+
+```js title="devvit.json"
+ {
+ "menuActions": [
+ {
+ "label": "Redis Test",
+ "endpoint": "/internal/menu/redis-test",
+ "forUserType": "moderator",
+ "location": "subreddit"
+ }
+ ]
+ }
+ ```
+
+
+
+ ```ts title="server/index.ts"
+ import { redis } from '@devvit/redis';
+ import type { MenuItemRequest, UiResponse } from '@devvit/web/shared';
+
+ app.post('/internal/menu/redis-test', async (c) => {
+ const _request = await c.req.json();
+ const key = 'hello';
+ await redis.set(key, 'world');
+ const value = await redis.get(key);
+ console.log(`${key}: ${value}`);
+ return c.json({ status: 'ok' });
+ });
+ ```
+
+
+
+
+ ```ts title="server/index.ts"
+ import { redis } from '@devvit/redis';
+ import type { MenuItemRequest, UiResponse } from '@devvit/web/shared';
+
+ router.post(
+ "/internal/menu/redis-test",
+ async (_req, res) => {
+ const key = 'hello';
+ await redis.set(key, 'world');
+ const value = await redis.get(key);
+ console.log(`${key}: ${value}`);
+ res.json({ status: 'ok' });
+ },
+ );
+ ```
+
+
+
+
+
+### Games
+
+You can take a look at this [Game Template](https://github.com/reddit/devvit-template-phaser/) to see a basic implementation of Redis in a game built with Phaser.JS
+
+## Supported Redis commands
+
+:::note
+Not all Redis features are supported. If you would like to request a specific Redis feature, please reach out to our team [via modmail](https://www.reddit.com/message/compose/?to=%2Fr%2FDevvit) or Discord.
+:::
+
+For all examples below, we assume that you already have obtained a Redis Client. Here's how to obtain a Redis Client:
+
+```json title="devvit.json"
+ {
+ "permissions": {
+ "redis": true
+ }
+ }
+ ```
+ ```ts title="server/index.ts"
+ import { redis } from '@devvit/redis';
+ ```
+
+
+### Simple read/write
+
+| **Command** | **Action** | **Limits** |
+| ------------------------------------------ | --------------------------------------------------------------------- | ---------- |
+| [get](https://redis.io/commands/get) | Gets the value of key. | None |
+| [set](https://redis.io/commands/set) | Sets key to hold a string value. | Subject to storage quota gating (writes may be blocked if quota exceeded) |
+| [exists](https://redis.io/commands/exists) | Returns number of given keys that exist. | None |
+| [del](https://redis.io/commands/del) | Removes the specified keys. | None |
+| [type](https://redis.io/commands/type) | Returns the string representation of the type of value stored at key. | None |
+| [rename](https://redis.io/commands/rename) | Renames a key. | None |
+
+
+
+ Code Example
+
+
+```tsx
+async function simpleReadWriteExample() {
+ // Set a key
+ await redis.set('color', 'red');
+
+ // Check if a key exists
+ console.log('Key exists: ' + (await redis.exists('color')));
+
+ // Get a key
+ console.log('Color: ' + (await redis.get('color')));
+
+ // Get the type of a key
+ console.log('Type: ' + (await redis.type('color')));
+
+ // Delete a key
+ await redis.del('color');
+}
+```
+
+```bash
+Color: red
+Type: string
+```
+
+
+
+### Batch read/write
+
+| **Command** | **Action** | **Limits** |
+| -------------------------------------- | ----------------------------------------------- | ---------- |
+| [mGet](https://redis.io/commands/mget) | Returns the values of all specified keys. | None |
+| [mSet](https://redis.io/commands/mset) | Sets the given keys to their respective values. | Subject to storage quota gating (writes may be blocked if quota exceeded) |
+
+
+
+ Code Example
+
+
+```tsx
+async function batchReadWriteExample() {
+ // Set multiple keys at once
+ await redis.mSet({
+ name: 'Devvit',
+ occupation: 'Developer',
+ yearsOfExperience: '9000',
+ });
+
+ // Get multiple keys
+ console.log('Result: ' + (await redis.mGet(['name', 'occupation'])));
+}
+```
+
+```bash
+Result: Devvit,Developer
+```
+
+
+
+### Strings
+
+| **Command** | **Action** | **Limits** |
+| ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------- |
+| [getRange](https://redis.io/commands/getrange) | Returns the substring of the string value stored at key, determined by the offsets start and end (both are inclusive). | None |
+| [setRange](https://redis.io/commands/setrange) | Overwrites part of the string stored at key, starting at the specified offset, for the entire length of value. | Subject to storage quota gating (writes may be blocked if quota exceeded) |
+| [strLen](https://redis.io/commands/strlen) | Returns the length of the string value stored at key. | None |
+
+
+
+ Code Example
+
+
+```tsx
+async function stringsExample() {
+ // First, set 'word' to 'tacocat'
+ await redis.set('word', 'tacocat');
+
+ // Use getRange() to get the letters in 'word' between index 0 to 3, inclusive
+ console.log('Range from index 0 to 3: ' + (await redis.getRange('word', 0, 3)));
+
+ // Use setRange() to insert 'blue' at index 0
+ await redis.setRange('word', 0, 'blue');
+
+ console.log('Word after using setRange(): ' + (await redis.get('word')));
+
+ // Use strLen() to verify the word length
+ console.log('Word length: ' + (await redis.strLen('word')));
+}
+```
+
+```bash
+Range from index 0 to 3: taco
+Word after using setRange(): bluecat
+Word length: 7
+```
+
+
+
+### Hash
+
+Redis hashes can store up to ~ 4.2 billion key-value pairs. We recommend using hash for managing collections of key-value pairs whenever possible and iterating over it using a combination of `hscan`, `hkeys` and `hgetall`.
+
+| **Command** | **Action** | **Limits** |
+| --------------------------------------------- | --------------------------------------------------------------------------------- | ---------- |
+| [hGet](https://redis.io/commands/hget) | Returns the value associated with field in the hash stored at key. | None |
+| [hMGet](https://redis.io/commands/hmget) | Returns the value of all specified field in the hash stored at multiple keys. | May be disabled for your app (allowlisted feature) |
+| [hSet](https://redis.io/commands/hset/) | Sets the specified fields to their respective values in the hash stored at key. | Subject to storage quota gating (writes may be blocked if quota exceeded) |
+| [hSetNX](https://redis.io/commands/hsetnx/) | Sets field in the hash stored at key to value, only if field does not yet exist.ƒ | Subject to storage quota gating (writes may be blocked if quota exceeded) |
+| [hDel](https://redis.io/commands/hdel/) | Removes the specified fields from the hash stored at key. | None |
+| [hGetAll](https://redis.io/commands/hgetall/) | Returns a map of fields and their values stored in the hash. | None |
+| [hKeys](https://redis.io/commands/hkeys/) | Returns all field names in the hash stored at key. | None |
+| [hScan](https://redis.io/commands/hscan/) | Iterates fields of Hash types and their associated values. | No server-side cap; uses requested count |
+| [hIncrBy](https://redis.io/commands/hincrby/) | Increments the score of member in the sorted set stored at key by value. | Subject to storage quota gating (writes may be blocked if quota exceeded) |
+| [hLen](https://redis.io/commands/hlen/) | Returns the number of fields contained in the hash stored at key. | None |
+
+
+
+ Code Examples
+
+
+**Example 1**
+
+```tsx
+// Example using hGet(), hSet(), and hDel()
+async function hashExample1() {
+ // Set 'inventory' with multiple fields and values
+ await redis.hSet('inventory', {
+ sword: '1',
+ potion: '4',
+ shield: '2',
+ stones: '8',
+ });
+
+ // Get the value of 'shield' from 'inventory'
+ console.log('Shield count: ' + await redis.hGet('inventory', 'shield'));
+
+ // Get the values of both of 'shield' and 'potion' from 'inventory'
+ console.log('Shield and potion count: ' + await redis.hMGet('inventory', ['shield', 'potion']));
+
+ // Delete some fields from 'inventory'
+ console.log(
+ 'Number of fields deleted: ' +
+ await redis.hDel('inventory', ['sword', 'shield', 'stones']);
+ );
+}
+```
+
+```bash
+Shield count: 2
+Shield and potion count: 2,4
+Number of fields deleted: 3
+```
+
+---
+
+**Example 2**
+
+```tsx
+// Example using hGetAll()
+async function hashExample2() {
+ // Set 'groceryList' to fields containing products with quantities
+ await redis.hSet('groceryList', {
+ eggs: '12',
+ apples: '3',
+ milk: '1',
+ });
+
+ // Get the groceryList record
+ const record = await redis.hGetAll('groceryList');
+
+ if (record != undefined) {
+ console.log('Eggs: ' + record.eggs + ', Apples: ' + record.apples + ', Milk: ' + record.milk);
+ }
+}
+```
+
+```bash
+Eggs: 12, Apples: 3, Milk: 1
+```
+
+---
+
+**Example 3**
+
+```tsx
+// Example using hKeys()
+async function hashExample3() {
+ await redis.hSet('prices', {
+ chair: '48',
+ desk: '95',
+ whiteboard: '23',
+ });
+
+ console.log('Keys: ' + (await redis.hKeys('prices')));
+}
+```
+
+```bash
+Keys: chair,desk,whiteboard
+```
+
+---
+
+**Example 4**
+
+```tsx
+// Example using hScan()
+async function hashExample4() {
+ await redis.hSet('userInfo', {
+ name: 'Bob',
+ startDate: '01-05-20',
+ totalAwards: '12',
+ });
+
+ // Scan and interate over all the fields within 'userInfo'
+ const hScanResponse = await redis.hScan('userInfo', 0);
+
+ hScanResponse.fieldValues.forEach((x) => {
+ console.log("Field: '" + x.field + "', Value: '" + x.value + "'");
+ });
+}
+```
+
+```bash
+Field: 'name', Value: 'Bob'
+Field: 'totalAwards', Value: '12'
+Field: 'startDate', Value: '01-05-20'
+```
+
+---
+
+**Example 5**
+
+```tsx
+// Example using hIncrBy()
+async function hashExample5() {
+ // Set user123's karma to 100
+ await redis.hSet('user123', { karma: '100' });
+
+ // Increase user123's karma by 5
+ console.log('Updated karma: ' + (await redis.hIncrBy('user123', 'karma', 5)));
+}
+```
+
+```bash
+Updated karma: 105
+```
+
+---
+
+**Example 6**
+
+```tsx
+// Example using hLen()
+async function hashExample6() {
+ await redis.hSet('supplies', {
+ paperclips: '25',
+ pencils: '10',
+ erasers: '5',
+ pens: '7',
+ });
+
+ console.log('Number of fields: ' + (await redis.hLen('supplies')));
+}
+```
+
+```bash
+Number of fields: 4
+```
+
+
+
+### Numbers
+
+| **Command** | **Action** | **Limits** |
+| ------------------------------------------ | ------------------------------------------------- | ---------- |
+| [incrBy](https://redis.io/commands/incrby) | Increments the number stored at key by increment. | Subject to storage quota gating (writes may be blocked if quota exceeded) |
+
+
+
+ Code Example
+
+
+```tsx
+async function numbersExample() {
+ await redis.set('totalPoints', '53');
+
+ console.log('Updated points: ' + (await redis.incrBy('totalPoints', 100)));
+}
+```
+
+```bash
+Updated points: 153
+```
+
+
+
+### Key expiration
+
+| **Command** | **Action** | **Limits** |
+| --------------------------------------------------- | ----------------------------------------------------------------- | ---------- |
+| [expire](https://redis.io/commands/expire/) | Sets a timeout on key. | None |
+| [expireTime](https://redis.io/commands/expiretime/) | Returns the remaining seconds at which the given key will expire. | None |
+
+
+
+ Code Example
+
+
+```tsx
+async function keyExpirationExample() {
+ // Set a key 'product' with value 'milk'
+ await redis.set('product', 'milk');
+
+ // Get the current expireTime for the product
+ console.log('Expire time: ' + (await redis.expireTime('product')));
+
+ // Set the product to expire in 60 seconds
+ await redis.expire('product', 60);
+
+ // Get the updated expireTime for the product
+ console.log('Updated expire time: ' + (await redis.expireTime('product')));
+}
+```
+
+```bash
+Expire time: 0
+Updated expire time: 60
+```
+
+
+
+### [Transactions](https://redis.io/topics/transactions)
+
+Redis transactions allow a group of commands to be executed in a single isolated step. For example, to implement voting action in a polls app, these three actions need to happen together:
+
+- Store the selected option for the user.
+- Increment the count for selected option.
+- Add the user to voted user list.
+
+The `watch` command provides an entrypoint for transactions. It returns a [TxClientLike](https://developers.reddit.com/docs/api/public-api/#-txclientlike) which can be used to call `multi`, `exec`, `discard`, `unwatch`, and all other Redis commands to be executed within a transaction.
+
+You can sequence all of the above steps in a single transaction using `multi` and `exec` to ensure that either all of the steps happen together or none at all.
+
+If an error occurs inside a transaction before `exec` is called, Redis discards the transaction automatically. See the Redis docs: [Errors inside a transaction](https://redis.io/docs/latest/develop/interact/transactions/#errors-inside-a-transaction) for more info.
+
+| **Command** | **Action** | **Limits** |
+| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
+| [multi](https://redis.io/commands/multi/) | Marks the start of a transaction block. | Max concurrent transactions per installation: 20 (default) |
+| [exec](https://redis.io/commands/exec/) | Executes all previously queued commands in a transaction and restores the connection state to normal. | Transaction execution timeout: 5 seconds |
+| [discard](https://redis.io/commands/discard/) | Flushes all previously queued commands in a transaction and restores the connection state to normal. | None |
+| [watch](https://redis.io/commands/watch/) | Marks the given keys to be watched for conditional execution of a transaction. `watch` returns a [TxClientLike](https://developers.reddit.com/docs/api/public-api/#-txclientlike) which should be used to call Redis commands in a transaction. | None |
+| [unwatch](https://redis.io/commands/unwatch/) | Flushes all the previously watched keys for a transaction. | None |
+
+
+
+ Code Examples
+
+
+**Example 1**
+
+```tsx
+// Example using exec()
+async function transactionsExample1() {
+ await redis.mSet({ quantity: '5', karma: '32' });
+
+ const txn = await redis.watch('quantity');
+
+ await txn.multi(); // Begin a transaction
+ await txn.incrBy('karma', 10);
+ await txn.set('name', 'Devvit');
+ await txn.exec(); // Execute the commands in the transaction
+
+ console.log(
+ 'Keys after completing transaction: ' +
+ (await redis.mGet(['quantity', 'karma', 'name']))
+ );
+}
+```
+
+```bash
+Keys after completing transaction: 5,42,Devvit
+```
+
+---
+
+**Example 2**
+
+```tsx
+// Example using discard()
+async function transactionsExample2() {
+ await redis.set('price', '25');
+
+ const txn = await redis.watch('price');
+
+ await txn.multi(); // Begin a transaction
+ await txn.incrBy('price', 5);
+ await txn.discard(); // Discard the commands in the transaction
+
+ console.log('Price value: ' + (await redis.get('price'))); // 'price' should still be '25'
+}
+```
+
+```bash
+Price value: 25
+```
+
+---
+
+**Example 3**
+
+```tsx
+// Example using unwatch()
+async function transactionsExample3() {
+ await redis.set('gold', '50');
+
+ const txn = await redis.watch('gold');
+
+ await txn.multi(); // Begin a transaction
+ await txn.incrBy('gold', 30);
+ await txn.unwatch(); // Unwatch "gold"
+
+ // Now that "gold" has been unwatched, we can increment its value
+ // outside the transaction without canceling the transaction
+ await redis.incrBy('gold', -20);
+
+ await txn.exec(); // Execute the commands in the transaction
+
+ console.log('Gold value: ' + (await redis.get('gold'))); // The value of 'gold' should be 50 + 30 - 20 = 60
+}
+```
+
+```bash
+Gold value: 60
+```
+
+
+
+### Sorted set
+
+| **Command** | **Action** | **Limits** |
+| --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
+| [zAdd](https://redis.io/commands/zadd/) | Adds all the specified members with the specified scores to the sorted set stored at key. | Subject to storage quota gating (writes may be blocked if quota exceeded) |
+| [zCard](https://redis.io/commands/zcard) | Returns the sorted set cardinality (number of elements) of the sorted set stored at key. | None |
+| [zRange](https://redis.io/commands/zrange/) | Returns the specified range of elements in the sorted set stored at key.
When using `by: 'lex'`, the start and stop inputs will be prepended with `[` by default, unless they already begin with `[`, `(` or are one of the special values `+` or `-`. | BYSCORE/BYLEX: LIMIT count capped to 1000 per call (server default). RANK: no server cap. Client default for by: 'score'/'lex' is count=1000 when no limit is provided. |
+| [zRem](https://redis.io/commands/zrem/) | Removes the specified members from the sorted set stored at key. | None |
+| [zScore](https://redis.io/commands/zscore/) | Returns the score of member in the sorted set at key. | None |
+| [zRank](https://redis.io/commands/zrank/) | Returns the rank of member in the sorted set stored at key. | None |
+| [zIncrBy](https://redis.io/commands/zincrby/) | Increments the score of member in the sorted set stored at key by value. | Subject to storage quota gating (writes may be blocked if quota exceeded) |
+| [zScan](https://redis.io/commands/zscan/) | Iterates elements of sorted set types and their associated scores. Note that there is no guaranteed ordering of elements in the result. | No server-side cap; uses requested count |
+| [zRemRangeByLex](https://redis.io/commands/zremrangebylex/) | When all elements in a sorted set are inserted with the same score, this command removes the elements at key between the lexicographical range specified by min and max. | None |
+| [zRemRangeByRank](https://redis.io/commands/zremrangebyrank/) | Removes all elements in the sorted set stored at key with rank between start and stop. | None |
+| [zRemRangeByScore](https://redis.io/commands/zremrangebyscore/) | Removes all elements in the sorted set stored at key with a score between min and max (inclusive). | None |
+
+
+
+ Code Examples
+
+
+**Example 1**
+
+```tsx
+// Example using zRange() with by 'score'
+async function sortedSetExample1() {
+ await redis.zAdd(
+ 'leaderboard',
+ { member: 'louis', score: 37 },
+ { member: 'fernando', score: 10 },
+ { member: 'caesar', score: 20 },
+ { member: 'alexander', score: 25 }
+ );
+
+ // Cardinality should be '4' as there are 4 elements in the leaderboard set
+ console.log('Cardinality: ' + (await redis.zCard('leaderboard')));
+
+ // View elements with scores between 0 and 30 inclusive, sorted by score
+ let scores = await redis.zRange('leaderboard', 0, 30, { by: 'score' });
+ console.log('Scores: ' + JSON.stringify(scores));
+
+ // Remove 'fernando' from the leaderboard
+ await redis.zRem('leaderboard', ['fernando']);
+
+ // View the elements sorted by score again. This time 'fernando' should not appear in the output
+ scores = await redis.zRange('leaderboard', 0, 30, { by: 'score' });
+ console.log('Updated scores: ' + JSON.stringify(scores));
+
+ // View caesar's score
+ console.log("Caesar's score: " + (await redis.zScore('leaderboard', 'caesar')));
+}
+```
+
+```bash
+Cardinality: 4
+Scores: [{"score":10,"member":"fernando"},{"score":20,"member":"caesar"},{"score":25,"member":"alexander"}]
+Updated scores: [{"score":20,"member":"caesar"},{"score":25,"member":"alexander"}]
+Caesar's score: 20
+```
+
+---
+
+**Example 2**
+
+```tsx
+// Example using zRange() with by 'lex'
+async function sortedSetExample2() {
+ await redis.zAdd(
+ 'checkpoints',
+ { member: 'delta', score: 0 },
+ { member: 'omega', score: 0 },
+ { member: 'alpha', score: 0 },
+ { member: 'charlie', score: 0 }
+ );
+
+ // View elements between the words 'alpha' and 'fox' inclusive, sorted lexicographically
+ // Note that 'by: "lex"' only works if all elements have the same score
+ const members = await redis.zRange('checkpoints', 'alpha', 'fox', { by: 'lex' });
+ console.log('Members: ' + JSON.stringify(members));
+}
+```
+
+```bash
+Members: [{"score":0,"member":"alpha"},{"score":0,"member":"charlie"},{"score":0,"member":"delta"}]
+```
+
+---
+
+**Example 3**
+
+```tsx
+// Example using zRange() with by 'rank'
+async function sortedSetExample3() {
+ await redis.zAdd(
+ 'grades',
+ { member: 'sam', score: 80 },
+ { member: 'norma', score: 95 },
+ { member: 'alex', score: 77 },
+ { member: 'don', score: 84 },
+ { member: 'zeek', score: 92 }
+ );
+
+ // View elements with a rank between 2 and 4 inclusive. Note that ranks start at index 0.
+ const members = await redis.zRange('grades', 2, 4, { by: 'rank' });
+ console.log('Members: ' + JSON.stringify(members));
+}
+```
+
+```bash
+Members: [{"score":84,"member":"don"},{"score":92,"member":"zeek"},{"score":95,"member":"norma"}]
+```
+
+---
+
+**Example 4**
+
+```tsx
+// Example using zRank() and zIncrBy()
+async function sortedSetExample4() {
+ await redis.zAdd(
+ 'animals',
+ { member: 'zebra', score: 92 },
+ { member: 'cat', score: 100 },
+ { member: 'dog', score: 95 },
+ { member: 'elephant', score: 97 }
+ );
+
+ // View the rank of 'dog' in the animals set
+ // Rank should be '1' since 'dog' has the second lowest score. Note that ranks start at index 0.
+ console.log("Dog's rank: " + (await redis.zRank('animals', 'dog')));
+
+ // View the rank of 'zebra'
+ console.log("Zebra's rank: " + (await redis.zRank('animals', 'zebra')));
+
+ // Increase the score of 'dog' by 10
+ await redis.zIncrBy('animals', 'dog', 10);
+
+ // View the rank of 'dog' again. This time it should be '3' because dog has the highest score.
+ console.log(
+ "Dog's rank after incrementing score: " + (await redis.zRank('animals', 'dog'))
+ );
+}
+```
+
+```bash
+Dog's rank: 1
+Zebra's rank: 0
+Dog's rank after incrementing score: 3
+```
+
+---
+
+**Example 5**
+
+```tsx
+// Example using zRemRangeByLex()
+async function sortedSetExample5() {
+ await redis.zAdd(
+ 'fruits',
+ { member: 'kiwi', score: 0 },
+ { member: 'mango', score: 0 },
+ { member: 'banana', score: 0 },
+ { member: 'orange', score: 0 },
+ { member: 'apple', score: 0 }
+ );
+
+ // Remove fruits alphabetically ordered between 'kiwi' inclusive and 'orange' exclusive
+ // Note: The symbols '[' and '(' indicate inclusive or exclusive, respectively. These must be included in the call to zRemRangeByLex().
+ await redis.zRemRangeByLex('fruits', '[kiwi', '(orange');
+
+ // Only 'apple', 'banana', and 'orange' should remain in the set
+ const zScanResponse = await redis.zScan('fruits', 0);
+ console.log('zScanResponse: ' + JSON.stringify(zScanResponse));
+}
+```
+
+```bash
+zScanResponse: {"cursor":0,"members":[{"score":0,"member":"apple"},{"score":0,"member":"banana"},{"score":0,"member":"orange"}]}
+```
+
+---
+
+**Example 6**
+
+```tsx
+// Example using zRemRangeByRank()
+async function sortedSetExample6() {
+ await redis.zAdd(
+ 'fruits',
+ { member: 'kiwi', score: 10 },
+ { member: 'mango', score: 20 },
+ { member: 'banana', score: 30 },
+ { member: 'orange', score: 40 },
+ { member: 'apple', score: 50 }
+ );
+
+ // Remove fruits ranked 1 through 3 inclusive
+ await redis.zRemRangeByRank('fruits', 1, 3);
+
+ // Only 'kiwi' and 'apple' should remain in the set
+ const zScanResponse = await redis.zScan('fruits', 0);
+ console.log('zScanResponse: ' + JSON.stringify(zScanResponse));
+}
+```
+
+```bash
+zScanResponse: {"cursor":0,"members":[{"score":10,"member":"kiwi"},{"score":50,"member":"apple"}]}
+```
+
+---
+
+**Example 7**
+
+```tsx
+// Example using zRemRangeByScore() example
+async function sortedSetExample7() {
+ await redis.zAdd(
+ 'fruits',
+ { member: 'kiwi', score: 10 },
+ { member: 'mango', score: 20 },
+ { member: 'banana', score: 30 },
+ { member: 'orange', score: 40 },
+ { member: 'apple', score: 50 }
+ );
+
+ // Remove fruits scored between 30 and 50 inclusive
+ await redis.zRemRangeByScore('fruits', 30, 50);
+
+ // Only 'kiwi' and 'mango' should remain in the set
+ const zScanResponse = await redis.zScan('fruits', 0);
+ console.log('zScanResponse: ' + JSON.stringify(zScanResponse));
+}
+```
+
+```bash
+zScanResponse: {"cursor":0,"members":[{"score":10,"member":"kiwi"},{"score":20,"member":"mango"}]}
+```
+
+
+
+### Bitfield
+
+| **Command** | **Action** | **Limits** |
+| ----------------------------------------------------------- | ------------------------------------------------- | ---------- |
+| [bitfield](https://redis.io/docs/latest/commands/bitfield/) | Performs a sequence of operations on a bit string | Subject to storage quota gating (writes may be blocked if quota exceeded) |
+
+
+
+ Code Example
+
+
+```tsx
+async function bitfieldExample() {
+ const setBits: number[] = await redis.bitfield('foo', 'set', 'i5', '#0', 11);
+ console.log('Set result: ' + setBits); // [0]
+
+ const getBits: number[] = await redis.bitfield('foo', 'get', 'i5', '#0');
+ console.log('Get result: ' + setBits); // [11]
+
+ const manyOperations: number[] = await redis.bitfield(
+ 'bar',
+ 'set',
+ 'u2',
+ 0,
+ 3,
+ 'get',
+ 'u2',
+ 0,
+ 'incrBy',
+ 'u2',
+ 0,
+ 1,
+ 'overflow',
+ 'sat',
+ 'get',
+ 'u2',
+ 0,
+ 'set',
+ 'u2',
+ 0,
+ 3,
+ 'incrBy',
+ 'u2',
+ 0,
+ 1
+ );
+ console.log('Results of many operations: ' + manyOperations); // [0, 3, 0, 0, 3, 3]
+}
+```
+
+```bash
+fooResults: [1, 0]
+barResults: [0, 3, 0, 0, 3, 3]
+```
+
+
+
+## Compression (Experimental)
+
+The Redis package includes a `redisCompressed` client that transparently handles compression and decompression of values. This is useful for storing large strings or JSON objects that exceed the Redis storage limits or to optimize storage usage.
+
+To use it, update your import:
+
+```ts
+// import { redis } from '@devvit/redis';
+import { redisCompressed as redis } from '@devvit/redis';
+```
+
+:::warning
+**One-Way Migration**: Once you start using `redisCompressed` and writing compressed data, switching back to the standard `redis` client will result in errors when reading that data, as the standard client does not know how to decompress the values.
+:::
+
+The `redisCompressed` client automatically:
+- Compresses values on write (`set`, `hSet`, `mSet`, `hSetNX`) if it saves space.
+- Decompresses values on read (`get`, `hGet`, `mGet`, `hMGet`, `hGetAll`).
+
+**Note:** Existing uncompressed data is **not** automatically compressed when read. It is only compressed when you write it back. To migrate existing large datasets, you need to read and re-write the data.
+
+### Migration Example
+
+Migrating large datasets can take time. To avoid the 30-second execution timeout, we recommend using a scheduled job that processes data in chunks and "daisy chains" itself until completion.
+
+Here is an example of how to implement a migration tool using a Menu Item and the Scheduler.
+
+Register your form handler, menu trigger, and scheduler endpoint here.
+
+```json
+{
+ "forms": {
+ "migrateExampleForm": "/internal/form/ops/migrate-example"
+ },
+ "menu": {
+ "items": [
+ {
+ "label": "[ops] Migrate Data to Compression",
+ "location": "subreddit",
+ "forUserType": "moderator",
+ "endpoint": "/internal/menu/ops/migrate-example"
+ }
+ ]
+ },
+ "scheduler": {
+ "tasks": {
+ "migrate-example-data": {
+ "endpoint": "/internal/scheduler/migrate-example-data"
+ }
+ }
+ }
+}
+```
+
+Add these route handlers to your server.
+
+
+
+
+```ts
+import { redis, scheduler, type TaskRequest, type TaskResponse } from '@devvit/web/server';
+// Import the compressed client
+import { redisCompressed } from '@devvit/redis';
+import type { MenuItemRequest, UiResponse } from '@devvit/web/shared';
+
+type MigrateExampleFormRequest = {
+ startCursor?: string;
+ chunkSize?: number;
+};
+
+type MigrateExampleJobData = {
+ cursor?: number | string;
+ chunkSize?: number;
+ processed?: number;
+};
+
+const MY_DATA_HASH_KEY = 'my:app:large:dataset';
+
+// 1. Menu Endpoint: Returns the form definition
+app.post('/internal/menu/ops/migrate-example', async (c) => {
+ const _request = await c.req.json();
+ return c.json({
+ showForm: {
+ name: 'migrateExampleForm', // Must match key in devvit.json "forms"
+ form: {
+ title: 'Migrate Hash to Compression',
+ acceptLabel: 'Start Migration',
+ fields: [
+ {
+ name: 'startCursor',
+ label: 'Start Cursor (0 for beginning)',
+ type: 'string',
+ defaultValue: '0',
+ },
+ {
+ name: 'chunkSize',
+ label: 'Items per batch',
+ type: 'number',
+ defaultValue: 20000,
+ },
+ ],
+ },
+ },
+ });
+});
+
+// 2. Form Handler: Receives input and schedules the first job
+app.post('/internal/form/ops/migrate-example', async (c) => {
+ const body = await c.req.json().catch(
+ () => ({} as MigrateExampleFormRequest)
+ );
+ const cursor = body.startCursor || '0';
+ const size = Number(body.chunkSize) || 20000;
+
+ console.log(`[Migration] Manual start requested. Cursor: ${cursor}, Chunk: ${size}`);
+
+ // Kick off the first job in the chain
+ await scheduler.runJob({
+ name: 'migrate-example-data',
+ runAt: new Date(), // Run immediately
+ data: {
+ cursor,
+ chunkSize: size,
+ processed: 0,
+ },
+ });
+
+ return c.json({
+ showToast: {
+ text: 'Migration started in background',
+ appearance: 'success',
+ },
+ });
+});
+
+// 3. Scheduler Endpoint: The recursive worker
+app.post('/internal/scheduler/migrate-example-data', async (c) => {
+ const startTime = Date.now();
+
+ try {
+ const body = await c.req.json>().catch(
+ () => ({} as TaskRequest)
+ );
+ const data = body.data;
+
+ let cursor = Number(data?.cursor) || 0;
+ const chunkSize = Number(data?.chunkSize) || 20000;
+ const processedTotal = Number(data?.processed) || 0;
+
+ console.log(`[Migration] Job started. Cursor: ${cursor}, Target Chunk: ${chunkSize}`);
+
+ let keepRunning = true;
+ let processedInJob = 0;
+ const SCAN_COUNT = 250; // Internal batch size to keep event loop moving
+
+ while (keepRunning) {
+ // Stop if we've processed enough items for this single execution
+ if (processedInJob >= chunkSize) {
+ break;
+ }
+
+ const { cursor: nextCursor, fieldValues } = await redis.hScan(
+ MY_DATA_HASH_KEY,
+ cursor,
+ undefined, // match pattern
+ SCAN_COUNT
+ );
+
+ // Parallel Processing:
+ // We treat the batch as a set of promises to execute simultaneously.
+ // Promise.allSettled ensures one failure doesn't crash the whole job.
+ await Promise.allSettled(
+ fieldValues.map(async ({ field, value }) => {
+ // LOGIC:
+ // 1. We read the raw value.
+ // 2. We write it back using 'redisCompressed'.
+ // The proxy detects the write and compresses the string if beneficial.
+ if (value && value.length > 0) {
+ await redisCompressed.hSet(MY_DATA_HASH_KEY, { [field]: value });
+ }
+ })
+ );
+
+ processedInJob += fieldValues.length;
+
+ // Cursor logic: 0 means iteration is complete
+ if (nextCursor === 0) {
+ cursor = 0;
+ keepRunning = false;
+ } else {
+ cursor = nextCursor;
+ }
+
+ // Safety: Check execution time.
+ // If we are close to 30s (Devvit limit), stop early and requeue.
+ if (Date.now() - startTime > 20000) {
+ console.log('[Migration] Time limit approaching, stopping early.');
+ keepRunning = false;
+ }
+ }
+
+ const newTotal = processedTotal + processedInJob;
+
+ // Daisy Chaining:
+ // If the cursor is not 0, we still have more data to scan.
+ // We schedule *this same job* to run again immediately.
+ if (cursor !== 0) {
+ console.log(`[Migration] Requeueing. Next cursor: ${cursor}. Processed so far: ${newTotal}`);
+ await scheduler.runJob({
+ name: 'migrate-example-data',
+ runAt: new Date(),
+ data: {
+ cursor,
+ chunkSize,
+ processed: newTotal,
+ },
+ });
+
+ return c.json({ status: 'requeued', processed: newTotal, cursor });
+ }
+
+ console.log(`[Migration] COMPLETE. Total items processed: ${newTotal}`);
+ return c.json({ status: 'success', processed: newTotal });
+ } catch (error) {
+ console.error('[Migration] Critical Job Error', error);
+ return c.json({ status: 'error', message: error.message }, 500);
+ }
+});
+```
+
+
+
+
+```ts
+import { redis, scheduler, type TaskRequest, type TaskResponse } from '@devvit/web/server';
+// Import the compressed client
+import { redisCompressed } from '@devvit/redis';
+import type { MenuItemRequest, UiResponse } from '@devvit/web/shared';
+
+type MigrateExampleFormRequest = {
+ startCursor?: string;
+ chunkSize?: number;
+};
+
+type MigrateExampleJobData = {
+ cursor?: number | string;
+ chunkSize?: number;
+ processed?: number;
+};
+
+const MY_DATA_HASH_KEY = 'my:app:large:dataset';
+
+// 1. Menu Endpoint: Returns the form definition
+app.post(
+ '/internal/menu/ops/migrate-example',
+ async (_req, res) => {
+ res.json({
+ showForm: {
+ name: 'migrateExampleForm', // Must match key in devvit.json "forms"
+ form: {
+ title: 'Migrate Hash to Compression',
+ acceptLabel: 'Start Migration',
+ fields: [
+ {
+ name: 'startCursor',
+ label: 'Start Cursor (0 for beginning)',
+ type: 'string',
+ defaultValue: '0',
+ },
+ {
+ name: 'chunkSize',
+ label: 'Items per batch',
+ type: 'number',
+ defaultValue: 20000,
+ },
+ ],
+ },
+ },
+ });
+ },
+);
+
+// 2. Form Handler: Receives input and schedules the first job
+app.post(
+ '/internal/form/ops/migrate-example',
+ async (req, res) => {
+ const { startCursor, chunkSize } = req.body ?? ({} as MigrateExampleFormRequest);
+ const cursor = startCursor || '0';
+ const size = Number(chunkSize) || 20000;
+
+ console.log(`[Migration] Manual start requested. Cursor: ${cursor}, Chunk: ${size}`);
+
+ // Kick off the first job in the chain
+ await scheduler.runJob({
+ name: 'migrate-example-data',
+ runAt: new Date(), // Run immediately
+ data: {
+ cursor,
+ chunkSize: size,
+ processed: 0,
+ },
+ });
+
+ res.json({
+ showToast: {
+ text: 'Migration started in background',
+ appearance: 'success',
+ },
+ });
+ },
+);
+
+// 3. Scheduler Endpoint: The recursive worker
+app.post>(
+ '/internal/scheduler/migrate-example-data',
+ async (req, res) => {
+ const startTime = Date.now();
+
+ try {
+ const data = req.body.data;
+
+ let cursor = Number(data?.cursor) || 0;
+ const chunkSize = Number(data?.chunkSize) || 20000;
+ const processedTotal = Number(data?.processed) || 0;
+
+ console.log(`[Migration] Job started. Cursor: ${cursor}, Target Chunk: ${chunkSize}`);
+
+ let keepRunning = true;
+ let processedInJob = 0;
+ const SCAN_COUNT = 250; // Internal batch size to keep event loop moving
+
+ while (keepRunning) {
+ // Stop if we've processed enough items for this single execution
+ if (processedInJob >= chunkSize) {
+ break;
+ }
+
+ const { cursor: nextCursor, fieldValues } = await redis.hScan(
+ MY_DATA_HASH_KEY,
+ cursor,
+ undefined, // match pattern
+ SCAN_COUNT
+ );
+
+ // Parallel Processing:
+ // We treat the batch as a set of promises to execute simultaneously.
+ // Promise.allSettled ensures one failure doesn't crash the whole job.
+ await Promise.allSettled(
+ fieldValues.map(async ({ field, value }) => {
+ // LOGIC:
+ // 1. We read the raw value.
+ // 2. We write it back using 'redisCompressed'.
+ // The proxy detects the write and compresses the string if beneficial.
+ if (value && value.length > 0) {
+ await redisCompressed.hSet(MY_DATA_HASH_KEY, { [field]: value });
+ }
+ })
+ );
+
+ processedInJob += fieldValues.length;
+
+ // Cursor logic: 0 means iteration is complete
+ if (nextCursor === 0) {
+ cursor = 0;
+ keepRunning = false;
+ } else {
+ cursor = nextCursor;
+ }
+
+ // Safety: Check execution time.
+ // If we are close to 30s (Devvit limit), stop early and requeue.
+ if (Date.now() - startTime > 20000) {
+ console.log('[Migration] Time limit approaching, stopping early.');
+ keepRunning = false;
+ }
+ }
+
+ const newTotal = processedTotal + processedInJob;
+
+ // Daisy Chaining:
+ // If the cursor is not 0, we still have more data to scan.
+ // We schedule *this same job* to run again immediately.
+ if (cursor !== 0) {
+ console.log(`[Migration] Requeueing. Next cursor: ${cursor}. Processed so far: ${newTotal}`);
+ await scheduler.runJob({
+ name: 'migrate-example-data',
+ runAt: new Date(),
+ data: {
+ cursor,
+ chunkSize,
+ processed: newTotal,
+ },
+ });
+
+ res.json({ status: 'requeued', processed: newTotal, cursor });
+ } else {
+ console.log(`[Migration] COMPLETE. Total items processed: ${newTotal}`);
+ res.json({ status: 'success', processed: newTotal });
+ }
+ } catch (error) {
+ console.error('[Migration] Critical Job Error', error);
+ res.status(500).json({ status: 'error', message: error.message });
+ }
+ },
+);
+```
+
+
+
+
+Note that the job may timeout, in which case you will need to find the last logged cursor to start the menu item action job again. Try adjusting the chunk size if you experience timeouts.
+
+You can monitor the migration progress using the logs command:
+
+```bash
+devvit logs r/my-subreddit-to-migrate --since=1h --verbose
+```
diff --git a/versioned_docs/version-0.13/capabilities/server/scheduler.mdx b/versioned_docs/version-0.13/capabilities/server/scheduler.mdx
new file mode 100644
index 00000000..b7b870f2
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/scheduler.mdx
@@ -0,0 +1,482 @@
+import Tabs from "@theme/Tabs";
+import TabItem from "@theme/TabItem";
+
+# Scheduler
+
+The scheduler allows your app to perform actions at specific times, such as sending private messages, tracking upvotes, or scheduling timeouts for user actions. You can schedule both recurring and one-off jobs using the scheduler.
+
+---
+
+## Scheduling recurring jobs
+
+To create a regularly occurring event in your app, declare a task in your `devvit.json` and handle the event in your server logic.
+
+### 1. Add a recurring task to `devvit.json`
+
+Ensure the endpoint follows the format `/internal/.+` and specify a `cron` schedule:
+
+```json title="devvit.json"
+"scheduler": {
+ "tasks": {
+ "regular-interval-example-task": {
+ "endpoint": "/internal/scheduler/regular-interval-task-example",
+ "cron": "*/1 * * * *"
+ }
+ }
+},
+```
+
+- The `cron` parameter uses the standard [UNIX cron format](https://en.wikipedia.org/wiki/Cron):
+ ```
+ # * * * * *
+ # | | | | |
+ # | | | | day of the week (0–6, Sunday to Saturday; 7 is also Sunday on some systems)
+ # | | | month (1–12)
+ # | | day of the month (1–31)
+ # | hour (0–23)
+ # minute (0–59)
+ ```
+- We recommend using [Cronitor](https://crontab.guru/) to build cron strings.
+
+### 2. Handle the event in your server
+
+
+
+
+```ts title="/server/index.ts"
+import type { TaskRequest, TaskResponse } from "@devvit/web/server";
+
+app.post("/internal/scheduler/regular-interval-task-example", async (c) => {
+ const _input = await c.req.json();
+ console.log(`Handle event for cron example at ${new Date().toISOString()}!`);
+ // Handle the event here
+ return c.json({ status: "ok" }, 200);
+});
+```
+
+
+
+
+```ts title="/server/index.ts"
+import type { TaskRequest, TaskResponse } from "@devvit/web/server";
+
+app.post(
+ "/internal/scheduler/regular-interval-task-example",
+ async (_req, res) => {
+ console.log(
+ `Handle event for cron example at ${new Date().toISOString()}!`,
+ );
+ // Handle the event here
+ res.status(200).json({ status: "ok" });
+ },
+);
+```
+
+
+
+
+---
+
+## Scheduling one-off jobs at runtime
+
+One-off tasks must also be declared in `devvit.json`.
+
+### 1. Add the tasks to `devvit.json`
+
+```json title='devvit.json'
+"scheduler": {
+ "tasks": {
+ "regular-interval-task-example": {
+ "endpoint": "/internal/scheduler/regular-interval-task-example",
+ "cron": "*/1 * * * *"
+ },
+ "one-off-task-example": {
+ "endpoint": "/internal/scheduler/one-off-task-example"
+ }
+ }
+}
+```
+
+### 2. Schedule a job at runtime
+
+Example usage:
+
+
+
+
+```ts title="/server/index.ts"
+import type { TaskRequest, TaskResponse } from "@devvit/web/server";
+
+app.post("/internal/scheduler/one-off-task-example", async (c) => {
+ const { data } = await c.req.json>();
+ const { postId } = data!;
+ const oneMinuteFromNow = new Date(Date.now() + 1000 * 60);
+
+ const scheduledJob: ScheduledJob = {
+ id: `job-one-off-for-post${postId}`,
+ name: "one-off-task-example",
+ data: { postId },
+ runAt: oneMinuteFromNow,
+ };
+
+ const jobId = await scheduler.runJob(scheduledJob);
+ console.log(`Scheduled job ${jobId} for post ${postId}`);
+ console.log(`Handle event for one-off event at ${new Date().toISOString()}!`);
+ // Handle the event here
+ return c.json({ status: "ok" }, 200);
+});
+```
+
+
+
+
+```ts title="/server/index.ts"
+import type { TaskRequest, TaskResponse } from "@devvit/web/server";
+
+app.post>(
+ "/internal/scheduler/one-off-task-example",
+ async (req, res) => {
+ const { data } = req.body;
+ const { postId } = data!;
+ const oneMinuteFromNow = new Date(Date.now() + 1000 * 60);
+
+ const scheduledJob: ScheduledJob = {
+ id: `job-one-off-for-post${postId}`,
+ name: "one-off-task-example",
+ data: { postId },
+ runAt: oneMinuteFromNow,
+ };
+
+ const jobId = await scheduler.runJob(scheduledJob);
+ console.log(`Scheduled job ${jobId} for post ${postId}`);
+ console.log(`Handle event for one-off event at ${new Date().toISOString()}!`);
+ // Handle the event here
+ res.status(200).json({ status: "ok" });
+ },
+);
+```
+
+
+
+
+## Cancel a scheduled job
+
+Use the job ID to cancel a scheduled action and remove it from your app. This example shows how to set up a moderator menu action to cancel a job.
+
+### 1. Add menu item to `devvit.json`
+
+```json title="devvit.json"
+{
+ "menu": {
+ "items": [
+ {
+ "label": "Cancel Job",
+ "description": "Cancel a scheduled job",
+ "forUserType": "moderator",
+ "location": "post",
+ "endpoint": "/internal/menu/cancel-job"
+ }
+ ]
+ },
+ "permissions": {
+ "redis": true
+ }
+}
+```
+
+### 2. Handle the menu action in your server
+
+
+
+
+```ts title="/server/index.ts"
+import type { MenuItemRequest, UiResponse } from "@devvit/web/shared";
+
+app.post("/internal/menu/cancel-job", async (c) => {
+ try {
+ // Get the post ID from the menu action request
+ const { targetId: postId } = await c.req.json();
+
+ // Retrieve the job ID from Redis (stored when the job was created)
+ const jobId = await redis.get(`job:${postId}`);
+
+ if (!jobId) {
+ return c.json({
+ showToast: {
+ text: "No scheduled job found for this post",
+ appearance: "neutral",
+ },
+ });
+ }
+
+ // Cancel the scheduled job
+ await scheduler.cancelJob(jobId);
+
+ // Clean up the stored job ID
+ await redis.del(`job:${postId}`);
+
+ return c.json({
+ showToast: {
+ text: "Successfully cancelled the scheduled job",
+ appearance: "success",
+ },
+ });
+ } catch (error) {
+ console.error("Error cancelling job:", error);
+ return c.json({
+ showToast: {
+ text: "Failed to cancel job",
+ appearance: "neutral",
+ },
+ });
+ }
+});
+```
+
+
+
+
+```ts title="/server/index.ts"
+import type { MenuItemRequest, UiResponse } from "@devvit/web/shared";
+
+app.post(
+ "/internal/menu/cancel-job",
+ async (req, res) => {
+ try {
+ // Get the post ID from the menu action request
+ const postId = req.body.targetId;
+
+ // Retrieve the job ID from Redis (stored when the job was created)
+ const jobId = await redis.get(`job:${postId}`);
+
+ if (!jobId) {
+ return res.json({
+ showToast: {
+ text: "No scheduled job found for this post",
+ appearance: "neutral",
+ },
+ });
+ }
+
+ // Cancel the scheduled job
+ await scheduler.cancelJob(jobId);
+
+ // Clean up the stored job ID
+ await redis.del(`job:${postId}`);
+
+ return res.json({
+ showToast: {
+ text: "Successfully cancelled the scheduled job",
+ appearance: "success",
+ },
+ });
+ } catch (error) {
+ console.error("Error cancelling job:", error);
+ return res.json({
+ showToast: {
+ text: "Failed to cancel job",
+ appearance: "neutral",
+ },
+ });
+ }
+ },
+);
+```
+
+
+
+
+### Example: Storing a job ID when creating a job
+
+When you create a scheduled job, store its ID in Redis so you can reference it later
+
+
+
+
+```ts title="/server/index.ts"
+type ScheduleActionRequest = { postId: string; delayMinutes: number };
+type ScheduleActionResponse = { jobId: string; message: string };
+
+app.post("/api/schedule-action", async (c) => {
+ const { postId, delayMinutes } =
+ await c.req.json();
+ const runAt = new Date(Date.now() + delayMinutes * 60 * 1000);
+
+ const scheduledJob: ScheduledJob = {
+ id: `job-${postId}-${Date.now()}`,
+ name: "one-off-task-example",
+ data: { postId },
+ runAt,
+ };
+
+ const jobId = await scheduler.runJob(scheduledJob);
+
+ // Store the job ID in Redis for later cancellation
+ await redis.set(`job:${postId}`, jobId);
+
+ return c.json({
+ jobId,
+ message: "Job scheduled successfully",
+ });
+});
+```
+
+
+
+
+```ts title="/server/index.ts"
+type ScheduleActionRequest = { postId: string; delayMinutes: number };
+type ScheduleActionResponse = { jobId: string; message: string };
+
+app.post(
+ "/api/schedule-action",
+ async (req, res) => {
+ const { postId, delayMinutes } = req.body;
+ const runAt = new Date(Date.now() + delayMinutes * 60 * 1000);
+
+ const scheduledJob: ScheduledJob = {
+ id: `job-${postId}-${Date.now()}`,
+ name: "one-off-task-example",
+ data: { postId },
+ runAt,
+ };
+
+ const jobId = await scheduler.runJob(scheduledJob);
+
+ // Store the job ID in Redis for later cancellation
+ await redis.set(`job:${postId}`, jobId);
+
+ return res.json({
+ jobId,
+ message: "Job scheduled successfully",
+ });
+ },
+);
+```
+
+
+
+
+## List jobs
+
+This example shows how to handle a request within your server/index.ts to list your scheduled jobs and return them to the client.
+
+
+
+
+```ts title="/server/index.ts"
+type ListJobsSuccessResponse = {
+ status: "success";
+ jobs: (ScheduledJob | ScheduledCronJob)[];
+ count: number;
+};
+type ListJobsErrorResponse = { status: "error"; message: string };
+type ListJobsResponse = ListJobsSuccessResponse | ListJobsErrorResponse;
+
+app.get("/api/list-jobs", async (c) => {
+ try {
+ const jobs: (ScheduledJob | ScheduledCronJob)[] =
+ await scheduler.listJobs();
+
+ console.log(`[LIST] Found ${jobs.length} scheduled jobs`);
+
+ return c.json({
+ status: "success",
+ jobs,
+ count: jobs.length,
+ });
+ } catch (error) {
+ console.error(`[LIST] Error listing jobs:`, error);
+ return c.json(
+ {
+ status: "error",
+ message: error instanceof Error ? error.message : "Failed to list jobs",
+ },
+ 500,
+ );
+ }
+});
+```
+
+
+
+
+```ts title="/server/index.ts"
+type ListJobsSuccessResponse = {
+ status: "success";
+ jobs: (ScheduledJob | ScheduledCronJob)[];
+ count: number;
+};
+type ListJobsErrorResponse = { status: "error"; message: string };
+type ListJobsResponse = ListJobsSuccessResponse | ListJobsErrorResponse;
+
+app.get(
+ "/api/list-jobs",
+ async (_req, res): Promise => {
+ try {
+ const jobs: (ScheduledJob | ScheduledCronJob)[] =
+ await scheduler.listJobs();
+
+ console.log(`[LIST] Found ${jobs.length} scheduled jobs`);
+
+ res.json({
+ status: "success",
+ jobs,
+ count: jobs.length,
+ });
+ } catch (error) {
+ console.error(`[LIST] Error listing jobs:`, error);
+ res.status(500).json({
+ status: "error",
+ message: error instanceof Error ? error.message : "Failed to list jobs",
+ });
+ }
+ },
+);
+```
+
+
+
+
+## Faster scheduler
+
+:::note
+This feature is experimental, which means the design is not final but it's still available for you to use.
+:::
+
+Scheduled jobs currently perform one scheduled run per minute. To go faster, you can now run jobs every second by adding seconds granularity to your cron expression.
+
+```tsx
+await scheduler.runJob({
+ name: "run_every_30_seconds",
+ cron: "*/30 * * * * *",
+});
+```
+
+How frequent a scheduled job runs will depend on how long the job takes to complete and how many jobs are running in parallel. This means a job may take a bit longer than scheduled, but the overall resolution should be better than a minute.
+
+---
+
+## Limitations
+
+_Limits are per installation of an app:_
+
+1. An installation can have up to **10 live recurring actions**.
+2. The `runJob()` method enforces two rate limits when creating actions:
+ - **Creation rate:** Up to 60 calls to `runJob()` per minute
+ - **Delivery rate:** Up to 60 deliveries per minute
diff --git a/versioned_docs/version-0.13/capabilities/server/settings-and-secrets.mdx b/versioned_docs/version-0.13/capabilities/server/settings-and-secrets.mdx
new file mode 100644
index 00000000..818fc1a6
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/settings-and-secrets.mdx
@@ -0,0 +1,423 @@
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Settings and Secrets
+
+Configure your app with settings that can be customized per subreddit or globally across all installations. Settings allow moderators to customize app behavior for their subreddit, while secrets enable secure storage of sensitive data like API keys.
+
+Settings come in two scopes:
+- **Subreddit settings**: Configurable by moderators for each installation
+- **Global settings & Secrets**: Set by developers and shared across all installations
+
+:::warning
+Local environment variables and `.env` files are read during playtesting only.
+:::
+
+## Defining settings
+
+Define settings in your `devvit.json` file under the `settings` object. Settings are organized by scope: `global` for app-wide settings and secrets, `subreddit` for installation-specific settings.
+
+```json title="devvit.json"
+{
+ "settings": {
+ "global": {
+ "apiKey": {
+ "type": "string",
+ "label": "API Key",
+ "defaultValue": "",
+ "isSecret": true
+ },
+ "environment": {
+ "type": "select",
+ "label": "Environment",
+ "options": [
+ {
+ "label": "Production",
+ "value": "production"
+ },
+ {
+ "label": "Development",
+ "value": "development"
+ }
+ ],
+ "defaultValue": "production"
+ }
+ },
+ "subreddit": {
+ "welcomeMessage": {
+ "type": "string",
+ "label": "Welcome Message",
+ "validationEndpoint": "/internal/settings/validate-message",
+ "defaultValue": "Welcome to our community!"
+ },
+ "enabledFeatures": {
+ "type": "multiSelect",
+ "label": "Enabled Features",
+ "options": [
+ {
+ "label": "Auto-moderation",
+ "value": "automod"
+ },
+ {
+ "label": "Welcome posts",
+ "value": "welcome"
+ },
+ {
+ "label": "Statistics tracking",
+ "value": "stats"
+ }
+ ],
+ "defaultValue": ["welcome"]
+ }
+ }
+ }
+}
+```
+
+:::note
+After defining settings in `devvit.json`, you must build your app (`npm run dev`) before you can set secrets via the CLI.
+:::
+
+## Setting types
+
+The following setting types are supported:
+
+- **string**: Text input field
+- **boolean**: Toggle switch
+- **number**: Numeric input
+- **select**: Dropdown selection (single choice)
+- **multiSelect**: Multiple choice dropdown
+
+## Managing secrets
+
+Secrets are global settings marked with `isSecret: true`. They're encrypted and can only be set by developers via the CLI.
+
+### Listing secrets
+
+View all defined secrets in your app:
+
+```bash
+npx devvit settings list
+
+Key Label Is this a secret? Type
+────────── ─────────── ───────────────── ──────
+apiKey API Key true STRING
+environment Environment false SELECT
+```
+
+### Setting secret values
+
+Only app developers can set secret values:
+
+```bash
+npx devvit settings set apiKey
+
+? Enter the value you would like to assign to the variable apiKey:
+
+Updating app settings... ✅
+Successfully added app settings for apiKey!
+```
+
+:::warning
+At least one app installation is required before you can store secrets via the CLI. Run `npm run dev` to start your first installation.
+:::
+
+## Accessing settings in your app
+
+Settings can be retrieved from within your app.
+
+
+
+
+```tsx title="server/index.ts"
+import { settings } from '@devvit/web/server';
+
+type ProcessResponse = { success: true };
+
+// Get a single setting
+const apiKey = await settings.get('apiKey');
+
+// Get multiple settings
+const [welcomeMessage, features] = await Promise.all([
+ settings.get('welcomeMessage'),
+ settings.get('enabledFeatures')
+]);
+
+// Use in an endpoint
+app.post('/api/process', async (c) => {
+ const apiKey = await settings.get('apiKey');
+ const environment = await settings.get('environment');
+
+ const response = await fetch('https://api.example.com/endpoint', {
+ headers: {
+ 'Authorization': `Bearer ${apiKey}`,
+ 'X-Environment': environment
+ }
+ });
+
+ return c.json({ success: true });
+});
+```
+
+
+
+
+```tsx title="server/index.ts"
+import { settings } from '@devvit/web/server';
+
+type ProcessResponse = { success: true };
+
+// Get a single setting
+const apiKey = await settings.get('apiKey');
+
+// Get multiple settings
+const [welcomeMessage, features] = await Promise.all([
+ settings.get('welcomeMessage'),
+ settings.get('enabledFeatures')
+]);
+
+// Use in an endpoint
+router.post('/api/process', async (req, res) => {
+ const apiKey = await settings.get('apiKey');
+ const environment = await settings.get('environment');
+
+ const response = await fetch('https://api.example.com/endpoint', {
+ headers: {
+ 'Authorization': `Bearer ${apiKey}`,
+ 'X-Environment': environment
+ }
+ });
+
+ res.json({ success: true });
+});
+```
+
+
+
+
+## Input validation
+
+Validate user input to ensure it meets your requirements before saving. Define a validation endpoint in your `devvit.json` and implement it in your server:
+
+```json title="devvit.json"
+{
+ "settings": {
+ "subreddit": {
+ "minimumAge": {
+ "type": "number",
+ "label": "Minimum Account Age (days)",
+ "validationEndpoint": "/internal/settings/validate-age",
+ "defaultValue": 7
+ }
+ }
+ }
+}
+```
+
+
+
+
+```tsx title="server/index.ts"
+import type { SettingsValidationRequest, SettingsValidationResponse } from '@devvit/web/shared';
+
+app.post('/internal/settings/validate-age', async (c) => {
+ const { value } = await c.req.json>();
+
+ if (!value || value < 0) {
+ return c.json({
+ success: false,
+ error: 'Age must be a positive number',
+ });
+ }
+
+ if (value > 365) {
+ return c.json({
+ success: false,
+ error: 'Maximum age is 365 days',
+ });
+ }
+
+ return c.json({ success: true });
+});
+```
+
+
+
+
+```tsx title="server/index.ts"
+import type { SettingsValidationRequest, SettingsValidationResponse } from '@devvit/web/shared';
+
+router.post>(
+ '/internal/settings/validate-age',
+ async (req, res): Promise => {
+ const { value } = req.body;
+
+ if (!value || value < 0) {
+ res.json({
+ success: false,
+ error: 'Age must be a positive number',
+ });
+ return;
+ }
+
+ if (value > 365) {
+ res.json({
+ success: false,
+ error: 'Maximum age is 365 days',
+ });
+ return;
+ }
+
+ res.json({ success: true });
+ }
+);
+```
+
+
+
+
+## Subreddit settings UI
+
+Once your app is installed, moderators can configure subreddit settings through the Install Settings page. These settings are scoped to the specific subreddit where the app is installed.
+
+{/*  */}
+
+Moderators will see all non-secret settings defined for the subreddit scope and can update them as needed. Changes are saved immediately and available to your app.
+
+## Complete example
+
+Here's a complete example showing both secrets and subreddit settings in action:
+
+```json title="devvit.json"
+{
+ "settings": {
+ "global": {
+ "openaiApiKey": {
+ "type": "string",
+ "label": "OpenAI API Key",
+ "isSecret": true,
+ "defaultValue": ""
+ }
+ },
+ "subreddit": {
+ "aiModel": {
+ "type": "select",
+ "label": "AI Model",
+ "options": [
+ { "label": "GPT-4", "value": "gpt-4" },
+ { "label": "GPT-3.5", "value": "gpt-3.5-turbo" }
+ ],
+ "defaultValue": "gpt-3.5-turbo"
+ },
+ "maxTokens": {
+ "type": "number",
+ "label": "Max Response Tokens",
+ "validationEndpoint": "/internal/settings/validate-tokens",
+ "defaultValue": 150
+ }
+ }
+ }
+}
+```
+
+
+
+
+```tsx title="server/index.ts"
+import type { JsonObject, JsonValue } from '@devvit/web/shared';
+import { settings } from '@devvit/web/server';
+
+type GenerateRequest = { messages: JsonValue };
+type GenerateResponse = JsonObject;
+
+app.post('/api/generate', async (c) => {
+ const [apiKey, model, maxTokens] = await Promise.all([
+ settings.get('openaiApiKey'),
+ settings.get('aiModel'),
+ settings.get('maxTokens')
+ ]);
+ const { messages } = await c.req.json();
+
+ const response = await fetch('https://api.openai.com/v1/chat/completions', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${apiKey}`,
+ },
+ body: JSON.stringify({
+ model,
+ max_tokens: maxTokens,
+ messages,
+ }),
+ });
+
+ const data = (await response.json()) as GenerateResponse;
+ return c.json(data);
+});
+```
+
+
+
+
+```tsx title="server/index.ts"
+import type { JsonObject, JsonValue } from '@devvit/web/shared';
+import { settings } from '@devvit/web/server';
+
+type GenerateRequest = { messages: JsonValue };
+type GenerateResponse = JsonObject;
+
+router.post('/api/generate', async (req, res) => {
+ const [apiKey, model, maxTokens] = await Promise.all([
+ settings.get('openaiApiKey'),
+ settings.get('aiModel'),
+ settings.get('maxTokens')
+ ]);
+
+ const response = await fetch('https://api.openai.com/v1/chat/completions', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${apiKey}`,
+ },
+ body: JSON.stringify({
+ model,
+ max_tokens: maxTokens,
+ messages: req.body.messages,
+ }),
+ });
+
+ const data = (await response.json()) as GenerateResponse;
+ res.json(data);
+});
+```
+
+
+
+
+## Limitations
+
+- Secrets can only be global
+- Secrets can only be set via CLI by app developers
+- Setting values are currently not fully surfaced in the CLI
+- Maximum of 2KB per setting value
diff --git a/versioned_docs/version-0.13/capabilities/server/splash-screen.mdx b/versioned_docs/version-0.13/capabilities/server/splash-screen.mdx
new file mode 100644
index 00000000..49f4f88c
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/splash-screen.mdx
@@ -0,0 +1,136 @@
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Splash Screens
+
+Splash screens provide a personalized entry point for your Reddit Dev Platform apps, displaying a customized loading view before users interact with your post. A well-designed splash screen improves first impressions and drives better user engagement.
+
+The splash screen appears when users first view your post, featuring your app's branding, a description, and a call-to-action button that launches the main experience.
+
+
+
+:::note
+Splash screens are only available for web view apps on Devvit Web.
+:::
+
+## Creating posts with splash screens
+
+When creating a post, include the `splash` parameter to customize the splash screen appearance.
+
+
+
+ ```ts title="server/index.ts"
+ import { reddit } from '@devvit/web/server';
+
+ const post = await reddit.submitCustomPost({
+ subredditName: context.subredditName!,
+ title: 'My Interactive Post',
+ splash: {
+ appDisplayName: 'My Amazing App', // only required field
+ backgroundUri: 'background.png',
+ buttonLabel: 'Start Playing',
+ description: 'An exciting interactive experience',
+ entryUri: 'index.html',
+ heading: 'Welcome to the Game!'
+ },
+ postData: {
+ gameState: 'initial',
+ score: 0
+ }
+ });
+ ```
+
+
+
+## Splash screen properties
+
+The `splash` object supports the following customization options:
+
+| Property | Type | Description | Default |
+|----------|------|-------------|---------|
+| `appDisplayName` | string | Your app's display name | Required |
+| `backgroundUri` | string | Background image URL (relative to media directory or data URI) | None |
+| `buttonLabel` | string | Text for the launch button | `'Launch App'` |
+| `description` | string | Secondary text describing the post experience | None |
+| `entryUri` | string | Web view URI relative to client directory | `'index.html'` |
+| `heading` | string | Large text naming the post under app name | `appDisplayName` |
+| `appIconUri` | string | Icon URL relative to media directory or data URI | None |
+
+### Using images
+
+Images can be referenced in two ways:
+
+1. **Local assets**: Place images in your app's assets directory and reference them by filename:
+ For example, if your image is in `assets/splash-background.png`, then you can just reference it with `splash-background.png`
+
+ :::note
+ If you put the images in a different directory, you can configure that by adding the `media` property to your `devvit.json` file. Set `media.dir` to the directory path you are using.
+ :::
+ For example, if you are putting the image in `assets/images`, then you can write it like this:
+ ```json title="devvit.json"
+ "media": {
+ "dir": "assets/images"
+ }
+ ```
+
+ And you can reference them by their filename
+
+ ```ts title="server/index.ts"
+ backgroundUri: '/splash-background.png'
+ appIconUri: '/app-icon.png'
+ ```
+ Without configuring `media.dir`, you have to reference the images relative to the `assets` directory, which would be `images/splash-background.png` in this example
+
+
+
+2. **External URLs**: Use full HTTPS URLs for hosted images:
+ ```ts
+ backgroundUri: 'https://i.redd.it/your-image.png'
+ ```
+
+## Example: Dynamic splash screens
+
+You can modify the splash screen to make sure the content is relevant:
+
+```ts title="server/index.ts"
+import { reddit } from '@devvit/web/server';
+
+ const date = (new Date()).toLocaleString('en-US', {
+ weekday: 'long',
+ year: 'numeric',
+ month: 'long',
+ day: 'numeric'});
+
+ return await reddit.submitCustomPost({
+
+ subredditName: context.subredditName!,
+ title: `App Post Title`,
+
+ splash: {
+ appDisplayName: 'test-app',
+ backgroundUri: '/splash-background.png',
+ buttonLabel: 'Begin Journey',
+ description: `${date}'s game`,
+ entryUri: 'index.html',
+ heading: 'Welcome to the Game!',
+ appIconUri: 'default-icon.png',
+ }
+ });
+```
+
+## Best practices
+
+- **Keep it lightweight**: Use optimized images to ensure fast loading times
+- **Clear call-to-action**: Make your button label descriptive and action-oriented
+- **Consistent branding**: Use your app icon and consistent visual elements
+- **Informative description**: Tell users what to expect when they launch your app
+
+## Limitations
+
+- Image files must be included in your app bundle or hosted externally
+- Maximum recommended image size: 2MB for optimal performance
+- The `entryUri` must point to a valid HTML file in your client directory
+
+:::tip
+A compelling splash screen is your app's first impression. Invest time in creating an engaging design that clearly communicates your app's value and encourages users to interact.
+:::
diff --git a/versioned_docs/version-0.13/capabilities/server/text_fallback.mdx b/versioned_docs/version-0.13/capabilities/server/text_fallback.mdx
new file mode 100644
index 00000000..cbe082c8
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/text_fallback.mdx
@@ -0,0 +1,97 @@
+
+# Text Fallback
+
+Text fallback lets you specify alternative text content for your interactive post, enabling:
+
+- **Old Reddit and third-party app support** - These platforms cannot render interactive posts
+- **Google (SEO) and Reddit Answers indexing** - Critical for discoverability and growth
+- **AutoModerator rule compatibility** - Allows mod rules to process your post content
+- **Reddit safety checks and filters** - Enables content moderation systems to work properly
+- **Custom post thumbnail** - Link to an image to generate a thumbnail
+
+Text fallback uses Markdown formatting and allows for up to 40,000 characters.
+
+## [Reddit API](./reddit-api.mdx)
+The text fallback is only available when using the Reddit API to create a post.
+
+
+
+ ```json title="devvit.json"
+ {
+ "permissions": {
+ "reddit": true
+ }
+ }
+ ```
+
+## Use a text string
+
+```tsx
+import { reddit } from '@devvit/web/server';
+
+const post = await reddit.submitCustomPost({
+ title: 'Text String',
+ subredditName: subreddit.name,
+ textFallback: { text: 'You can read this text string on oldreddit because you used textFallback' },
+ entry: 'default',
+});
+```
+
+**Result**
+
+
+
+## Use a text string with markdown
+
+```tsx
+import { reddit } from '@devvit/web/server';
+
+const post = await reddit.submitCustomPost({
+ title: 'Text string with markdown',
+ subredditName: subreddit.name,
+ textFallback: {
+ text: 'You can read this _text string with markdown_ on oldreddit because you used **textFallback**',
+ },
+ entry: 'default',
+});
+```
+
+**Result**
+
+
+
+## Use rich text
+
+```tsx
+import { reddit } from '@devvit/web/server';
+
+const textFallbackRichtext = new RichTextBuilder()
+ .heading({ level: 1 }, (h) => {
+ h.rawText('Yay for text fallbacks!');
+ })
+ .codeBlock({}, (cb) => cb.rawText('You can read this rich text on old.reddit because you used textFallback'));
+
+const post = await reddit.submitCustomPost({
+ title: 'Rich Text',
+ subredditName: subreddit.name,
+ textFallback: { richtext: textFallbackRichtext },
+ entry: 'default',
+});
+```
+
+**Result**
+
+
+
+## Update a post’s text fallback
+
+The post author can edit and update text fallback content after it’s been created. To do this, call post.setTextFallback with the desired fallback content.
+
+```tsx
+import { reddit } from '@devvit/web/server';
+
+// from a menu action, form, scheduler, trigger, custom post click event, etc
+const newTextFallback = { text: 'This is an updated text fallback' };
+const post = await reddit.getPostById(context.postId);
+await post.setTextFallback(newTextFallback);
+```
diff --git a/versioned_docs/version-0.13/capabilities/server/triggers.mdx b/versioned_docs/version-0.13/capabilities/server/triggers.mdx
new file mode 100644
index 00000000..409a6d18
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/triggers.mdx
@@ -0,0 +1,158 @@
+import Tabs from "@theme/Tabs";
+import TabItem from "@theme/TabItem";
+
+# Triggers
+
+Triggers allow your app to automatically respond to specific events or actions within a Reddit community. Use triggers to build automation, moderation, and engagement features that react to user or moderator activity.
+
+## What are triggers?
+
+A trigger is an action you can build into your app that will occur automatically when a specified condition is met. For example, you can set up a trigger to respond when a new post is submitted, a comment is created, or a moderator takes action.
+
+## Supported trigger types
+
+Event triggers let your app automatically respond to a user's or moderator's action. The following trigger types are supported:
+
+- `onPostSubmit`
+- `onPostCreate`
+- `onPostUpdate`
+- `onPostReport`
+- `onPostDelete`
+- `onPostFlairUpdate`
+- `onCommentCreate`
+- `onCommentDelete`
+- `onCommentReport`
+- `onCommentSubmit`
+- `onCommentUpdate`
+- `onPostNsfwUpdate`
+- `onPostSpoilerUpdate`
+- `onAppInstall`
+- `onAppUpgrade`
+- `onModActions`
+- `onModMail`
+- `onAutomoderatorFilterPost`
+- `onAutomoderatorFilterComment`
+
+A full list of events and their payloads can be found in the [EventTypes documentation](../../api/public-api/@devvit/namespaces/EventTypes/). For more details on Mod specific actions, see [ModActions](../../api/redditapi/models/interfaces/ModAction) and [ModMail](../../api/public-api/type-aliases/ModMailDefinition).
+
+## Setting up triggers
+
+### 1. Add triggers and endpoints to `devvit.json`
+
+Declare the triggers and their corresponding endpoints in your `devvit.json`:
+
+```json
+"triggers": {
+ "onAppUpgrade": "/internal/on-app-upgrade",
+ "onCommentCreate": "/internal/on-comment-create",
+ "onPostSubmit": "/internal/on-post-submit"
+}
+```
+
+
+### 2. Handle trigger events in your server logic
+
+Listen for the events in your server and access the data passed into the request:
+
+
+
+
+```tsx title="server/index.ts"
+import type {
+ OnAppUpgradeRequest,
+ OnCommentCreateRequest,
+ OnPostSubmitRequest,
+ TriggerResponse,
+} from '@devvit/web/shared';
+
+app.post('/internal/on-app-upgrade', async (c) => {
+ console.log('Handle event for on-app-upgrade!');
+ const input = await c.req.json();
+ const installer = input.installer;
+ console.log('Installer:', JSON.stringify(installer, null, 2));
+ return c.json({ status: 'ok' });
+});
+
+app.post('/internal/on-comment-create', async (c) => {
+ console.log('Handle event for on-comment-create!');
+ const input = await c.req.json();
+ const comment = input.comment;
+ const author = input.author;
+ console.log('Comment:', JSON.stringify(comment, null, 2));
+ console.log('Author:', JSON.stringify(author, null, 2));
+ return c.json({ status: 'ok' });
+});
+
+app.post('/internal/on-post-submit', async (c) => {
+ console.log('Handle event for on-post-submit!');
+ const input = await c.req.json();
+ const post = input.post;
+ const author = input.author;
+ console.log('Post:', JSON.stringify(post, null, 2));
+ console.log('Author:', JSON.stringify(author, null, 2));
+ return c.json({ status: 'ok' });
+});
+```
+
+
+
+
+```tsx title="server/index.ts"
+import type {
+ OnAppUpgradeRequest,
+ OnCommentCreateRequest,
+ OnPostSubmitRequest,
+ TriggerResponse,
+} from '@devvit/web/shared';
+
+const router = express.Router();
+
+// ..
+
+router.post(
+ "/internal/on-app-upgrade",
+ async (req, res) => {
+ console.log(`Handle event for on-app-upgrade!`);
+ const installer = req.body.installer;
+ console.log("Installer:", JSON.stringify(installer, null, 2));
+ res.status(200).json({ status: "ok" });
+});
+
+router.post(
+ "/internal/on-comment-create",
+ async (req, res) => {
+ console.log(`Handle event for on-comment-create!`);
+ const comment = req.body.comment;
+ const author = req.body.author;
+ console.log("Comment:", JSON.stringify(comment, null, 2));
+ console.log("Author:", JSON.stringify(author, null, 2));
+ res.status(200).json({ status: "ok" });
+});
+
+router.post(
+ "/internal/on-post-submit",
+ async (req, res) => {
+ console.log(`Handle event for on-post-submit!`);
+ const post = req.body.post;
+ const author = req.body.author;
+ console.log("Post:", JSON.stringify(post, null, 2));
+ console.log("Author:", JSON.stringify(author, null, 2));
+ res.status(200).json({ status: "ok" });
+});
+```
+
+
+
+
+## Best practices
+
+- Avoid creating recursive triggers that could cause infinite loops or crashes (for example, a comment trigger that creates a comment).
+- Always check the event payload to ensure your app is not the source of the event before taking action.
+- Review the [EventTypes documentation](../../api/public-api/@devvit/namespaces/EventTypes/) for details on event payloads.
diff --git a/versioned_docs/version-0.13/capabilities/server/userActions.mdx b/versioned_docs/version-0.13/capabilities/server/userActions.mdx
new file mode 100644
index 00000000..122893af
--- /dev/null
+++ b/versioned_docs/version-0.13/capabilities/server/userActions.mdx
@@ -0,0 +1,233 @@
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# User Actions
+
+User actions allow your app to submit posts, submit comments, and subscribe to the current subreddit on behalf of the logged in user. These actions occur on the logged in user's account instead of the app account. This enables stronger user engagement while ensuring user control and transparency.
+
+---
+
+## What are user actions?
+
+By default, apps make posts or comments using their associated app account. With user actions enabled, your app can:
+
+- Create posts or comments on behalf of the user (from the post UI, a form, or a menu action)
+- Subscribe the user to the current subreddit
+
+Some actions are not available to apps to prevent abuse and maintain platform integrity:
+
+- Apps cannot upvote or downvote posts or comments, either as the app account or on behalf of the logged-in user
+- Apps cannot follow users (on reddit.com) or add friends (on old.reddit.com), either as the app account or on behalf of the logged-in user
+
+---
+
+Requirements
+--------------
+
+To ensure a positive user experience and compliance with Reddit policies:
+
+- **Always ask permission:** Your app must always inform users before posting, commenting, or subscribing on their behalf. This can only happen on an explicit manual action, e.g. from a button.
+- **No automated actions:** Users must explicitly opt-in to the app acting on their behalf. Do not mislead or surprise users.
+- **Establish a reporting flow:** Ensure `userGeneratedContent` is correctly set for posts submitted on behalf of the user.
+- **Do not gate any functionality:** Users should not be made or encouraged to post, comment, or subscribe to continue using your app.
+- **Keep actions separate:** Do not merge posting, commenting, or subscribing with other app actions (e.g., gameplay progression). Each must remain a distinct, clear choice.
+- **Remember the human:** Follow Reddit's safety and compliance guidelines for user-generated content. Do not create spam-like content or poor user experiences in pursuit of engagement.
+
+
+---
+
+## Enabling user actions
+
+To enable user actions, add the required permissions to your `devvit.json`:
+
+```json title="devvit.json"
+"permissions": {
+ "reddit": {
+ "asUser": [
+ "SUBMIT_POST",
+ "SUBMIT_COMMENT",
+ "SUBSCRIBE_TO_SUBREDDIT"
+ ]
+ }
+}
+```
+
+After enabling, you can call certain Reddit APIs on behalf of the user by passing the option `runAs: 'USER'`. The following APIs support this option:
+
+- [submitPost()](../../api/redditapi/RedditAPIClient/classes/RedditAPIClient.md#submitpost)
+- [submitCustomPost()](../../api/redditapi/RedditAPIClient/classes/RedditAPIClient.md)
+- [submitComment()](../../api/redditapi/RedditAPIClient/classes/RedditAPIClient.md#submitcomment)
+
+If `runAs` is not specified, the API will use `runAs: 'APP'` by default.
+
+### Parameters
+
+| Parameter | Description |
+| ---------------------- | ------------------------------------------------------------------------------------------------------------------------ |
+| `runAs` | The type of account to perform the action on behalf of: `'USER'` or `'APP'`. Defaults to `'APP'`. |
+| `userGeneratedContent` | Text or images submitted by the user. Required for `submitPost()` with `runAs: 'USER'` for safety and compliance review. |
+
+### Differences during playtesting
+
+Your app version needs to be approved in order for user actions to be enabled for all users. Expect the following behavior:
+
+- **Unapproved/playtest apps:**
+ - `runAs: 'USER'` will operate from the app account unless the app owner takes the action.
+ - User actions taken by the app owner will be attributed to the app owner's username.
+- **Approved apps:**
+ - After publishing and approval, `runAs: 'USER'` will operate on behalf of the user for all users.
+
+---
+
+## Example: Submit a post as the user
+
+
+
+
+```tsx title="server/index.ts"
+import { reddit } from '@devvit/web/server';
+
+// ...
+
+app.post('/internal/post-create', async (c) => {
+ const { subredditName } = context;
+ if (!subredditName) {
+ return c.json({ status: 'error', message: 'subredditName is required' }, 400);
+ }
+
+ reddit.submitPost({
+ runAs: 'USER',
+ userGeneratedContent: {
+ text: "Hello there! This is a new post from the user's account",
+ },
+ subredditName,
+ title: 'Post Title',
+ entry: 'default',
+ });
+
+ return c.json({ status: 'success', message: `Post created in subreddit ${subredditName}` });
+});
+```
+
+
+
+
+```tsx title="server/index.ts"
+import { reddit } from '@devvit/web/server';
+
+// ...
+
+router.post('/internal/post-create', async (_req, res) => {
+ const { subredditName } = context;
+ if (!subredditName) {
+ res.status(400).json({ status: 'error', message: 'subredditName is required' });
+ return;
+ }
+
+ reddit.submitPost({
+ runAs: 'USER',
+ userGeneratedContent: {
+ text: "Hello there! This is a new post from the user's account",
+ },
+ subredditName,
+ title: 'Post Title',
+ entry: 'default',
+ });
+
+ res.json({ status: 'success', message: `Post created in subreddit ${subredditName}` });
+});
+```
+
+
+
+
+---
+
+## Example: Subscribe to current subreddit
+
+The [subscribeToCurrentSubreddit()](../../api/redditapi/RedditAPIClient/classes/RedditAPIClient.md#subscribetocurrentsubreddit) API does not take a `runAs` parameter; it subscribes as the user by default (if specified in `devvit.json` and approved).
+
+
+
+
+```ts
+import { reddit } from '@devvit/web/server';
+
+app.post('/api/subscribe', async (c) => {
+ try {
+ await reddit.subscribeToCurrentSubreddit();
+ return c.json({ status: 'success' });
+ } catch (error) {
+ return c.json({ status: 'error', message: 'Failed to subscribe' }, 500);
+ }
+});
+```
+
+
+
+
+```ts
+import { reddit } from '@devvit/web/server';
+
+router.post('/api/subscribe', async (_req, res) => {
+ try {
+ await reddit.subscribeToCurrentSubreddit();
+ res.json({ status: 'success' });
+ } catch (error) {
+ res.status(500).json({ status: 'error', message: 'Failed to subscribe' });
+ }
+});
+```
+
+
+
+
+For user privacy there is no API to check if the user is already subscribed to the current subreddit. You may want to store the subscription state in Redis to provide contextually aware UI.
+
+---
+
+## Adding user actions to games
+
+### End-of-game actions
+
+✅ An example of a clear end-of-game layout:
+
+- `Play Again`
+- `Comment My Score`
+- `Subscribe to r/your_subreddit`
+
+This example keeps each action separate and straightforward for the user. Playing again, commenting, and subscribing are distinct decisions and are therefore presented as distinct actions.
+
+❌ An example of an unclear end-of-game layout:
+
+- `Play Again and Subscribe`
+- `Post Score to Play Next Level`
+- `Comment & Continue`
+
+This example mixes intention and is confusing for the user. Apps like this that merge functionality (e.g. playing again) with user actions (e.g. subscribing or commenting) will be rejected during review.
+
+### Commenting scores
+
+✅ The required pattern for commenting scores is:
+
+- Commenting after explicit manual action (e.g. from a button)
+- Commenting by the user (not the app account)
+- Commenting as a reply to a single stickied comment
+
+This avoids surprising the user, enables a reporting flow, and allows the user to easily delete their score comment. Replying to a stickied comment keeps this repetitive content with low discussion value out of the way, in an area that needs to be expanded to view.
+
+If offering a way for the user to add a custom message to their score, the comment can be posted as a top-level comment. This prioritizes human discussion and creates a more engaging comment section.
\ No newline at end of file
diff --git a/versioned_docs/version-0.13/changelog.md b/versioned_docs/version-0.13/changelog.md
new file mode 100644
index 00000000..d09423d4
--- /dev/null
+++ b/versioned_docs/version-0.13/changelog.md
@@ -0,0 +1,371 @@
+# Changelog
+
+While we're always shipping fixes and improvements, our team bundles new features, breaking changes, and other user-facing updates into regular releases. This page logs the changes to each version of Devvit.
+
+To use the latest version of Devvit:
+
+1. Run `npm install devvit@latest` to update your CLI.
+2. Run `npx devvit update app` to update your @devvit dependencies.
+
+**Please note**: you may see features available across Devvit packages that are not documented or noted in our changelog. These are experimental features that are not stable and are subject to change, or removal, from the platform. Please use caution when testing or implementing experimental features.
+
+## Release 0.12.21: Stability and Performance Improvements for Portal
+**Release Date: Apr 27, 2026**
+
+In this release, Portal now retrieves data directly from reliable backend services and no longer depends on GraphQL. This means:
+* Faster responses — average request time reduced by 40% (from 364ms → 216ms)
+* Fewer errors — 62% reduction in server errors
+* Improved reliability — Portal is no longer affected by GraphQL outages
+
+Also added: a `Filter()` method to the Reddit API (similar to AutoMod) that removes content from public view, sends it to ModQueue/Removed, and logs the action in ModLog.
+
+## Release 0.12.20: Maintenance Release
+**Release Date: Apr 20, 2026**
+
+This release contains a few internal fixes and improvements only.
+
+## Release 0.12.19: Minor Updates
+**Release Date: Apr 13, 2026**
+
+This release includes the following updates:
+
+* Clarified that when `requestExpandedMode()` navigates to the same entrypoint, it may (but not always) trigger a reload.
+
+* Added a `post` parameter to the `shareSheet` effect to allow sharing links to other posts.
+
+## Release 0.12.18: Custom Post Styling, Video Comments, and Cache
+**Release Date: Apr 6, 2026**
+
+This release adds support for post styles, which lets you customize how your app posts look within Reddit. We’ve added [Creating a custom post](./capabilities/creating_custom_post.md) documentation to walk you through building custom posts and configuring post styles. This includes options for setting background colors before your app loads, adjusting post height, and enabling custom share images when your app is shared.
+
+**Other fixes**
+* Added `video` to the `CommentMediaTypes` type. This fixes an issue where apps on subreddits with video comments crashed due to `getCurrentSubreddit()` throwing `invalid comment media type: video` error.
+* Fixed an issue where in-memory cache data was unintentionally shared across subreddits. Cache is now partitioned per subreddit, which ensures you’ll get accurate data for each subreddit.
+
+## Release 0.12.17 Redis Update and Minor Fixes
+**Release Date: Mar 30, 2026**
+
+This release included updated Redis transaction support. `hSetNX` was available on `RedisClient` but missing from transaction interfaces, preventing atomic hash set-if-not-exists operations within transactions. Updates include:
+
+* Added `hSetNX` to the `TxClientLike` type
+* Implemented `hSetNX` in the Redis transaction class, following the existing `hSet` pattern
+* Added `hSetNX` and lowercase `hsetnx` alias to the public API transaction class, consistent with other hash method aliases
+
+**Other Fixes**
+
+* Fixed an issue where editing a post or comment with an image in the rich text builder triggered an `INVALID_SELFPOST: richtext_json` error.
+
+* Fixed an issue where SVG files containing XML declarations or `DOCTYPE` tags produced broken icons in `devvit create icons` by stripping content before the `