summary refs log tree commit diff
path: root/api/assets
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-08-12 20:09:35 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-08-12 20:09:35 +0200
commit524b5df7231635682053d0c028b0a24189b875ab (patch)
tree38bdb481e6149a825170cb67cb961410de92efdd /api/assets
parentnpm i @fosscord/server-util@1.3.52 (diff)
downloadserver-524b5df7231635682053d0c028b0a24189b875ab.tar.xz
:sparkles: api
Diffstat (limited to 'api/assets')
-rw-r--r--api/assets/endpoints.json115
-rw-r--r--api/assets/features.json26
-rw-r--r--api/assets/openapi.yaml136
-rw-r--r--api/assets/openapi.yml526
-rw-r--r--api/assets/widget/banner1.pngbin0 -> 5950 bytes
-rw-r--r--api/assets/widget/banner2.pngbin0 -> 3756 bytes
-rw-r--r--api/assets/widget/banner3.pngbin0 -> 5342 bytes
-rw-r--r--api/assets/widget/banner4.pngbin0 -> 13105 bytes
-rw-r--r--api/assets/widget/shield.pngbin0 -> 726 bytes
9 files changed, 803 insertions, 0 deletions
diff --git a/api/assets/endpoints.json b/api/assets/endpoints.json
new file mode 100644
index 00000000..8b0514ce
--- /dev/null
+++ b/api/assets/endpoints.json
@@ -0,0 +1,115 @@
+{
+	"USER_CHANNELS": "/users/@me/channels",
+	"USER_ACTIVITY_STATISTICS": "/users/@me/activities/statistics/applications",
+	"ACTIVITIES": "/activities",
+	"LOBBIES": "/lobbies",
+	"LOBBY_SEARCH": "/lobbies/search",
+	"NETWORKING_TOKEN": "/networking/token",
+	"USER_GAMES_NOTIFICATIONS": "/users/@me/settings/game-notifications",
+	"USER_GAMES_NOTIFICATIONS_OVERRIDES": "/users/@me/settings/game-notifications/overrides",
+	"UNVERIFIED_APPLICATIONS": "/unverified-applications",
+	"UNVERIFIED_APPLICATIONS_ICONS": "/unverified-applications/icons",
+	"BULK_ACK": "/read-states/ack-bulk",
+	"GUILDS": "/guilds",
+	"CHANNELS": "/channels",
+	"TUTORIAL_INDICATORS": "/tutorial/indicators",
+	"TUTORIAL_INDICATORS_SUPPRESS": "/tutorial/indicators/suppress",
+	"USERS": "/users",
+	"ME": "/users/@me",
+	"DELETE_ACCOUNT": "/users/@me/delete",
+	"DISABLE_ACCOUNT": "/users/@me/disable",
+	"DEVICES": "/users/@me/devices",
+	"SETTINGS": "/users/@me/settings",
+	"SETTINGS_CONSENT": "/users/@me/consent",
+	"PHONE": "/users/@me/phone",
+	"VERIFY_PHONE": "/users/@me/phone/verify",
+	"VERIFY_PHONE_NEW": "/phone-verifications/verify",
+	"RESEND_PHONE": "/phone-verifications/resend",
+	"CONNECTIONS": "/users/@me/connections",
+	"CONNECTION_SYNC_CONTACTS": "/users/@me/connections/contacts/@me/external-friend-list-entries",
+	"NOTES": "/users/@me/notes",
+	"MENTIONS": "/users/@me/mentions",
+	"CAPTCHA": "/users/@me/captcha/verify",
+	"EXPERIMENTS": "/experiments",
+	"LOGIN": "/auth/login",
+	"LOGIN_MFA": "/auth/mfa/totp",
+	"LOGIN_SMS": "/auth/mfa/sms",
+	"LOGIN_SMS_SEND": "/auth/mfa/sms/send",
+	"REMOTE_AUTH_INITIALIZE": "/users/@me/remote-auth",
+	"REMOTE_AUTH_CANCEL": "/users/@me/remote-auth/cancel",
+	"REMOTE_AUTH_FINISH": "/users/@me/remote-auth/finish",
+	"LOGOUT": "/auth/logout",
+	"REGISTER": "/auth/register",
+	"REGISTER_PHONE": "/auth/register/phone",
+	"TRACK": "/science",
+	"SSO": "/sso",
+	"VERIFY": "/auth/verify",
+	"AUTHORIZE_IP": "/auth/authorize-ip",
+	"VERIFY_RESEND": "/auth/verify/resend",
+	"FORGOT_PASSWORD": "/auth/forgot",
+	"RESET_PASSWORD": "/auth/reset",
+	"ICE": "/voice/ice",
+	"REPORT": "/report",
+	"REPORT_V2": "/reports",
+	"REPORT_OPTIONS": "/report/options",
+	"INTEGRATIONS": "/integrations",
+	"GATEWAY": "/gateway",
+	"APPLICATIONS_DETECTABLE": "/applications/detectable",
+	"OAUTH2_AUTHORIZE": "/oauth2/authorize",
+	"OAUTH2_AUTHORIZE_WEBHOOK_CHANNELS": "/oauth2/authorize/webhook-channels",
+	"OAUTH2_CURRENT_AUTH": "/oauth2/@me",
+	"OAUTH2_TOKENS": "/oauth2/tokens",
+	"OAUTH2_WHITELIST_ACCEPT": "/oauth2/whitelist/accept",
+	"MFA_TOTP_ENABLE": "/users/@me/mfa/totp/enable",
+	"MFA_TOTP_DISABLE": "/users/@me/mfa/totp/disable",
+	"MFA_SMS_ENABLE": "/users/@me/mfa/sms/enable",
+	"MFA_SMS_DISABLE": "/users/@me/mfa/sms/disable",
+	"MFA_CODES": "/users/@me/mfa/codes",
+	"DISABLE_EMAIL_NOTIFICATIONS": "/users/disable-email-notifications",
+	"GUILD_PREMIUM_SUBSCRIPTION_COOLDOWN": "/users/@me/guilds/premium/subscriptions/cooldown",
+	"USER_GUILD_PREMIUM_SUBSCRIPTIONS": "/users/@me/guilds/premium/subscriptions",
+	"USER_PREMIUM_GUILD_SUBSCRIPTION_SLOTS": "/users/@me/guilds/premium/subscription-slots",
+	"BILLING_STRIPE_SETUP_INTENT_SECRET": "/users/@me/billing/stripe/setup-intents",
+	"BILLING_PAYMENT_SOURCES": "/users/@me/billing/payment-sources",
+	"BILLING_PAYMENTS": "/users/@me/billing/payments",
+	"BILLING_BRAINTREE_POPUP_BRIDGE": "/billing/braintree/popup-bridge",
+	"BILLING_BRAINTREE_POPUP_BRIDGE_CALLBACK": "/billing/braintree/popup-bridge/callback",
+	"BILLING_SUBSCRIPTIONS": "/users/@me/billing/subscriptions",
+	"BILLING_APPLY_APPLE_RECEIPT": "/billing/apple/apply-receipt",
+	"BILLING_INVOICE_PREVIEW": "/users/@me/billing/invoices/preview",
+	"USER_AGREEMENTS": "/users/@me/agreements",
+	"HANDOFF": "/auth/handoff",
+	"HANDOFF_EXCHANGE": "/auth/handoff/exchange",
+	"LIBRARY": "/users/@me/library",
+	"AUTH_CONSENT_REQUIRED": "/auth/consent-required",
+	"USER_HARVEST": "/users/@me/harvest",
+	"APPLICATION_BRANCHES": "/branches",
+	"APPLICATIONS_PUBLIC": "/applications/public",
+	"APPLICATIONS_TRENDING": "/applications/trending/global",
+	"STORE_PUBLISHED_LISTINGS_APPLICATIONS": "/store/published-listings/applications",
+	"STORE_PUBLISHED_LISTINGS_SKUS": "/store/published-listings/skus",
+	"ENTITLEMENTS_GIFTABLE": "/users/@me/entitlements/gifts",
+	"PROMOTIONS": "/promotions",
+	"PROMOTION_ACK": "/promotions/ack",
+	"HYPESQUAD_ONLINE": "/hypesquad/online",
+	"GIFS_SEARCH": "/gifs/search",
+	"GIFS_TRENDING": "/gifs/trending",
+	"GIFS_TRENDING_GIFS": "/gifs/trending-gifs",
+	"GIFS_SELECT": "/gifs/select",
+	"GIFS_SUGGEST": "/gifs/suggest",
+	"GIFS_TRENDING_SEARCH": "/gifs/trending-search",
+	"USER_GIFT_CODE_CREATE": "/users/@me/entitlements/gift-codes",
+	"USER_GIFT_CODES": "/users/@me/entitlements/gift-codes",
+	"GUILD_DISCOVERY": "/discoverable-guilds",
+	"GUILD_DISCOVERY_CATEGORIES": "/discovery/categories",
+	"GUILD_DISCOVERY_VALID_TERM": "/discovery/valid-term",
+	"USER_AFFINITIES": "/users/@me/affinities/users",
+	"GUILD_AFFINITIES": "/users/@me/affinities/guilds",
+	"XBOX_GAME_PASS_PROMOTION": "/promotions/xbox-game-pass",
+	"XBOX_GAME_PASS_PROMOTION_REDEEM": "/promotions/xbox-game-pass/redeem",
+	"FUNIMATION_PROMOTION": "/promotions/funimation",
+	"PARTNERS_CONNECTIONS": "/partners/connections",
+	"PARTNERS_APPLY": "/partners/apply",
+	"USER_STICKER_PACKS": "/users/@me/sticker-packs",
+	"INTERACTIONS": "/interactions"
+}
diff --git a/api/assets/features.json b/api/assets/features.json
new file mode 100644
index 00000000..05a858a0
--- /dev/null
+++ b/api/assets/features.json
@@ -0,0 +1,26 @@
+[
+	"ANIMATED_ICON",
+	"BANNER",
+	"COMMERCE",
+	"COMMUNITY",
+	"DISCOVERABLE",
+	"DISCOVERABLE_DISABLED",
+	"ENABLED_DISCOVERABLE_BEFORE",
+	"HUB",
+	"INVITE_SPLASH",
+	"MONETIZATION_ENABLED",
+	"MORE_EMOJI",
+	"MORE_STICKERS",
+	"NEWS",
+	"PARTNERED",
+	"PREVIEW_ENABLED",
+	"PRIVATE_THREADS",
+	"SEVEN_DAY_THREAD_ARCHIVE",
+	"THREE_DAY_THREAD_ARCHIVE",
+	"THREADS_ENABLED",
+	"TICKETED_EVENTS_ENABLED",
+	"VANITY_URL",
+	"VERIFIED",
+	"VIP_REGIONS",
+	"WELCOME_SCREEN_ENABLED"
+]
diff --git a/api/assets/openapi.yaml b/api/assets/openapi.yaml
new file mode 100644
index 00000000..06a0b72d
--- /dev/null
+++ b/api/assets/openapi.yaml
@@ -0,0 +1,136 @@
+openapi: 3.0.3
+info:
+  title: Fosscord
+  version: '9'
+  license:
+    name: GNU AGPLv3
+    url: https://www.gnu.org/licenses/agpl.txt
+    x-last-modified: 1625409195984
+  x-logo:
+    url: ''
+servers:
+  - url: https://api.fosscord.com
+    description: ''
+    x-last-modified: 1625407844365
+paths:
+  /users/:id:
+    summary: get user
+    description: test
+    get:
+      tags: []
+      responses:
+        '200':
+          $ref: '#/components/responses/User'
+          x-last-modified: 1625409722629
+      parameters:
+        - name: id
+          in: path
+          required: true
+          deprecated: false
+          x-last-modified: 1625409813480
+    x-last-modified: 1625409704895
+components:
+  schemas:
+    User:
+      type: object
+      properties:
+        avatar:
+          type: string
+          example:
+            - d83f330fc30367f859bc6ee358b14319
+        bot:
+          type: boolean
+          example:
+            - false
+        desktop:
+          type: boolean
+          example:
+            - false
+        discriminator:
+          type: string
+          example:
+            - '0001'
+        email:
+          type: string
+          example:
+            - example@example.org
+        flags:
+          type: string
+          example:
+            - '0'
+        id:
+          type: string
+          example:
+            - '732645009894277321'
+        mfa_enabled:
+          type: boolean
+          example:
+            - false
+        mobile:
+          type: boolean
+          example:
+            - false
+        nsfw_allowed:
+          type: boolean
+          example:
+            - true
+        premium:
+          type: boolean
+          example:
+            - false
+        premium_type:
+          type: number
+          example:
+            - 0
+        public_flags:
+          type: string
+          example:
+            - '0'
+        username:
+          type: string
+          example:
+            - Example
+        verified:
+          type: boolean
+          example:
+            - true
+      example:
+        avatar: d83f330fc30367f859bc6ee358b14319
+        bot: false
+        desktop: false
+        discriminator: '0001'
+        email: example@example.org
+        flags: '0'
+        id: '732645009894277321'
+        mfa_enabled: false
+        mobile: false
+        nsfw_allowed: true
+        premium: false
+        premium_type: 0
+        public_flags: '0'
+        username: Example
+        verified: true
+      x-last-modified: 1625409630283
+      required: []
+      description: test
+  securitySchemes:
+    JWTAuth:
+      scheme: bearer
+      bearerFormat: JWT
+      type: http
+      description: |-
+        Example: 
+        > Authorization: Bot <token>
+      x-last-modified: 1625407825787
+  headers: {}
+  responses:
+    User:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/User'
+      x-last-modified: 1625409578903
+  parameters: {}
+security:
+  - JWTAuth: []
+tags: []
diff --git a/api/assets/openapi.yml b/api/assets/openapi.yml
new file mode 100644
index 00000000..957b6d16
--- /dev/null
+++ b/api/assets/openapi.yml
@@ -0,0 +1,526 @@
+swagger: "2.0"
+info:
+    description: "Fosscord backend api docs"
+    version: "1.0.0"
+    title: "Fosscord Backend API"
+    termsOfService: "https://github.com/fosscord/fosscord/blob/master/LICENSE"
+    license:
+        name: "AGPL 3.0"
+        url: "https://www.gnu.org/licenses/agpl-3.0.html"
+host: "dev.fosscord.com"
+basePath: "/api/v9"
+tags:
+  - name: "Audit Log"
+    description: "Guild Audit Log resource"
+    externalDocs:
+        description: "Find out more"
+        url: "https://discord.com/developers/docs/resources/audit-log"
+  - name: "Channel"
+    description: "Channel resource"
+    externalDocs:
+        description: "Find out more"
+        url: "https://discord.com/developers/docs/resources/channel"
+schemes:
+  - "https"
+  - "http"
+paths:
+    /guilds/{guildId}/audit-logs:
+        get:
+            summary: "Returns an audit log object for the guild. Requires the 'VIEW_AUDIT_LOG' permission."
+            tags:
+              - Audit Log
+            parameters:
+              - $ref: "#/definitionsParam/guildId"
+              - name: user_id
+                in: query
+                type: string
+                description: "Type of snowflake - Filter the log for actions made by a user"
+              - name: action_type
+                in: query
+                type: integer
+                description: "The type of audit log event"
+              - name: before
+                in: query
+                type: string
+                description: "Type of snowflake - Filter the log before a certain entry id"
+              - name: limit
+                in: query
+                type: integer
+                description: "How many entries are returned (default 50, minimum 1, maximum 100)"
+            responses:
+                '200': 
+                    description: "Audit Log Object"
+                    schema:
+                        $ref: "#/definitions/Audit%20Log"
+    /channels/{channelId}:
+        get:
+            summary: "Get a channel by ID. Returns a channel object. If the channel is a thread, a thread member object is included in the returned result."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+            responses:
+                '200':
+                    description: "Channel Object"
+                    schema:
+                        $ref: "#/definitions/Channel"
+        patch:
+            summary: "Update a channel's settings. Returns a channel on success, and a 400 BAD REQUEST on invalid parameters. All JSON parameters are optional."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - name: body (Group DM)
+                in: body
+                description: "The request body when modifying Group DM channels - Fires a Channel Update Gateway event."
+                schema:
+                    type: object
+                    properties:
+                        name:
+                            type: string
+                            description: "1-100 character channel name"
+                        icon:
+                            type: string
+                            format: byte
+                            description: "base64 encoded icon"
+              - name: body (Guild channel)
+                in: body
+                description: "Requires the MANAGE_CHANNELS permission for the guild. Fires a Channel Update Gateway event. If modifying a category, individual Channel Update events will fire for each child channel that also changes. If modifying permission overwrites, the MANAGE_ROLES permission is required. Only permissions your bot has in the guild or channel can be allowed/denied (unless your bot has a MANAGE_ROLES overwrite in the channel)."
+                schema:
+                    type: object
+                    properties:
+                        name:
+                            type: string
+                            description: "1-100 character channel name"
+                        type:
+                            type: integer
+                            description: "The type of channel; only conversion between text and news is supported and only in guilds with the \"NEWS\" feature"
+                        position:
+                            type: integer
+                            default: null
+                            description: "The position of the channel in the left-hand listing"
+                        topic:
+                            type: string
+                            default: null
+                            description: "0-1024 character channel topic"
+                        nsfw:
+                            type: boolean
+                            default: null
+                            description: "Whether the channel is nsfw"
+                        rate_limit_per_user:
+                            type: integer
+                            default: null
+                            description: "Amount of seconds a user has to wait before sending another message (0-21600); bots, as well as users with the permission manage_messages or manage_channel, are unaffected"
+                        bitrate:
+                            type: integer
+                            default: null
+                            description: "The bitrate (in bits) of the voice channel; 8000 to 96000 (128000 for VIP servers)"
+                        user_limit:
+                            type: integer
+                            default: null
+                            description: "The user limit of the voice channel; 0 refers to no limit, 1 to 99 refers to a user limit"
+                        permission_overwrites:
+                            type: array
+                            items:
+                                $ref: "#/definitions/Overwrite"
+                            default: null
+                            description: "Channel or category-specific permissions"
+                        parent_id:
+                            $ref: "#/definitions/Snowflake"
+                            default: null
+                            description: "Id of the new parent category for a channel"
+                        rtc_region:
+                            type: string
+                            default: null
+                            description: "Channel voice region id, automatic when set to null"
+                        video_quality_mode:
+                            type: integer
+                            default: null
+                            description: "The camera video quality mode of the voice channel"
+                        default_auto_archive_duration:
+                            type: integer
+                            default: null
+                            description: "The default duration for newly created threads in the channel, in minutes, to automatically archive the thread after recent activity"
+              - name: body (Thread)
+                in: body
+                description: "When setting archived to false, when locked is also false, only the SEND_MESSAGES permission is required.Otherwise, requires the MANAGE_THREADS permission. Fires a Thread Update Gateway event. Requires the thread to have archived set to false or be set to false in the request."
+                schema:
+                    type: object
+                    properties:
+                        name:
+                            type: string
+                            description: "1-100 character channel name"
+                        archived:
+                            type: boolean
+                            description: "Whether the channel is archived"
+                        auto_archive_duration:
+                            type: integer
+                            description: "Duration in minutes to automatically archive the thread after recent activity, can be set to: 60, 1440, 4320, 10080 (The 3 day and 7 day archive durations require the server to be boosted. The guild features will indicate if a server is able to use those settings)"
+                        locked:
+                            type: boolean
+                            description: "When a thread is locked, only users with MANAGE_THREADS can unarchive it"
+                        rate_limit_per_user:
+                            type: integer
+                            default: null
+                            description: "Amount of seconds a user has to wait before sending another message (0-21600); bots, as well as users with the permission manage_messages, manage_thread, or manage_channel, are unaffected"
+            responses:
+                '200':
+                    description: "Channel Object"
+                    schema:
+                        $ref: "#/definitions/Channel"
+                '400':
+                    description: "Bad Request due to invalid parameters"
+        delete:
+            summary: "Delete a channel, or close a private message. Requires the MANAGE_CHANNELS permission for the guild, or MANAGE_THREADS if the channel is a thread. Deleting a category does not delete its child channels; they will have their parent_id removed and a Channel Update Gateway event will fire for each of them. Returns a channel object on success. Fires a Channel Delete Gateway event (or Thread Delete if the channel was a thread)."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+            responses:
+                '200':
+                    description: "Channel deleted sucessfully"
+    /channels/{channelId}/messages:
+        get:
+            summary: "Returns the messages for a channel. If operating on a guild channel, this endpoint requires the VIEW_CHANNEL permission to be present on the current user. If the current user is missing the 'READ_MESSAGE_HISTORY' permission in the channel then this will return no messages (since they cannot read the message history). Returns an array of message objects on success."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - name: around
+                in: query
+                type: string
+                description: "Type of snowflake - Get messages around this message ID"
+              - name: before
+                in: query
+                type: string
+                description: "Type of snowflake - Get messages before this message ID"
+              - name: after
+                in: query
+                type: string
+                description: "Type of snowflake - Get messages after this message ID"
+              - name: limit
+                in: query
+                type: integer
+                description: "Max number of messages to return (1-100)"
+                default: 50
+            responses:
+                '200':
+                    description: "Returns an array of message objects on success"
+                    schema:
+                        type: array
+                        items:
+                            $ref: "#/definitions/Message"
+    /channels/{channelId}/messages/{messageId}:
+        get:
+            summary: "Returns a specific message in the channel. If operating on a guild channel, this endpoint requires the 'READ_MESSAGE_HISTORY' permission to be present on the current user. Returns a message object on success."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+            responses:
+                '200':
+                    description: "Returns a message object on success"
+                    schema:
+                        $ref: "#/definitions/Message"
+        post:
+            summary: "Post a message to a guild text or DM channel. Returns a message object. Fires a Message Create Gateway event. See message formatting for more information on how to properly format messages."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+              - name: body
+                in: body
+                required: true
+                description: "Request body that contains the necessary data for creating messages"
+                schema:
+                    type: object
+                    properties:
+                        content:
+                            type: string
+                            description: "The message contents (up to 2000 characters)"
+                        tts:
+                            type: boolean
+                            description: "True if this is a TTS message"
+                            default: null
+                        file:
+                            type: string
+                            format: binary
+                            description: "The contents of the file being sent"
+                        embeds:
+                            type: array
+                            items:
+                                $ref: "#/definitions/Embed"
+                            description: "Embedded rich content (up to 6000 characters)"
+                        payload_json:
+                            type: string
+                            description: "JSON encoded body of non-file params"
+                            default: null
+                        allowed_mentions:
+                            $ref: "#/definitions/Allowed%20Mention"
+                            description: "Allowed mentions for the message"
+                            default: null
+                        message_refrence:
+                            $ref: "#/definitions/Message%20Refrence"
+                            description: "Include to make your message a reply"
+                            default: null
+                        components:
+                            type: array
+                            items:
+                                $ref: "#/definitions/Message%20Component"
+                            default: null
+            responses:
+                '200':
+                    description: "Returns a message object on success"
+                    schema:
+                        $ref: "#/definitions/Message"
+        patch:
+            summary: "Edit a previously sent message. The fields content, embeds, and flags can be edited by the original message author. Other users can only edit flags and only if they have the MANAGE_MESSAGES permission in the corresponding channel. When specifying flags, ensure to include all previously set flags/bits in addition to ones that you are modifying. Only flags documented in the table below may be modified by users (unsupported flag changes are currently ignored without error)."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+              - name: body
+                in: body
+                required: true
+                description: "Request body that contains the necessary data for editing messages"
+                schema:
+                    type: object
+                    properties:
+                        content:
+                            type: string
+                            description: "The message contents (up to 2000 characters)"
+                        embeds:
+                            type: array
+                            items:
+                                $ref: "#/definitions/Embed"
+                            description: "Embedded rich content (up to 6000 characters)"
+                        flags:
+                            type: integer
+                            description: "Edit the flags of a message (only SUPPRESS_EMBEDS can currently be set/unset)"
+                        file:
+                            type: string
+                            format: binary
+                            description: "The contents of the file being sent/edited"
+                        payload_json:
+                            type: string
+                            description: "JSON encoded body of non-file params (multipart/form-data only)"
+                            default: null
+                        allowed_mentions:
+                            $ref: "#/definitions/Allowed%20Mention"
+                            description: "Allowed mentions for the message"
+                            default: null
+                        message_refrence:
+                            $ref: "#/definitions/Message%20Refrence"
+                            description: "Include to make your message a reply"
+                            default: null
+                        components:
+                            type: array
+                            items:
+                                $ref: "#/definitions/Message%20Component"
+                            default: null
+            responses:
+                '200':
+                    description: "Message edited"
+        delete:
+            summary: "Delete a message. If operating on a guild channel and trying to delete a message that was not sent by the current user, this endpoint requires the MANAGE_MESSAGES permission. Returns a 204 empty response on success. Fires a Message Delete Gateway event."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+            responses:
+                '204':
+                    description: "Returns a 204 empty response on success."
+    /channels/{channelId}/messages/{messageId}/crosspost:
+        post:
+            summary: "Crosspost a message in a News Channel to following channels. This endpoint requires the 'SEND_MESSAGES' permission, if the current user sent the message, or additionally the 'MANAGE_MESSAGES' permission, for all other messages, to be present for the current user."
+            tags:
+                - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+            responses:
+                '200':
+                    description: "Returns a message object on success"
+                    schema:
+                        $ref: "#/definitions/Message"
+    /channels/{channelId}/messages/{messageId}/reactions/{emoji}/@me:
+        put:
+            summary: "Create a reaction for the message. This endpoint requires the 'READ_MESSAGE_HISTORY' permission to be present on the current user. Additionally, if nobody else has reacted to the message using this emoji, this endpoint requires the 'ADD_REACTIONS' permission to be present on the current user. Returns a 204 empty response on success. The emoji must be URL Encoded or the request will fail with 10014: Unknown Emoji. To use custom emoji, you must encode it in the format name:id with the emoji name and emoji id."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+              - $ref: "#/definitionsParam/emoji"
+            responses:
+                '204':
+                    description: "Returns a 204 empty response on success."
+        delete:
+            summary: "Delete a reaction the current user has made for the message. Returns a 204 empty response on success. The emoji must be URL Encoded or the request will fail with 10014: Unknown Emoji. To use custom emoji, you must encode it in the format name:id with the emoji name and emoji id."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+              - $ref: "#/definitionsParam/emoji"
+            responses:
+                '204':
+                    description: "Returns a 204 empty response on success."
+    /channels/{channelId}/messages/{messageId}/reactions/{emoji}/{userId}:
+        delete:
+            summary: "Deletes another user's reaction. This endpoint requires the 'MANAGE_MESSAGES' permission to be present on the current user. Returns a 204 empty response on success. The emoji must be URL Encoded or the request will fail with 10014: Unknown Emoji. To use custom emoji, you must encode it in the format name:id with the emoji name and emoji id."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+              - $ref: "#/definitionsParam/emoji"
+              - $ref: "#/definitionsParam/userId"
+            responses:
+                '204':
+                    description: "Returns a 204 empty response on success."
+    /channels/{channelId}/messages/{messageId}/reactions/{emoji}:
+        get:
+            summary: "Get a list of users that reacted with this emoji. Returns an array of user objects on success. The emoji must be URL Encoded or the request will fail with 10014: Unknown Emoji. To use custom emoji, you must encode it in the format name:id with the emoji name and emoji id."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+              - $ref: "#/definitionsParam/emoji"
+              - name: after
+                in: query
+                type: string
+                description: "Type of snowflake - Get users after this user ID"
+              - name: limit
+                in: query
+                type: integer
+                description: "Max number of users to return (1-100)"
+                default: 25
+            responses:
+                '200':
+                    description: "Returns an array of user objects on success"
+                    schema:
+                        type: array
+                        items:
+                            $ref: "#/definitions/User"
+        delete:
+            summary: "Deletes all the reactions for a given emoji on a message. This endpoint requires the MANAGE_MESSAGES permission to be present on the current user. Fires a Message Reaction Remove Emoji Gateway event. The emoji must be URL Encoded or the request will fail with 10014: Unknown Emoji. To use custom emoji, you must encode it in the format name:id with the emoji name and emoji id."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+              - $ref: "#/definitionsParam/emoji"
+            responses:
+                '204':
+                    description: "Returns a 204 empty response on success."
+    /channels/{channelId}/messages/{messageId}/reactions:
+        delete:
+            summary: "Deletes all reactions on a message. This endpoint requires the 'MANAGE_MESSAGES' permission to be present on the current user. Fires a Message Reaction Remove All Gateway event."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+              - $ref: "#/definitionsParam/messageId"
+            responses:
+                '204':
+                    description: "Returns a 204 empty response on success."
+    /channels/{channelId}/messages/bulk-delete:
+        post:
+            summary: "Delete multiple messages in a single request. This endpoint can only be used on guild channels and requires the MANAGE_MESSAGES permission. Returns a 204 empty response on success. Fires a Message Delete Bulk Gateway event."
+            tags:
+              - Channel
+            parameters:
+              - $ref: "#/definitionsParam/channelId"
+            responses:
+                '204':
+                    description: "Returns a 204 empty response on success."
+definitions:
+    Snowflake:
+        type: string
+        pattern: "^\\d+$"
+    Audit Log:
+        type: object
+        properties:
+            webhooks:
+                type: array
+                items:
+                    $ref: "#/definitions/Webhook"
+                description: "List of webhooks found in the audit log"
+            users:
+                type: array
+                items:
+                    $ref: "#/definitions/User"
+                description: "List of users found in the audit log"
+            audit_log_entries:
+                type: array
+                items:
+                    $ref: "#/definitions/Audit%20Log%20Entry"
+                description: "List of audit log entries"
+            integrations:
+                type: array
+                items:
+                    $ref: "#/definitions/Integration"
+                description: "List of partial integration objects"
+    Audit Log Entry:
+        type: object
+    Webhook:
+        type: object
+    User:
+        type: object
+    Integration:
+        type: object
+    Channel:
+        type: object
+    Overwrite:
+        type: object
+    Message:
+        type: object
+    Embed:
+        type: object
+    Allowed Mention:
+        type: object
+    Message Refrence:
+        type: object
+    Message Component:
+        type: object
+definitionsParam:
+    channelId:
+        name: channelId
+        in: path
+        required: true
+        type: string
+        description: "Type of snowflake - A channel Id"
+    messageId:
+        name: messageId
+        in: path
+        required: true
+        type: string
+        description: "Type of snowflake - A message ID"
+    guildId:
+        name: guildId
+        in: path
+        required: true
+        type: string
+        description: "Type of snowflake - A guild ID"
+    emoji:
+        name: emoji
+        in: path
+        required: true
+        type: string
+        format: url
+        description: "The emoji ID to use"
+    userId:
+        name: userId
+        in: path
+        required: true
+        type: string
+        description: "Type of snowflake - A user ID"
+externalDocs:
+    description: "Discord API"
+    url: "https://discord.com/developers/docs/"
diff --git a/api/assets/widget/banner1.png b/api/assets/widget/banner1.png
new file mode 100644
index 00000000..ed9bd5c0
--- /dev/null
+++ b/api/assets/widget/banner1.png
Binary files differdiff --git a/api/assets/widget/banner2.png b/api/assets/widget/banner2.png
new file mode 100644
index 00000000..90d3713d
--- /dev/null
+++ b/api/assets/widget/banner2.png
Binary files differdiff --git a/api/assets/widget/banner3.png b/api/assets/widget/banner3.png
new file mode 100644
index 00000000..22351898
--- /dev/null
+++ b/api/assets/widget/banner3.png
Binary files differdiff --git a/api/assets/widget/banner4.png b/api/assets/widget/banner4.png
new file mode 100644
index 00000000..e6bd7b6f
--- /dev/null
+++ b/api/assets/widget/banner4.png
Binary files differdiff --git a/api/assets/widget/shield.png b/api/assets/widget/shield.png
new file mode 100644
index 00000000..30277db2
--- /dev/null
+++ b/api/assets/widget/shield.png
Binary files differ